Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass copy of dyn.Path to callback function #1747

Merged
merged 3 commits into from
Sep 5, 2024
Merged

Pass copy of dyn.Path to callback function #1747

merged 3 commits into from
Sep 5, 2024

Conversation

pietern
Copy link
Contributor

@pietern pietern commented Sep 4, 2024

Changes

Some call sites hold on to the dyn.Path provided to them by the callback. It must therefore never be mutated after the callback returns, or these mutations leak out into unknown scope.

This change means it is no longer possible for this failure mode to happen.

Tests

Unit test.

Some call sites hold on to the `dyn.Path` provided to them by the callback.
It must therefore never be mutated after the callback returns, or these
mutations leak out into unknown scope.

This change means it is no longer possible for this failure mode to happen.
@@ -21,7 +21,7 @@ func Foreach(fn MapFunc) MapFunc {
for _, pair := range m.Pairs() {
pk := pair.Key
pv := pair.Value
nv, err := fn(append(p, Key(pk.MustString())), pv)
nv, err := fn(p.Append(Key(pk.MustString())), pv)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried but was unable to create a failing test case for this. The dyn.Foreach function is called as "inner" function for dyn.Map, so it is already provided with a cloned path.

@@ -32,7 +32,7 @@ func Foreach(fn MapFunc) MapFunc {
s := slices.Clone(v.MustSequence())
for i, value := range s {
var err error
s[i], err = fn(append(p, Index(i)), value)
s[i], err = fn(p.Append(Index(i)), value)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same.

Copy link
Contributor

@andrewnester andrewnester left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved to unblock, but we need to address 2 cases in expand_glob_* files

@pietern pietern added this pull request to the merge queue Sep 5, 2024
Merged via the queue into main with commit ceefa80 Sep 5, 2024
5 checks passed
@pietern pietern deleted the dyn-path-copy branch September 5, 2024 11:12
andrewnester added a commit that referenced this pull request Sep 18, 2024
CLI:
 * Added listing cluster filtering for cluster lookups ([#1754](#1754)).

Bundles:
 * Expand library globs relative to the sync root ([#1756](#1756)).
 * Fixed generated YAML missing 'default' for empty values ([#1765](#1765)).
 * Use periodic triggers in all templates ([#1739](#1739)).
 * Use the friendly name of service principals when shortening their name ([#1770](#1770)).
 * Fixed detecting full syntax variable override which includes type field ([#1775](#1775)).

Internal:
 * Pass copy of `dyn.Path` to callback function ([#1747](#1747)).
 * Make bundle JSON schema modular with `$defs` ([#1700](#1700)).
 * Alias variables block in the `Target` struct ([#1748](#1748)).
 * Add end to end integration tests for bundle JSON schema ([#1726](#1726)).
 * Fix artifact upload integration tests ([#1767](#1767)).

API Changes:
 * Added `databricks quality-monitors regenerate-dashboard` command.

OpenAPI commit d05898328669a3f8ab0c2ecee37db2673d3ea3f7 (2024-09-04)
Dependency updates:
 * Bump golang.org/x/term from 0.23.0 to 0.24.0 ([#1757](#1757)).
 * Bump golang.org/x/oauth2 from 0.22.0 to 0.23.0 ([#1761](#1761)).
 * Bump golang.org/x/text from 0.17.0 to 0.18.0 ([#1759](#1759)).
 * Bump github.com/databricks/databricks-sdk-go from 0.45.0 to 0.46.0 ([#1760](#1760)).
github-merge-queue bot pushed a commit that referenced this pull request Sep 18, 2024
Bundles:
* Added listing cluster filtering for cluster lookups
([#1754](#1754)).
* Expand library globs relative to the sync root
([#1756](#1756)).
* Fixed generated YAML missing 'default' for empty values
([#1765](#1765)).
* Use periodic triggers in all templates
([#1739](#1739)).
* Use the friendly name of service principals when shortening their name
([#1770](#1770)).
* Fixed detecting full syntax variable override which includes type
field ([#1775](#1775)).

Internal:
* Pass copy of `dyn.Path` to callback function
([#1747](#1747)).
* Make bundle JSON schema modular with `$defs`
([#1700](#1700)).
* Alias variables block in the `Target` struct
([#1748](#1748)).
* Add end to end integration tests for bundle JSON schema
([#1726](#1726)).
* Fix artifact upload integration tests
([#1767](#1767)).

API Changes:
 * Added `databricks quality-monitors regenerate-dashboard` command.

OpenAPI commit d05898328669a3f8ab0c2ecee37db2673d3ea3f7 (2024-09-04)
Dependency updates:
* Bump golang.org/x/term from 0.23.0 to 0.24.0
([#1757](#1757)).
* Bump golang.org/x/oauth2 from 0.22.0 to 0.23.0
([#1761](#1761)).
* Bump golang.org/x/text from 0.17.0 to 0.18.0
([#1759](#1759)).
* Bump github.com/databricks/databricks-sdk-go from 0.45.0 to 0.46.0
([#1760](#1760)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants