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

Retain partially valid structs in convert.Normalize #1203

Merged
merged 1 commit into from
Feb 13, 2024

Conversation

pietern
Copy link
Contributor

@pietern pietern commented Feb 13, 2024

Changes

Before this change, any error in a subtree would cause the entire subtree to be dropped from the output.

This is not ideal when debugging, so instead we drop only the values that cannot be normalized. Note that this doesn't change behavior if the caller is properly checking the returned diagnostics for errors.

Note: this includes a change to use dyn.InvalidValue as opposed to dyn.NilValue when returning errors.

Tests

Added unit tests for the case where nested struct, map, or slice elements contain an error.

Before this change, any error in a subtree would cause the entire subtree to be
dropped from the output.

This is not ideal when debugging, so instead we drop only the values that
cannot be normalized. Note that this doesn't change behavior if the caller is
properly checking the returned diagnostics for errors.
@@ -69,7 +69,7 @@ func normalizeStruct(typ reflect.Type, src dyn.Value) (dyn.Value, diag.Diagnosti
if err != nil {
diags = diags.Extend(err)
// Skip the element if it cannot be normalized.
if err.HasError() {
if !v.IsValid() {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Notable change 1

@@ -97,7 +97,7 @@ func normalizeMap(typ reflect.Type, src dyn.Value) (dyn.Value, diag.Diagnostics)
if err != nil {
diags = diags.Extend(err)
// Skip the element if it cannot be normalized.
if err.HasError() {
if !v.IsValid() {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Notable change 2

@@ -125,7 +125,7 @@ func normalizeSlice(typ reflect.Type, src dyn.Value) (dyn.Value, diag.Diagnostic
if err != nil {
diags = diags.Extend(err)
// Skip the element if it cannot be normalized.
if err.HasError() {
if !v.IsValid() {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Notable change 3

@codecov-commenter
Copy link

codecov-commenter commented Feb 13, 2024

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (4073e45) 51.92% compared to head (d1f558f) 51.91%.
Report is 6 commits behind head on main.

Files Patch % Lines
libs/dyn/convert/from_typed.go 36.36% 7 Missing ⚠️
libs/dyn/convert/normalize.go 92.85% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1203      +/-   ##
==========================================
- Coverage   51.92%   51.91%   -0.01%     
==========================================
  Files         299      299              
  Lines       16554    16607      +53     
==========================================
+ Hits         8595     8621      +26     
- Misses       7335     7357      +22     
- Partials      624      629       +5     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@pietern pietern added this pull request to the merge queue Feb 13, 2024
Merged via the queue into main with commit aa0c715 Feb 13, 2024
4 checks passed
@pietern pietern deleted the dyn-retain-invalid-structs branch February 13, 2024 14:19
andrewnester added a commit that referenced this pull request Feb 15, 2024
CLI:
 * Ignore environment variables for `auth profiles` ([#1189](#1189)).
 * Update LICENSE ([#1013](#1013)).

Bundles:
 * Added `bundle deployment bind` and `unbind` command ([#1131](#1131)).
 * Use allowlist for Git-related fields to include in metadata ([#1187](#1187)).
 * Added `--restart` flag for `bundle run` command ([#1191](#1191)).
 * Generate correct YAML if custom_tags or spark_conf is used for pipeline or job cluster configuration ([#1210](#1210)).

Internal:
 * Move folders package into libs ([#1184](#1184)).
 * Log time it takes for profile to load ([#1186](#1186)).
 * Use mockery to generate mocks compatible with testify/mock ([#1190](#1190)).
 * Retain partially valid structs in `convert.Normalize` ([#1203](#1203)).
 * Skip `for_each_task` when generating the bundle schema ([#1204](#1204)).
 * Regenerate the CLI using the same OpenAPI spec as the SDK ([#1205](#1205)).
 * Avoid race-conditions while executing sub-commands ([#1201](#1201)).

API Changes:
 * Changed `databricks connections delete` command with new required argument order.
 * Changed `databricks connections get` command with new required argument order.
 * Changed `databricks connections update` command with new required argument order.
 * Added `databricks tables exists` command.
 * Changed `databricks volumes delete` command with new required argument order.
 * Changed `databricks volumes read` command with new required argument order.
 * Changed `databricks volumes update` command with new required argument order.
 * Added `databricks lakehouse-monitors` command group.
 * Removed `databricks files get-status` command.
 * Added `databricks files create-directory` command.
 * Added `databricks files delete-directory` command.
 * Added `databricks files get-directory-metadata` command.
 * Added `databricks files get-metadata` command.
 * Added `databricks files list-directory-contents` command.
 * Removed `databricks pipelines reset` command.
 * Changed `databricks account settings delete-personal-compute-setting` command with new required argument order.
 * Removed `databricks account settings read-personal-compute-setting` command.
 * Changed `databricks account settings update-personal-compute-setting` command with new required argument order.
 * Added `databricks account settings get-personal-compute-setting` command.
 * Removed `databricks settings delete-default-workspace-namespace` command.
 * Removed `databricks settings read-default-workspace-namespace` command.
 * Removed `databricks settings update-default-workspace-namespace` command.
 * Added `databricks settings delete-default-namespace-setting` command.
 * Added `databricks settings delete-restrict-workspace-admins-setting` command.
 * Added `databricks settings get-default-namespace-setting` command.
 * Added `databricks settings get-restrict-workspace-admins-setting` command.
 * Added `databricks settings update-default-namespace-setting` command.
 * Added `databricks settings update-restrict-workspace-admins-setting` command.
 * Changed `databricks token-management create-obo-token` command with new required argument order.
 * Changed `databricks token-management get` command to return .
 * Changed `databricks clean-rooms delete` command with new required argument order.
 * Changed `databricks clean-rooms get` command with new required argument order.
 * Changed `databricks clean-rooms update` command with new required argument order.
 * Changed `databricks dashboards create` command . New request type is .
 * Added `databricks dashboards update` command.

OpenAPI commit c40670f5a2055c92cf0a6aac92a5bccebfb80866 (2024-02-14)
Dependency updates:
 * Bump github.com/hashicorp/hc-install from 0.6.2 to 0.6.3 ([#1200](#1200)).
 * Bump golang.org/x/term from 0.16.0 to 0.17.0 ([#1197](#1197)).
 * Bump golang.org/x/oauth2 from 0.16.0 to 0.17.0 ([#1198](#1198)).
 * Bump github.com/databricks/databricks-sdk-go from 0.30.1 to 0.32.0 ([#1199](#1199)).
@andrewnester andrewnester mentioned this pull request Feb 15, 2024
github-merge-queue bot pushed a commit that referenced this pull request Feb 15, 2024
CLI:
* Ignore environment variables for `auth profiles`
([#1189](#1189)).
* Update LICENSE file to match Databricks license language
([#1013](#1013)).

Bundles:
* Added `bundle deployment bind` and `unbind` command
([#1131](#1131)).
* Use allowlist for Git-related fields to include in metadata
([#1187](#1187)).
* Added `--restart` flag for `bundle run` command
([#1191](#1191)).
* Generate correct YAML if `custom_tags` or `spark_conf` is used for
pipeline or job cluster configuration
([#1210](#1210)).

Internal:
* Move folders package into libs
([#1184](#1184)).
* Log time it takes for profile to load
([#1186](#1186)).
* Use mockery to generate mocks compatible with testify/mock
([#1190](#1190)).
* Retain partially valid structs in `convert.Normalize`
([#1203](#1203)).
* Skip `for_each_task` when generating the bundle schema
([#1204](#1204)).
* Regenerate the CLI using the same OpenAPI spec as the SDK
([#1205](#1205)).
* Avoid race-conditions while executing sub-commands
([#1201](#1201)).

API Changes:
 * Added `databricks tables exists` command.
 * Added `databricks lakehouse-monitors` command group.
 * Removed `databricks files get-status` command.
 * Added `databricks files create-directory` command.
 * Added `databricks files delete-directory` command.
 * Added `databricks files get-directory-metadata` command.
 * Added `databricks files get-metadata` command.
 * Added `databricks files list-directory-contents` command.
 * Removed `databricks pipelines reset` command.
* Changed `databricks account settings delete-personal-compute-setting`
command with new required argument order.
* Removed `databricks account settings read-personal-compute-setting`
command.
* Changed `databricks account settings update-personal-compute-setting`
command with new required argument order.
* Added `databricks account settings get-personal-compute-setting`
command.
* Removed `databricks settings delete-default-workspace-namespace`
command.
* Removed `databricks settings read-default-workspace-namespace`
command.
* Removed `databricks settings update-default-workspace-namespace`
command.
 * Added `databricks settings delete-default-namespace-setting` command.
* Added `databricks settings delete-restrict-workspace-admins-setting`
command.
 * Added `databricks settings get-default-namespace-setting` command.
* Added `databricks settings get-restrict-workspace-admins-setting`
command.
 * Added `databricks settings update-default-namespace-setting` command.
* Added `databricks settings update-restrict-workspace-admins-setting`
command.
* Changed `databricks token-management create-obo-token` command with
new required argument order.
 * Changed `databricks token-management get` command to return .
* Changed `databricks dashboards create` command . New request type is .
 * Added `databricks dashboards update` command.

OpenAPI commit c40670f5a2055c92cf0a6aac92a5bccebfb80866 (2024-02-14)
Dependency updates:
* Bump github.com/hashicorp/hc-install from 0.6.2 to 0.6.3
([#1200](#1200)).
* Bump golang.org/x/term from 0.16.0 to 0.17.0
([#1197](#1197)).
* Bump golang.org/x/oauth2 from 0.16.0 to 0.17.0
([#1198](#1198)).
* Bump github.com/databricks/databricks-sdk-go from 0.30.1 to 0.32.0
([#1199](#1199)).

---------

Co-authored-by: Pieter Noordhuis <pieter.noordhuis@databricks.com>
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.

None yet

3 participants