Repository navigation
Conversation
Collaborator
Integration test reportCommit: 586b4f7
Top 6 slowest tests (at least 2 minutes):
|
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 7, 2026 09:41
13fac18 to
b2a1c10
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 7, 2026 12:40
6ee2caa to
68af62f
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 7, 2026 14:08
baccaac to
7086a71
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 7, 2026 14:33
7086a71 to
4c4f0b3
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 7, 2026 14:38
4c4f0b3 to
3bb81b3
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
2 times, most recently
from
October 7, 2026 16:17
722c97c to
649bde3
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 7, 2026 21:11
649bde3 to
67d1321
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 8, 2026 07:52
67d1321 to
d49f829
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 8, 2026 11:18
d49f829 to
b22dd28
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 8, 2026 11:34
b22dd28 to
799731f
Compare
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
2 times, most recently
from
October 15, 2026 14:04
2ae530d to
819660f
Compare
NewPattern builds a pattern from parts like NewPath does for paths, so callers don't nest the single-step constructors or parse pattern strings. Co-authored-by: Isaac <no-reply@databricks.com>
…r refs and locations
Bundle configuration is the typed struct plus structvar (pure ${...}
references in non-string fields and a tree of source locations). YAML and
JSON decode straight into the structs; mutators, validators, variable
resolution, configsync and generate work on structvar views and structpath
paths. libs/dyn is deleted.
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
… test Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
- configsync: compare int and int64 values as equal when restoring variable references (variables decode as int, remote fields are int64). - schema annotations: merge object/sequence defaults as documented; accept an empty annotations file. - python mutator: use ResourceKeySet.AddPattern instead of a duplicate helper. - structvar.Set: don't rewrite an unchanged leaf location node (avoids cloning every ancestor per write). - ResolveConfigAgainstState: resolve all references in one call so lookups are shared. Co-authored-by: Isaac <no-reply@databricks.com>
…ctpath Co-authored-by: Isaac <no-reply@databricks.com>
- apply_default_task_source: an explicit source: "" is user-set; detect it by its definition location (not every task type has ForceSendFields). - pipeline_development_deprecated: warn on any user-written development value, including a reference resolving to an unset field. - rewriteShorthands: a later merged map takes precedence over an earlier one, and merge keys are expanded before detecting a full variable definition. - required: look dashboards up by a path that round-trips keys with path syntax. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
…om parts Earlier rebases resolved conflicts with #6980 in favor of string paths, reverting call sites that main already builds with structpath.NewPath. Restore main's versions where this PR has no reason to change them, and make the app permission checks take a path node instead of parsing a string. Co-authored-by: Isaac <no-reply@databricks.com>
… parts Root's location lookups take a *structpath.PathNode and say which value they return: NearestLocations/NearestLocation fall back to the closest ancestor with a location (for diagnostics), ExactLocations/ExactLocation return where the value is written (empty if a mutator set it). The string variants are gone, so callers build paths from parts instead of formatting and parsing them. Literal MustParsePattern/MustParsePath calls in production code are replaced with NewPattern/NewPath, and the app permission checks read the resource view directly. Co-authored-by: Isaac <no-reply@databricks.com>
denik
force-pushed
the
denik/bundle-struct-no-dyn
branch
from
October 15, 2026 15:46
b7e9bbb to
1bcb66d
Compare
IsForceSend boxed the ForceSendFields slice on every call and FieldValues built a slice per struct; both now run on every View traversal rather than once per conversion. Iterate with reflect and yield the fields instead. BenchmarkWalkReadOnly (10k jobs): 7.16M -> 4.77M allocs. Co-authored-by: Isaac <no-reply@databricks.com>
… fields Walking a configuration examines every field of every struct, so the per-field cost dominates: - eachField/eachMapItem/eachElem take a callback instead of returning an iterator, so walking no longer allocates closures per node (MapItems and Sequence wrap them). - StructInfo keeps a field list with the index, Go name, omitempty, the governing ForceSendFields and whether the key is a dotted path component, so a visit does no lookups by name; GetStructInfo is lock-free. - ForceSendFields are read once per struct visit, not once per zero field. - An unset field that cannot be present (not a struct or interface, no location, no reference) is skipped without building its view. BenchmarkWalkReadOnly (10k jobs): 316ms -> 183ms, 4.77M -> 1.58M allocs. Co-authored-by: Isaac <no-reply@databricks.com>
denik
added a commit
that referenced
this pull request
Oct 18, 2026
The path visitors used by TranslatePaths and NormalizePaths iterate the typed resources with plain field access and pass the value as a *string, so the consumers rewrite it in place instead of looking the path up again with Set. Rules are applied one at a time over sorted resource keys, as the patterns were, so the visit order is unchanged. Paths are only built for the values that are visited. 1000 jobs (main / #6954 / this): TranslatePaths 384 / 28 / 8 ms, NormalizePaths 395 / 50 / 26 ms. Co-authored-by: Isaac <no-reply@databricks.com>
denik
added a commit
that referenced
this pull request
Oct 18, 2026
walk.Strings visits the strings of the configuration with plain field access
(generated, one function per struct type that contains strings), filtered
inline: WithReferences passes the strings that contain "${". The callback
can return a replacement, which is stored in the field. RewriteWorkspacePrefix,
TFOnlyReferences and reverse interpolation use it instead of walking every
value of the configuration; pure references in non-string fields come from
Root.References.
1000 jobs (main / #6954 / this): RewriteWorkspacePrefix 114 / 19 / 1.8 ms,
TFOnlyReferences 91 / 19 / 1.9 ms.
Co-authored-by: Isaac <no-reply@databricks.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Bundle configuration no longer goes through
libs/dyn; the package is deleted.config.Rootis the typed struct plus astructvarside: pure${...}references in non-string fields and a tree of source locations (one node per YAML value). YAML is decoded straight into the structs, with the same warnings as before.structvar.Viewand write withSet/Merge/Override/… instead of converting the whole configuration to adyn.Valueand back. Paths arestructpatheverywhere, includingdiag.Diagnostic.Paths.${...}parsing and the resource-reference resolver run on typed values (structvar.Resolve, same semantics and error text as dynvar).libs/structs/structyaml(identical output);--jsonandvariable-overrides.jsonusestructvar.ParseJSON(exact int64, same error positions).config.Roottake a path node and say which value they return:NearestLocations/NearestLocationfall back to the closest ancestor with a location (for diagnostics, so values set by mutators still point somewhere);ExactLocations/ExactLocationreturn where the value is written. Paths and patterns are built from parts (NewPath/NewPattern) instead of formatted and parsed.Adds
structpath.NewPattern(prev, parts...)withstructpath.AnyKey/structpath.AnyIndexwildcards, the pattern counterpart ofNewPath.Why
Converting the configuration typed↔dyn around mutators dominated command time on large bundles.
./task bench-1k-summary(1000 jobs, wall seconds, DMS= variant), main → this PR:(
deploy/DMS=trueat 1000 jobs fails on main too: the test server caps a deployment version at 800 operations.)Tests
Existing unit and acceptance tests; one golden changed (path quoting above). Parity tests against
libs/dyn(decode, view, writes, merge/override, walk) passed on every bundle fixture before dyn was deleted.This pull request and its description were written by Isaac.