@@ -81,6 +81,7 @@ func ensureWork(
81
81
}
82
82
}
83
83
84
+ var createOrUpdateWorkArgs []* CreateOrUpdateWorkArg
84
85
for i := range targetClusters {
85
86
targetCluster := targetClusters [i ]
86
87
clonedWorkload := workload .DeepCopy ()
@@ -135,16 +136,24 @@ func ensureWork(
135
136
Labels : workLabel ,
136
137
Annotations : annotations ,
137
138
}
138
-
139
- if err = helper .CreateOrUpdateWork (
140
- ctx ,
141
- c ,
142
- workMeta ,
143
- clonedWorkload ,
144
- helper .WithSuspendDispatching (shouldSuspendDispatching (suspension , targetCluster )),
145
- helper .WithPreserveResourcesOnDeletion (ptr .Deref (preserveResourcesOnDeletion , false )),
146
- ); err != nil {
147
- return err
139
+ createOrUpdateWorkArgs = append (createOrUpdateWorkArgs , & CreateOrUpdateWorkArg {
140
+ WorkMeta : workMeta ,
141
+ ClonedWorkload : clonedWorkload ,
142
+ Options : []helper.WorkOption {helper .WithSuspendDispatching (shouldSuspendDispatching (suspension , targetCluster )), helper .WithPreserveResourcesOnDeletion (ptr .Deref (preserveResourcesOnDeletion , false ))},
143
+ })
144
+ }
145
+ resChan := make (chan error )
146
+ for _ , item := range createOrUpdateWorkArgs {
147
+ go CreateOrUpdateWorkParallel (ctx , resChan , c , item )
148
+ }
149
+ for i := 0 ; i < len (targetClusters ); i ++ {
150
+ select {
151
+ case res := <- resChan :
152
+ if res != nil {
153
+ return err
154
+ }
155
+ case <- ctx .Done ():
156
+ return nil
148
157
}
149
158
}
150
159
return nil
@@ -293,3 +302,22 @@ func shouldSuspendDispatching(suspension *policyv1alpha1.Suspension, targetClust
293
302
}
294
303
return suspendDispatching
295
304
}
305
+
306
+ // CreateOrUpdateWorkArg create or update work args struct.
307
+ type CreateOrUpdateWorkArg struct {
308
+ WorkMeta metav1.ObjectMeta
309
+ ClonedWorkload * unstructured.Unstructured
310
+ Options []helper.WorkOption
311
+ }
312
+
313
+ // CreateOrUpdateWorkParallel creates or update work object parallel.
314
+ func CreateOrUpdateWorkParallel (ctx context.Context , resChan chan error , c client.Client , createOrUpdateWorkArg * CreateOrUpdateWorkArg ) {
315
+ err := helper .CreateOrUpdateWork (
316
+ ctx ,
317
+ c ,
318
+ createOrUpdateWorkArg .WorkMeta ,
319
+ createOrUpdateWorkArg .ClonedWorkload ,
320
+ createOrUpdateWorkArg .Options ... ,
321
+ )
322
+ resChan <- err
323
+ }
0 commit comments