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 ;
@@ -226,37 +227,45 @@ static class StatusUpdateStep extends Step {
226
227
public NextAction apply (Packet packet ) {
227
228
LOGGER .entering ();
228
229
229
- StatusUpdateContext context = new StatusUpdateContext (packet );
230
+ final StatusUpdateContext context = new StatusUpdateContext (packet );
231
+
230
232
DomainStatus status = context .getStatus ();
231
- DomainStatus currentStatus = new DomainStatus (status );
232
233
233
- if (context .getDomain () != null ) {
234
- if (context .getDomainConfig ().isPresent ()) {
235
- status .setServers (new ArrayList <>(context .getServerStatuses ().values ()));
236
- status .setClusters (new ArrayList <>(context .getClusterStatuses ().values ()));
237
- status .setReplicas (context .getReplicaSetting ());
238
- }
234
+ boolean isStatusModified =
235
+ modifyDomainStatus (
236
+ status ,
237
+ s -> {
238
+ if (context .getDomain () != null ) {
239
+ if (context .getDomainConfig ().isPresent ()) {
240
+ s .setServers (new ArrayList <>(context .getServerStatuses ().values ()));
241
+ s .setClusters (new ArrayList <>(context .getClusterStatuses ().values ()));
242
+ s .setReplicas (context .getReplicaSetting ());
243
+ }
239
244
240
- if (context .isHasFailedPod ()) {
241
- status .removeConditionIf (c -> c .getType () == Available );
242
- status .removeConditionIf (c -> c .getType () == Progressing );
243
- status .addCondition (new DomainCondition (Failed ).withStatus (TRUE ).withReason ("PodFailed" ));
244
- } else {
245
- status .removeConditionIf (c -> c .getType () == Failed );
246
- if (context .allIntendedServersRunning ()) {
247
- status .removeConditionIf (c -> c .getType () == Progressing );
248
- status .addCondition (
249
- new DomainCondition (Available ).withStatus (TRUE ).withReason (SERVERS_READY_REASON ));
250
- }
251
- }
252
- }
245
+ if (context .isHasFailedPod ()) {
246
+ s .removeConditionIf (c -> c .getType () == Available );
247
+ s .removeConditionIf (c -> c .getType () == Progressing );
248
+ s .addCondition (
249
+ new DomainCondition (Failed ).withStatus (TRUE ).withReason ("PodFailed" ));
250
+ } else {
251
+ s .removeConditionIf (c -> c .getType () == Failed );
252
+ if (context .allIntendedServersRunning ()) {
253
+ s .removeConditionIf (c -> c .getType () == Progressing );
254
+ s .addCondition (
255
+ new DomainCondition (Available )
256
+ .withStatus (TRUE )
257
+ .withReason (SERVERS_READY_REASON ));
258
+ }
259
+ }
260
+ }
261
+ });
253
262
254
- if (! status . equals ( currentStatus ) ) {
263
+ if (isStatusModified ) {
255
264
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getInfo ().getDomainUid (), status );
256
265
}
257
266
LOGGER .exiting ();
258
267
259
- return ! status . equals ( currentStatus )
268
+ return isStatusModified
260
269
? doDomainUpdate (
261
270
context .getDomain (), context .getInfo (), packet , StatusUpdateStep .this , getNext ())
262
271
: doNext (packet );
@@ -434,19 +443,24 @@ public NextAction apply(Packet packet) {
434
443
LOGGER .entering ();
435
444
436
445
DomainConditionStepContext context = new DomainConditionStepContext (packet );
437
- final DomainStatus status = context .getStatus ();
438
- final DomainStatus currentStatus = new DomainStatus (status );
446
+ DomainStatus status = context .getStatus ();
439
447
440
- status .addCondition (new DomainCondition (Progressing ).withStatus (TRUE ).withReason (reason ));
441
- status .removeConditionIf (c -> c .getType () == Failed );
442
- if (!isPreserveAvailable ) {
443
- status .removeConditionIf (c -> c .getType () == Available );
444
- }
448
+ boolean isStatusModified =
449
+ modifyDomainStatus (
450
+ status ,
451
+ s -> {
452
+ s .addCondition (
453
+ new DomainCondition (Progressing ).withStatus (TRUE ).withReason (reason ));
454
+ s .removeConditionIf (c -> c .getType () == Failed );
455
+ if (!isPreserveAvailable ) {
456
+ s .removeConditionIf (c -> c .getType () == Available );
457
+ }
458
+ });
445
459
446
460
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
447
461
LOGGER .exiting ();
448
462
449
- return ! status . equals ( currentStatus )
463
+ return isStatusModified
450
464
? doDomainUpdate (
451
465
context .getDomain (), context .getInfo (), packet , ProgressingStep .this , getNext ())
452
466
: doNext (packet );
@@ -464,15 +478,19 @@ public NextAction apply(Packet packet) {
464
478
LOGGER .entering ();
465
479
466
480
DomainConditionStepContext context = new DomainConditionStepContext (packet );
467
- final DomainStatus status = context .getStatus ();
468
- final DomainStatus currentStatus = new DomainStatus (status );
481
+ DomainStatus status = context .getStatus ();
469
482
470
- status .removeConditionIf (c -> c .getType () == Progressing && TRUE .equals (c .getStatus ()));
483
+ boolean isStatusModified =
484
+ modifyDomainStatus (
485
+ status ,
486
+ s ->
487
+ s .removeConditionIf (
488
+ c -> c .getType () == Progressing && TRUE .equals (c .getStatus ())));
471
489
472
490
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
473
491
LOGGER .exiting ();
474
492
475
- return ! status . equals ( currentStatus )
493
+ return isStatusModified
476
494
? doDomainUpdate (
477
495
context .getDomain (), context .getInfo (), packet , EndProgressingStep .this , getNext ())
478
496
: doNext (packet );
@@ -492,21 +510,34 @@ public NextAction apply(Packet packet) {
492
510
LOGGER .entering ();
493
511
494
512
DomainConditionStepContext context = new DomainConditionStepContext (packet );
495
- final DomainStatus status = context .getStatus ();
496
- final DomainStatus currentStatus = new DomainStatus (status );
513
+ DomainStatus status = context .getStatus ();
497
514
498
- status .addCondition (new DomainCondition (Available ).withStatus (TRUE ).withReason (reason ));
499
- status .removeConditionIf (c -> c .getType () == Failed );
515
+ boolean isStatusModified =
516
+ modifyDomainStatus (
517
+ status ,
518
+ s -> {
519
+ s .addCondition (new DomainCondition (Available ).withStatus (TRUE ).withReason (reason ));
520
+ s .removeConditionIf (c -> c .getType () == Failed );
521
+ });
500
522
501
523
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
502
524
LOGGER .exiting ();
503
- return !status .equals (currentStatus )
525
+
526
+ return isStatusModified
504
527
? doDomainUpdate (
505
528
context .getDomain (), context .getInfo (), packet , AvailableStep .this , getNext ())
506
529
: doNext (packet );
507
530
}
508
531
}
509
532
533
+ private static boolean modifyDomainStatus (DomainStatus domainStatus , Consumer <DomainStatus > statusUpdateConsumer ) {
534
+ final DomainStatus currentStatus = new DomainStatus (domainStatus );
535
+ synchronized (domainStatus ) {
536
+ statusUpdateConsumer .accept (domainStatus );
537
+ return !domainStatus .equals (currentStatus );
538
+ }
539
+ }
540
+
510
541
private static class FailedStep extends Step {
511
542
private final Throwable throwable ;
512
543
@@ -521,21 +552,26 @@ public NextAction apply(Packet packet) {
521
552
522
553
DomainConditionStepContext context = new DomainConditionStepContext (packet );
523
554
final DomainStatus status = context .getStatus ();
524
- final DomainStatus currentStatus = new DomainStatus (status );
525
-
526
- status .addCondition (
527
- new DomainCondition (Failed )
528
- .withStatus (TRUE )
529
- .withReason ("Exception" )
530
- .withMessage (throwable .getMessage ()));
531
- if (status .hasConditionWith (c -> c .hasType (Progressing ))) {
532
- status .addCondition (new DomainCondition (Progressing ).withStatus (FALSE ));
533
- }
555
+
556
+ boolean isStatusModified =
557
+ modifyDomainStatus (
558
+ status ,
559
+ s -> {
560
+ s .addCondition (
561
+ new DomainCondition (Failed )
562
+ .withStatus (TRUE )
563
+ .withReason ("Exception" )
564
+ .withMessage (throwable .getMessage ()));
565
+ if (s .hasConditionWith (c -> c .hasType (Progressing ))) {
566
+ s .addCondition (new DomainCondition (Progressing ).withStatus (FALSE ));
567
+ }
568
+ });
569
+
534
570
535
571
LOGGER .info (MessageKeys .DOMAIN_STATUS , context .getDomain ().getDomainUid (), status );
536
572
LOGGER .exiting ();
537
573
538
- return ! status . equals ( currentStatus )
574
+ return isStatusModified
539
575
? doDomainUpdate (
540
576
context .getDomain (), context .getInfo (), packet , FailedStep .this , getNext ())
541
577
: doNext (packet );
0 commit comments