Skip to content

Commit 1d55455

Browse files
Fix bug with job create zero values (#3642)
* update * update * update * update * update * update
1 parent 2eb7b9d commit 1d55455

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

clusters/resource_cluster.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,23 @@ func FixInstancePoolChangeIfAny(d *schema.ResourceData, cluster any) error {
264264
}
265265
}
266266

267+
func SetForceSendFieldsForCluster(cluster any, d *schema.ResourceData) error {
268+
switch c := cluster.(type) {
269+
case *compute.ClusterSpec:
270+
if c.Autoscale == nil {
271+
c.ForceSendFields = append(c.ForceSendFields, "NumWorkers")
272+
}
273+
return nil
274+
case *compute.CreateCluster:
275+
if c.Autoscale == nil {
276+
c.ForceSendFields = append(c.ForceSendFields, "NumWorkers")
277+
}
278+
return nil
279+
default:
280+
return fmt.Errorf(unsupportedExceptCreateEditClusterSpecErr, cluster, "*", "*", "*")
281+
}
282+
}
283+
267284
type ClusterSpec struct {
268285
compute.ClusterSpec
269286
Libraries []compute.Library `json:"libraries,omitempty" tf:"slice_set,alias:library"`
@@ -380,9 +397,7 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, c *commo
380397
if err = ModifyRequestOnInstancePool(&createClusterRequest); err != nil {
381398
return err
382399
}
383-
if createClusterRequest.Autoscale == nil {
384-
createClusterRequest.ForceSendFields = []string{"NumWorkers"}
385-
}
400+
SetForceSendFieldsForCluster(&createClusterRequest, d)
386401
if createClusterRequest.GcpAttributes != nil {
387402
if _, ok := d.GetOkExists("gcp_attributes.0.local_ssd_count"); ok {
388403
createClusterRequest.GcpAttributes.ForceSendFields = []string{"LocalSsdCount"}

internal/acceptance/job_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestAccJobTasks(t *testing.T) {
4040
job_cluster {
4141
job_cluster_key = "j"
4242
new_cluster {
43-
num_workers = 20
43+
num_workers = 0 // Setting it to zero intentionally to cover edge case.
4444
spark_version = data.databricks_spark_version.latest.id
4545
node_type_id = data.databricks_node_type.smallest.id
4646
}

jobs/jobs_api_go_sdk.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ func updateJobClusterSpec(clusterSpec *compute.ClusterSpec, d *schema.ResourceDa
165165
if err != nil {
166166
return err
167167
}
168+
err = clusters.SetForceSendFieldsForCluster(clusterSpec, d)
169+
if err != nil {
170+
return err
171+
}
168172
return nil
169173
}
170174

@@ -192,6 +196,26 @@ func prepareJobSettingsForUpdateGoSdk(d *schema.ResourceData, js *JobSettingsRes
192196
return nil
193197
}
194198

199+
func prepareJobSettingsForCreateGoSdk(d *schema.ResourceData, jc *JobCreateStruct) error {
200+
// We always need to add NumWorkers into ForceSendField for the go-sdk client.
201+
// Before the go-sdk migration, the field `num_workers` was required, so we always sent it.
202+
for _, task := range jc.Tasks {
203+
if task.NewCluster != nil {
204+
err := clusters.SetForceSendFieldsForCluster(task.NewCluster, d)
205+
if err != nil {
206+
return err
207+
}
208+
}
209+
}
210+
for i := range jc.JobClusters {
211+
err := clusters.SetForceSendFieldsForCluster(&jc.JobClusters[i].NewCluster, d)
212+
if err != nil {
213+
return err
214+
}
215+
}
216+
return nil
217+
}
218+
195219
func Create(createJob jobs.CreateJob, w *databricks.WorkspaceClient, ctx context.Context) (int64, error) {
196220
adjustTasks(&createJob)
197221
sortWebhooksByID(&createJob)

jobs/resource_job.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,10 @@ func ResourceJob() common.Resource {
10941094
}
10951095
var cj JobCreateStruct
10961096
common.DataToStructPointer(d, jobsGoSdkSchema, &cj)
1097+
err = prepareJobSettingsForCreateGoSdk(d, &cj)
1098+
if err != nil {
1099+
return err
1100+
}
10971101
jobId, err := Create(cj.CreateJob, w, ctx)
10981102
if err != nil {
10991103
return err

0 commit comments

Comments
 (0)