11
11
import java .util .Objects ;
12
12
import java .util .Optional ;
13
13
import java .util .Set ;
14
+ import java .util .function .Consumer ;
14
15
import java .util .function .Function ;
15
16
import java .util .stream .Collectors ;
16
17
import java .util .stream .Stream ;
@@ -221,33 +222,42 @@ static class StatusUpdateStep extends Step {
221
222
public NextAction apply (Packet packet ) {
222
223
LOGGER .entering ();
223
224
224
- StatusUpdateContext context = new StatusUpdateContext (packet );
225
- DomainStatus status = context .getStatus ().clearModified ();
226
-
227
- if (context .getDomain () != null ) {
228
- status .setServers (new ArrayList <>(context .getServerStatuses ().values ()));
229
- status .setReplicas (context .getReplicaSetting ());
230
-
231
- if (context .isHasFailedPod ()) {
232
- status .removeConditionIf (c -> c .getType () == Available );
233
- status .removeConditionIf (c -> c .getType () == Progressing );
234
- status .addCondition (new DomainCondition (Failed ).withStatus (TRUE ).withReason ("PodFailed" ));
235
- } else {
236
- status .removeConditionIf (c -> c .getType () == Failed );
237
- if (context .allIntendedServersRunning ()) {
238
- status .removeConditionIf (c -> c .getType () == Progressing );
239
- status .addCondition (
240
- new DomainCondition (Available ).withStatus (TRUE ).withReason (SERVERS_READY_REASON ));
241
- }
242
- }
243
- }
225
+ final StatusUpdateContext context = new StatusUpdateContext (packet );
226
+
227
+ DomainStatus status = context .getStatus ();
228
+
229
+ boolean isStatusModified =
230
+ modifyDomainStatus (
231
+ status ,
232
+ s -> {
233
+ if (context .getDomain () != null ) {
234
+ s .setServers (new ArrayList <>(context .getServerStatuses ().values ()));
235
+ s .setReplicas (context .getReplicaSetting ());
236
+
237
+ if (context .isHasFailedPod ()) {
238
+ s .removeConditionIf (c -> c .getType () == Available );
239
+ s .removeConditionIf (c -> c .getType () == Progressing );
240
+ s .addCondition (
241
+ new DomainCondition (Failed ).withStatus (TRUE ).withReason ("PodFailed" ));
242
+ } else {
243
+ s .removeConditionIf (c -> c .getType () == Failed );
244
+ if (context .allIntendedServersRunning ()) {
245
+ s .removeConditionIf (c -> c .getType () == Progressing );
246
+ s .addCondition (
247
+ new DomainCondition (Available )
248
+ .withStatus (TRUE )
249
+ .withReason (SERVERS_READY_REASON ));
250
+ }
251
+ }
252
+ }
253
+ });
244
254
245
- if (status . isModified () ) {
255
+ if (isStatusModified ) {
246
256
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getInfo ().getDomainUid (), status );
247
257
}
248
258
LOGGER .exiting ();
249
259
250
- return status . isModified ()
260
+ return isStatusModified
251
261
? doDomainUpdate (
252
262
context .getDomain (), context .getInfo (), packet , StatusUpdateStep .this , getNext ())
253
263
: doNext (packet );
@@ -367,18 +377,24 @@ public NextAction apply(Packet packet) {
367
377
LOGGER .entering ();
368
378
369
379
DomainConditionStepContext context = new DomainConditionStepContext (packet );
370
- DomainStatus status = context .getStatus ().clearModified ();
371
-
372
- status .addCondition (new DomainCondition (Progressing ).withStatus (TRUE ).withReason (reason ));
373
- status .removeConditionIf (c -> c .getType () == Failed );
374
- if (!isPreserveAvailable ) {
375
- status .removeConditionIf (c -> c .getType () == Available );
376
- }
380
+ DomainStatus status = context .getStatus ();
381
+
382
+ boolean isStatusModified =
383
+ modifyDomainStatus (
384
+ status ,
385
+ s -> {
386
+ s .addCondition (
387
+ new DomainCondition (Progressing ).withStatus (TRUE ).withReason (reason ));
388
+ s .removeConditionIf (c -> c .getType () == Failed );
389
+ if (!isPreserveAvailable ) {
390
+ s .removeConditionIf (c -> c .getType () == Available );
391
+ }
392
+ });
377
393
378
394
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
379
395
LOGGER .exiting ();
380
396
381
- return status . isModified ()
397
+ return isStatusModified
382
398
? doDomainUpdate (
383
399
context .getDomain (), context .getInfo (), packet , ProgressingStep .this , getNext ())
384
400
: doNext (packet );
@@ -396,14 +412,19 @@ public NextAction apply(Packet packet) {
396
412
LOGGER .entering ();
397
413
398
414
DomainConditionStepContext context = new DomainConditionStepContext (packet );
399
- DomainStatus status = context .getStatus (). clearModified () ;
415
+ DomainStatus status = context .getStatus ();
400
416
401
- status .removeConditionIf (c -> c .getType () == Progressing && TRUE .equals (c .getStatus ()));
417
+ boolean isStatusModified =
418
+ modifyDomainStatus (
419
+ status ,
420
+ s ->
421
+ s .removeConditionIf (
422
+ c -> c .getType () == Progressing && TRUE .equals (c .getStatus ())));
402
423
403
424
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
404
425
LOGGER .exiting ();
405
426
406
- return status . isModified ()
427
+ return isStatusModified
407
428
? doDomainUpdate (
408
429
context .getDomain (), context .getInfo (), packet , EndProgressingStep .this , getNext ())
409
430
: doNext (packet );
@@ -423,20 +444,33 @@ public NextAction apply(Packet packet) {
423
444
LOGGER .entering ();
424
445
425
446
DomainConditionStepContext context = new DomainConditionStepContext (packet );
426
- DomainStatus status = context .getStatus (). clearModified () ;
447
+ DomainStatus status = context .getStatus ();
427
448
428
- status .addCondition (new DomainCondition (Available ).withStatus (TRUE ).withReason (reason ));
429
- status .removeConditionIf (c -> c .getType () == Failed );
449
+ boolean isStatusModified =
450
+ modifyDomainStatus (
451
+ status ,
452
+ s -> {
453
+ s .addCondition (new DomainCondition (Available ).withStatus (TRUE ).withReason (reason ));
454
+ s .removeConditionIf (c -> c .getType () == Failed );
455
+ });
430
456
431
457
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
432
458
LOGGER .exiting ();
433
- return status . isModified ()
459
+ return isStatusModified
434
460
? doDomainUpdate (
435
461
context .getDomain (), context .getInfo (), packet , AvailableStep .this , getNext ())
436
462
: doNext (packet );
437
463
}
438
464
}
439
465
466
+ private static boolean modifyDomainStatus (DomainStatus domainStatus , Consumer <DomainStatus > statusUpdateConsumer ) {
467
+ synchronized (domainStatus ) {
468
+ domainStatus .clearModified ();
469
+ statusUpdateConsumer .accept (domainStatus );
470
+ return domainStatus .isModified ();
471
+ }
472
+ }
473
+
440
474
private static class FailedStep extends Step {
441
475
private final Throwable throwable ;
442
476
@@ -450,21 +484,26 @@ public NextAction apply(Packet packet) {
450
484
LOGGER .entering ();
451
485
452
486
DomainConditionStepContext context = new DomainConditionStepContext (packet );
453
- final DomainStatus status = context .getStatus ().clearModified ();
454
-
455
- status .addCondition (
456
- new DomainCondition (Failed )
457
- .withStatus (TRUE )
458
- .withReason ("Exception" )
459
- .withMessage (throwable .getMessage ()));
460
- if (status .hasConditionWith (c -> c .hasType (Progressing ))) {
461
- status .addCondition (new DomainCondition (Progressing ).withStatus (FALSE ));
462
- }
487
+ final DomainStatus status = context .getStatus ();
488
+
489
+ boolean isStatusModified =
490
+ modifyDomainStatus (
491
+ status ,
492
+ s -> {
493
+ s .addCondition (
494
+ new DomainCondition (Failed )
495
+ .withStatus (TRUE )
496
+ .withReason ("Exception" )
497
+ .withMessage (throwable .getMessage ()));
498
+ if (s .hasConditionWith (c -> c .hasType (Progressing ))) {
499
+ s .addCondition (new DomainCondition (Progressing ).withStatus (FALSE ));
500
+ }
501
+ });
463
502
464
503
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
465
504
LOGGER .exiting ();
466
505
467
- return status . isModified ()
506
+ return isStatusModified
468
507
? doDomainUpdate (
469
508
context .getDomain (), context .getInfo (), packet , FailedStep .this , getNext ())
470
509
: doNext (packet );
0 commit comments