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

Fixed panic when loading incorrectly defined jobs #1402

Merged
merged 6 commits into from
May 17, 2024
Merged

Conversation

andrewnester
Copy link
Contributor

Changes

If only key was defined for a job in YAML config, validate previously failed with segfault.

This PR validates that jobs are correctly defined and returns an error if not.

Tests

Added regression test

func (r *Resources) VerifyAllResourcesDefined() error {
for k, e := range r.Jobs {
if e == nil || !e.DynamicValue.IsValid() {
return fmt.Errorf("job %s is not defined", k)
Copy link
Contributor

Choose a reason for hiding this comment

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

Is it possible to use diag and return the location where the undefined job is located?

Copy link
Contributor

Choose a reason for hiding this comment

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

I would prefer enforcing this is implemented by adding a function to ConfigResource.

Then all new resources have to implement the function or it won't compile.

Copy link
Contributor

Choose a reason for hiding this comment

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

+1 we need to increasingly think about how to make it really simple to add new ConfigResources

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@shreyas-goenka we can but location won't be available because e.DynamicValue is not valid

Copy link
Contributor

@pietern pietern left a comment

Choose a reason for hiding this comment

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

Where did this show up?

There is another case worth taking a look at -- the nested JobsSettings struct is a pointer, so if none of the fields it defines are set, it will be nil itself.

If we could check that as well in a checker function we protect against more panics.

func (r *Resources) VerifyAllResourcesDefined() error {
for k, e := range r.Jobs {
if e == nil || !e.DynamicValue.IsValid() {
return fmt.Errorf("job %s is not defined", k)
Copy link
Contributor

Choose a reason for hiding this comment

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

I would prefer enforcing this is implemented by adding a function to ConfigResource.

Then all new resources have to implement the function or it won't compile.

@andrewnester
Copy link
Contributor Author

Where did this show up?

@pietern customer reported issue when defined job incorrectly bundle validate paniced instead of returning diagnostic error

bundle/config/resources.go Outdated Show resolved Hide resolved
@andrewnester andrewnester added this pull request to the merge queue May 17, 2024
Merged via the queue into main with commit a014d50 May 17, 2024
5 checks passed
@andrewnester andrewnester deleted the fix/seg-fault branch May 17, 2024 10:17
pietern added a commit that referenced this pull request May 22, 2024
CLI:
 * Add line about Docker installation to README.md ([#1363](#1363)).
 * Improve token refresh flow ([#1434](#1434)).

Bundles:
 * Upgrade Terraform provider to v1.42.0 ([#1418](#1418)).
 * Upgrade Terraform provider to v1.43.0 ([#1429](#1429)).
 * Don't merge-in remote resources during deployments ([#1432](#1432)).
 * Remove dependency on `ConfigFilePath` from path translation mutator ([#1437](#1437)).
 * Add `merge.Override` transform ([#1428](#1428)).
 * Fixed panic when loading incorrectly defined jobs ([#1402](#1402)).
 * Add more tests for `merge.Override` ([#1439](#1439)).
 * Fixed seg fault when specifying environment key for tasks ([#1443](#1443)).
 * Fix conversion of zero valued scalar pointers to a dynamic value ([#1433](#1433)).

Internal:
 * Don't hide commands of services that are already hidden ([#1438](#1438)).

API Changes:
 * Renamed `lakehouse-monitors` command group to `quality-monitors`.
 * Added `apps` command group.
 * Renamed `csp-enablement` command group to `compliance-security-profile`.
 * Renamed `esm-enablement` command group to `enhanced-security-monitoring`.
 * Added `databricks vector-search-indexes scan-index` command.

OpenAPI commit 7eb5ad9a2ed3e3f1055968a2d1014ac92c06fe92 (2024-05-21)

Dependency updates:
 * Bump golang.org/x/text from 0.14.0 to 0.15.0 ([#1419](#1419)).
 * Bump golang.org/x/oauth2 from 0.19.0 to 0.20.0 ([#1421](#1421)).
 * Bump golang.org/x/term from 0.19.0 to 0.20.0 ([#1422](#1422)).
 * Bump github.com/databricks/databricks-sdk-go from 0.39.0 to 0.40.1 ([#1431](#1431)).
 * Bump github.com/fatih/color from 1.16.0 to 1.17.0 ([#1441](#1441)).
 * Bump github.com/hashicorp/terraform-json from 0.21.0 to 0.22.1 ([#1440](#1440)).
 * Bump github.com/hashicorp/terraform-exec from 0.20.0 to 0.21.0 ([#1442](#1442)).
 * Update Go SDK to v0.41.0 ([#1445](#1445)).
@pietern pietern mentioned this pull request May 22, 2024
github-merge-queue bot pushed a commit that referenced this pull request May 22, 2024
CLI:
* Add line about Docker installation to README.md
([#1363](#1363)).
* Improve token refresh flow
([#1434](#1434)).

Bundles:
* Upgrade Terraform provider to v1.42.0
([#1418](#1418)).
* Upgrade Terraform provider to v1.43.0
([#1429](#1429)).
* Don't merge-in remote resources during deployments
([#1432](#1432)).
* Remove dependency on `ConfigFilePath` from path translation mutator
([#1437](#1437)).
* Add `merge.Override` transform
([#1428](#1428)).
* Fixed panic when loading incorrectly defined jobs
([#1402](#1402)).
* Add more tests for `merge.Override`
([#1439](#1439)).
* Fixed seg fault when specifying environment key for tasks
([#1443](#1443)).
* Fix conversion of zero valued scalar pointers to a dynamic value
([#1433](#1433)).

Internal:
* Don't hide commands of services that are already hidden
([#1438](#1438)).

API Changes:
 * Renamed `lakehouse-monitors` command group to `quality-monitors`.
 * Added `apps` command group.
* Renamed `csp-enablement` command group to
`compliance-security-profile`.
* Renamed `esm-enablement` command group to
`enhanced-security-monitoring`.
 * Added `databricks vector-search-indexes scan-index` command.

OpenAPI commit 7eb5ad9a2ed3e3f1055968a2d1014ac92c06fe92 (2024-05-21)

Dependency updates:
* Bump golang.org/x/text from 0.14.0 to 0.15.0
([#1419](#1419)).
* Bump golang.org/x/oauth2 from 0.19.0 to 0.20.0
([#1421](#1421)).
* Bump golang.org/x/term from 0.19.0 to 0.20.0
([#1422](#1422)).
* Bump github.com/databricks/databricks-sdk-go from 0.39.0 to 0.40.1
([#1431](#1431)).
* Bump github.com/fatih/color from 1.16.0 to 1.17.0
([#1441](#1441)).
* Bump github.com/hashicorp/terraform-json from 0.21.0 to 0.22.1
([#1440](#1440)).
* Bump github.com/hashicorp/terraform-exec from 0.20.0 to 0.21.0
([#1442](#1442)).
* Update Go SDK to v0.41.0
([#1445](#1445)).
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

4 participants