Skip to content

Commit 4a0a8ab

Browse files
authored
[Needs SDK 0.80.0+] Include more details from SDK/API errors in the diagnostics (#3379)
## Changes - Any API error passed to diag.FromErr or logdiag.LogError will automatically be formatted to include HTTP status/message, HTTP method + full url, API code and message. - Custom error from direct deployment is removed, it's no longer needed. ## Why SDK errors by default only contain "message" from payload which sometimes looks like this "Request 123 failed". DABs/CLI do not add a lot of context to errors, so that message is all you see. This makes debugging very hard. I've been fixing this in direct deployment by - adding context to errors everywhere - tagging errors with endpoint This PR makes tagging unnecessary and adds better error handling to all of CLI - as long as you use logdiag.LogError, it'll add those critical details, see create-error test for example of the output. Requires databricks/databricks-sdk-go#1261 ## Tests Existing tests.
1 parent 53b51b1 commit 4a0a8ab

File tree

13 files changed

+160
-101
lines changed

13 files changed

+160
-101
lines changed

NEXT_CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010

1111
### Bundles
1212
* Add support for Lakebase database instances in DABs ([#3283](https://github.com/databricks/cli/pull/3283))
13+
* Improve error message for SDK/API errors ([#3379](https://github.com/databricks/cli/pull/3379))
1314

1415
### API Changes

acceptance/bundle/resources/jobs/create-error/output.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ Warning: required field "new_cluster" is not set
66

77
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
88
Deploying resources...
9-
Error: deploying jobs.foo: creating: Method=Jobs.Create *retries.Err *apierr.APIError StatusCode=400 ErrorCode="INVALID_PARAMETER_VALUE" Message="Shared job cluster feature is only supported in multi-task jobs."
9+
Error: deploying jobs.foo: creating: Shared job cluster feature is only supported in multi-task jobs. (400 INVALID_PARAMETER_VALUE)
10+
11+
Endpoint: POST [DATABRICKS_URL]/api/2.2/jobs/create
12+
HTTP Status: 400 Bad Request
13+
API error_code: INVALID_PARAMETER_VALUE
14+
API message: Shared job cluster feature is only supported in multi-task jobs.
1015

1116
Updating deployment state...
1217

bundle/terranova/tnresources/app.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (r *ResourceApp) DoCreate(ctx context.Context) (string, error) {
3333
}
3434
waiter, err := r.client.Apps.Create(ctx, request)
3535
if err != nil {
36-
return "", SDKError{Method: "Apps.Create", Err: err}
36+
return "", err
3737
}
3838

3939
// TODO: Store waiter for Wait method
@@ -48,7 +48,7 @@ func (r *ResourceApp) DoUpdate(ctx context.Context, id string) error {
4848
}
4949
response, err := r.client.Apps.Update(ctx, request)
5050
if err != nil {
51-
return SDKError{Method: "Apps.Update", Err: err}
51+
return err
5252
}
5353

5454
if response.Name != id {

bundle/terranova/tnresources/database_instance.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (d *ResourceDatabaseInstance) DoCreate(ctx context.Context) (string, error)
2323
DatabaseInstance: d.config,
2424
})
2525
if err != nil {
26-
return "", SDKError{Method: "Database.CreateDatabaseInstance", Err: err}
26+
return "", err
2727
}
2828
d.waiter = waiter
2929
return waiter.Response.Name, nil
@@ -38,21 +38,15 @@ func (d ResourceDatabaseInstance) DoUpdate(ctx context.Context, id string) error
3838
request.DatabaseInstance.Uid = id
3939

4040
_, err := d.client.Database.UpdateDatabaseInstance(ctx, request)
41-
if err != nil {
42-
return SDKError{Method: "Database.UpdateDatabaseInstance", Err: err}
43-
}
44-
return nil
41+
return err
4542
}
4643

4744
func (d *ResourceDatabaseInstance) WaitAfterCreate(ctx context.Context) error {
4845
if d.waiter == nil {
4946
return nil
5047
}
5148
_, err := d.waiter.Get()
52-
if err != nil {
53-
return SDKError{Method: "WaitGetDatabaseInstanceDatabaseAvailable.Get", Err: err}
54-
}
55-
return nil
49+
return err
5650
}
5751

5852
func (d ResourceDatabaseInstance) WaitAfterUpdate(ctx context.Context) error {
@@ -68,14 +62,10 @@ func NewResourceDatabaseInstance(client *databricks.WorkspaceClient, resource *r
6862
}
6963

7064
func DeleteDatabaseInstance(ctx context.Context, client *databricks.WorkspaceClient, name string) error {
71-
err := client.Database.DeleteDatabaseInstance(ctx, database.DeleteDatabaseInstanceRequest{
65+
return client.Database.DeleteDatabaseInstance(ctx, database.DeleteDatabaseInstanceRequest{
7266
Name: name,
7367
Purge: true,
7468
Force: false,
7569
ForceSendFields: nil,
7670
})
77-
if err != nil {
78-
return SDKError{Method: "Database.DeleteDatabaseInstanceByName", Err: err}
79-
}
80-
return nil
8171
}

bundle/terranova/tnresources/job.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (r *ResourceJob) DoCreate(ctx context.Context) (string, error) {
3333
}
3434
response, err := r.client.Jobs.Create(ctx, request)
3535
if err != nil {
36-
return "", SDKError{Method: "Jobs.Create", Err: err}
36+
return "", err
3737
}
3838
return strconv.FormatInt(response.JobId, 10), nil
3939
}
@@ -43,23 +43,15 @@ func (r *ResourceJob) DoUpdate(ctx context.Context, id string) error {
4343
if err != nil {
4444
return err
4545
}
46-
err = r.client.Jobs.Reset(ctx, request)
47-
if err != nil {
48-
return SDKError{Method: "Jobs.Reset", Err: err}
49-
}
50-
return nil
46+
return r.client.Jobs.Reset(ctx, request)
5147
}
5248

5349
func DeleteJob(ctx context.Context, client *databricks.WorkspaceClient, id string) error {
5450
idInt, err := strconv.ParseInt(id, 10, 64)
5551
if err != nil {
5652
return err
5753
}
58-
err = client.Jobs.DeleteByJobId(ctx, idInt)
59-
if err != nil {
60-
return SDKError{Method: "Jobs.DeleteByJobId", Err: err}
61-
}
62-
return nil
54+
return client.Jobs.DeleteByJobId(ctx, idInt)
6355
}
6456

6557
func (r *ResourceJob) WaitAfterCreate(ctx context.Context) error {

bundle/terranova/tnresources/pipeline.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func (r *ResourcePipeline) Config() any {
2727
func (r *ResourcePipeline) DoCreate(ctx context.Context) (string, error) {
2828
response, err := r.client.Pipelines.Create(ctx, r.config)
2929
if err != nil {
30-
return "", SDKError{Method: "Pipelines.Create", Err: err}
30+
return "", err
3131
}
3232
return response.PipelineId, nil
3333
}
@@ -68,19 +68,11 @@ func (r *ResourcePipeline) DoUpdate(ctx context.Context, id string) error {
6868
ForceSendFields: filterFields[pipelines.EditPipeline](r.config.ForceSendFields),
6969
}
7070

71-
err := r.client.Pipelines.Update(ctx, request)
72-
if err != nil {
73-
return SDKError{Method: "Pipelines.Update", Err: err}
74-
}
75-
return nil
71+
return r.client.Pipelines.Update(ctx, request)
7672
}
7773

7874
func DeletePipeline(ctx context.Context, client *databricks.WorkspaceClient, id string) error {
79-
err := client.Pipelines.DeleteByPipelineId(ctx, id)
80-
if err != nil {
81-
return SDKError{Method: "Pipelines.DeleteByPipelineId", Err: err}
82-
}
83-
return nil
75+
return client.Pipelines.DeleteByPipelineId(ctx, id)
8476
}
8577

8678
func (r *ResourcePipeline) WaitAfterCreate(ctx context.Context) error {

bundle/terranova/tnresources/schema.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (r *ResourceSchema) Config() any {
2828
func (r *ResourceSchema) DoCreate(ctx context.Context) (string, error) {
2929
response, err := r.client.Schemas.Create(ctx, r.config)
3030
if err != nil {
31-
return "", SDKError{Method: "Schemas.Create", Err: err}
31+
return "", err
3232
}
3333
return response.FullName, nil
3434
}
@@ -46,7 +46,7 @@ func (r *ResourceSchema) DoUpdate(ctx context.Context, id string) error {
4646

4747
response, err := r.client.Schemas.Update(ctx, updateRequest)
4848
if err != nil {
49-
return SDKError{Method: "Schemas.Update", Err: err}
49+
return err
5050
}
5151

5252
if response.FullName != id {
@@ -57,15 +57,11 @@ func (r *ResourceSchema) DoUpdate(ctx context.Context, id string) error {
5757
}
5858

5959
func DeleteSchema(ctx context.Context, client *databricks.WorkspaceClient, id string) error {
60-
err := client.Schemas.Delete(ctx, catalog.DeleteSchemaRequest{
60+
return client.Schemas.Delete(ctx, catalog.DeleteSchemaRequest{
6161
FullName: id,
6262
Force: true,
6363
ForceSendFields: nil,
6464
})
65-
if err != nil {
66-
return SDKError{Method: "Schemas.Delete", Err: err}
67-
}
68-
return nil
6965
}
7066

7167
func (r *ResourceSchema) WaitAfterCreate(ctx context.Context) error {

bundle/terranova/tnresources/sdk_error.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

bundle/terranova/tnresources/sql_warehouse.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (r *ResourceSqlWarehouse) Config() any {
2828
func (r *ResourceSqlWarehouse) DoCreate(ctx context.Context) (string, error) {
2929
waiter, err := r.client.Warehouses.Create(ctx, r.config)
3030
if err != nil {
31-
return "", SDKError{Method: "Warehouses.Create", Err: err}
31+
return "", err
3232
}
3333

3434
return waiter.Id, nil
@@ -55,7 +55,7 @@ func (r *ResourceSqlWarehouse) DoUpdate(ctx context.Context, id string) error {
5555

5656
waiter, err := r.client.Warehouses.Edit(ctx, request)
5757
if err != nil {
58-
return SDKError{Method: "Warehouses.Edit", Err: err}
58+
return err
5959
}
6060

6161
if waiter.Id != id {
@@ -76,9 +76,5 @@ func (r *ResourceSqlWarehouse) WaitAfterUpdate(ctx context.Context) error {
7676
}
7777

7878
func DeleteSqlWarehouse(ctx context.Context, client *databricks.WorkspaceClient, oldID string) error {
79-
err := client.Warehouses.DeleteById(ctx, oldID)
80-
if err != nil {
81-
return SDKError{Method: "Warehouses.DeleteById", Err: err}
82-
}
83-
return nil
79+
return client.Warehouses.DeleteById(ctx, oldID)
8480
}

bundle/terranova/tnresources/volume.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (r *ResourceVolume) Config() any {
3232
func (r *ResourceVolume) DoCreate(ctx context.Context) (string, error) {
3333
response, err := r.client.Volumes.Create(ctx, r.config)
3434
if err != nil {
35-
return "", SDKError{Method: "Volumes.Create", Err: err}
35+
return "", err
3636
}
3737
return response.FullName, nil
3838
}
@@ -58,7 +58,7 @@ func (r *ResourceVolume) DoUpdate(ctx context.Context, id string) error {
5858

5959
response, err := r.client.Volumes.Update(ctx, updateRequest)
6060
if err != nil {
61-
return SDKError{Method: "Volumes.Update", Err: err}
61+
return err
6262
}
6363

6464
if id != response.FullName {
@@ -91,7 +91,7 @@ func (r *ResourceVolume) DoUpdateWithID(ctx context.Context, id string) (string,
9191

9292
response, err := r.client.Volumes.Update(ctx, updateRequest)
9393
if err != nil {
94-
return "", SDKError{Method: "Volumes.Update", Err: err}
94+
return "", err
9595
}
9696

9797
return response.FullName, nil
@@ -100,7 +100,7 @@ func (r *ResourceVolume) DoUpdateWithID(ctx context.Context, id string) (string,
100100
func DeleteVolume(ctx context.Context, client *databricks.WorkspaceClient, id string) error {
101101
err := client.Volumes.DeleteByName(ctx, id)
102102
if err != nil {
103-
return SDKError{Method: "Volumes.Delete", Err: err}
103+
return err
104104
}
105105
return nil
106106
}

0 commit comments

Comments
 (0)