@@ -206,7 +206,16 @@ export class BackendAPI7 implements ADCSDK.Backend {
206
206
this . getAPI7VersionTask ( ) ,
207
207
this . getResourceDefaultValueTask ( ) ,
208
208
this . getGatewayGroupIdTask ( this . gatewayGroup ) ,
209
- ...fetcher . allTask ( ) ,
209
+ ...( ADCSDK . utils . featureGateEnabled (
210
+ ADCSDK . utils . featureGate . PARALLEL_BACKEND_REQUEST ,
211
+ )
212
+ ? [
213
+ {
214
+ task : ( _ , task ) =>
215
+ task . newListr ( fetcher . allTask ( ) , { concurrent : true } ) ,
216
+ } ,
217
+ ]
218
+ : fetcher . allTask ( ) ) ,
210
219
] ,
211
220
{
212
221
//@ts -expect-error reorg renderer
@@ -222,16 +231,20 @@ export class BackendAPI7 implements ADCSDK.Backend {
222
231
this . getAPI7VersionTask ( ) ,
223
232
this . getGatewayGroupIdTask ( this . gatewayGroup ) ,
224
233
this . syncPreprocessEventsTask ( ) ,
225
- {
226
- task : ( ctx , task ) =>
227
- task . newListr (
228
- ctx . diff . map ( ( event ) =>
229
- event . type === ADCSDK . EventType . DELETE
230
- ? operator . deleteResource ( event )
231
- : operator . updateResource ( event ) ,
232
- ) ,
233
- ) ,
234
- } ,
234
+ ADCSDK . utils . featureGateEnabled (
235
+ ADCSDK . utils . featureGate . PARALLEL_BACKEND_REQUEST ,
236
+ )
237
+ ? this . groupSyncTasks ( operator )
238
+ : {
239
+ task : ( ctx , task ) =>
240
+ task . newListr (
241
+ ctx . diff . map ( ( event ) =>
242
+ event . type === ADCSDK . EventType . DELETE
243
+ ? operator . deleteResource ( event )
244
+ : operator . updateResource ( event ) ,
245
+ ) ,
246
+ ) ,
247
+ } ,
235
248
operator . publishService ( ) ,
236
249
] ,
237
250
{
@@ -316,4 +329,35 @@ export class BackendAPI7 implements ADCSDK.Backend {
316
329
} ,
317
330
} ;
318
331
}
332
+
333
+ // Groups tasks so that they are grouped in parallel in order of same
334
+ // resource type and same operation type.
335
+ private groupSyncTasks ( operator : Operator ) : ListrTask < OperateContext > {
336
+ return {
337
+ task : ( ctx , task ) => {
338
+ const groupedEvents = Object . values < Array < ADCSDK . Event > > (
339
+ ctx . diff . reduce ( ( groups , event ) => {
340
+ const key = `${ event . resourceType } .${ event . type } ` ;
341
+ ( groups [ key ] = groups [ key ] || [ ] ) . push ( event ) ;
342
+ return groups ;
343
+ } , { } ) ,
344
+ ) ;
345
+
346
+ return task . newListr (
347
+ groupedEvents . map ( ( events ) => ( {
348
+ task : ( _ , task ) => {
349
+ return task . newListr (
350
+ events . map ( ( event ) =>
351
+ event . type === ADCSDK . EventType . DELETE
352
+ ? operator . deleteResource ( event )
353
+ : operator . updateResource ( event ) ,
354
+ ) ,
355
+ { concurrent : true } ,
356
+ ) ;
357
+ } ,
358
+ } ) ) ,
359
+ ) ;
360
+ } ,
361
+ } ;
362
+ }
319
363
}
0 commit comments