Skip to content

Commit 66ef34c

Browse files
committed
sync domain status updates
1 parent 1b4e345 commit 66ef34c

File tree

1 file changed

+87
-48
lines changed

1 file changed

+87
-48
lines changed

operator/src/main/java/oracle/kubernetes/operator/DomainStatusUpdater.java

Lines changed: 87 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.Objects;
1212
import java.util.Optional;
1313
import java.util.Set;
14+
import java.util.function.Consumer;
1415
import java.util.function.Function;
1516
import java.util.stream.Collectors;
1617
import java.util.stream.Stream;
@@ -221,33 +222,42 @@ static class StatusUpdateStep extends Step {
221222
public NextAction apply(Packet packet) {
222223
LOGGER.entering();
223224

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+
});
244254

245-
if (status.isModified()) {
255+
if (isStatusModified) {
246256
LOGGER.info(MessageKeys.DOMAIN_STATUS, context.getInfo().getDomainUid(), status);
247257
}
248258
LOGGER.exiting();
249259

250-
return status.isModified()
260+
return isStatusModified
251261
? doDomainUpdate(
252262
context.getDomain(), context.getInfo(), packet, StatusUpdateStep.this, getNext())
253263
: doNext(packet);
@@ -367,18 +377,24 @@ public NextAction apply(Packet packet) {
367377
LOGGER.entering();
368378

369379
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+
});
377393

378394
LOGGER.info(MessageKeys.DOMAIN_STATUS, context.getDomain().getDomainUid(), status);
379395
LOGGER.exiting();
380396

381-
return status.isModified()
397+
return isStatusModified
382398
? doDomainUpdate(
383399
context.getDomain(), context.getInfo(), packet, ProgressingStep.this, getNext())
384400
: doNext(packet);
@@ -396,14 +412,19 @@ public NextAction apply(Packet packet) {
396412
LOGGER.entering();
397413

398414
DomainConditionStepContext context = new DomainConditionStepContext(packet);
399-
DomainStatus status = context.getStatus().clearModified();
415+
DomainStatus status = context.getStatus();
400416

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())));
402423

403424
LOGGER.info(MessageKeys.DOMAIN_STATUS, context.getDomain().getDomainUid(), status);
404425
LOGGER.exiting();
405426

406-
return status.isModified()
427+
return isStatusModified
407428
? doDomainUpdate(
408429
context.getDomain(), context.getInfo(), packet, EndProgressingStep.this, getNext())
409430
: doNext(packet);
@@ -423,20 +444,33 @@ public NextAction apply(Packet packet) {
423444
LOGGER.entering();
424445

425446
DomainConditionStepContext context = new DomainConditionStepContext(packet);
426-
DomainStatus status = context.getStatus().clearModified();
447+
DomainStatus status = context.getStatus();
427448

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+
});
430456

431457
LOGGER.info(MessageKeys.DOMAIN_STATUS, context.getDomain().getDomainUid(), status);
432458
LOGGER.exiting();
433-
return status.isModified()
459+
return isStatusModified
434460
? doDomainUpdate(
435461
context.getDomain(), context.getInfo(), packet, AvailableStep.this, getNext())
436462
: doNext(packet);
437463
}
438464
}
439465

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+
440474
private static class FailedStep extends Step {
441475
private final Throwable throwable;
442476

@@ -450,21 +484,26 @@ public NextAction apply(Packet packet) {
450484
LOGGER.entering();
451485

452486
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+
});
463502

464503
LOGGER.info(MessageKeys.DOMAIN_STATUS, context.getDomain().getDomainUid(), status);
465504
LOGGER.exiting();
466505

467-
return status.isModified()
506+
return isStatusModified
468507
? doDomainUpdate(
469508
context.getDomain(), context.getInfo(), packet, FailedStep.this, getNext())
470509
: doNext(packet);

0 commit comments

Comments
 (0)