Skip to content

Commit 458808f

Browse files
committed
Merge branch 'owls109199-avoid-repeated-processing' into 'main'
Owls109199 avoid accidental repeateded domain processing See merge request weblogic-cloud/weblogic-kubernetes-operator!4250
2 parents b4d9b4c + 0311edd commit 458808f

14 files changed

+186
-42
lines changed

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,12 @@ private boolean shouldContinue(MakeRightDomainOperation operation, DomainPresenc
385385
final DomainPresenceInfo cachedInfo = getExistingDomainPresenceInfo(liveInfo);
386386
if (isNewDomain(cachedInfo)) {
387387
return true;
388-
} else if (liveInfo.isFromOutOfDateEvent(operation, cachedInfo)
389-
|| liveInfo.isDomainProcessingHalted(cachedInfo)) {
388+
} else if (liveInfo.isFromOutOfDateEvent(operation, cachedInfo)) {
389+
return false;
390+
} else if (isDeleting(operation)) {
391+
return true;
392+
} else if (liveInfo.isDomainProcessingHalted(cachedInfo)
393+
|| hasRetriableFailureNonRetryingOperation(operation, liveInfo)) {
390394
return false;
391395
} else if (operation.isExplicitRecheck() || liveInfo.isDomainGenerationChanged(cachedInfo)) {
392396
return true;
@@ -398,7 +402,7 @@ private boolean shouldContinue(MakeRightDomainOperation operation, DomainPresenc
398402

399403
private boolean shouldContinue(MakeRightClusterOperation operation, ClusterPresenceInfo liveInfo) {
400404
final ClusterPresenceInfo cachedInfo = getExistingClusterPresenceInfo(liveInfo);
401-
if (hasDeletedClusterEventData(operation)) {
405+
if (isDeleting(operation)) {
402406
return findClusterPresenceInfo(liveInfo.getNamespace(), liveInfo.getResourceName());
403407
} else if (isNewCluster(cachedInfo)) {
404408
return true;
@@ -412,6 +416,10 @@ private boolean shouldContinue(MakeRightClusterOperation operation, ClusterPrese
412416
}
413417
}
414418

419+
private boolean hasRetriableFailureNonRetryingOperation(MakeRightDomainOperation operation, DomainPresenceInfo info) {
420+
return info.hasRetriableFailure() && !operation.isRetryOnFailure();
421+
}
422+
415423
private boolean isNewDomain(DomainPresenceInfo cachedInfo) {
416424
return Optional.ofNullable(cachedInfo).map(DomainPresenceInfo::getDomain).orElse(null) == null;
417425
}
@@ -424,11 +432,15 @@ private boolean findClusterPresenceInfo(String namespace, String clusterName) {
424432
return Optional.ofNullable(clusters.get(namespace)).orElse(Collections.emptyMap()).get(clusterName) != null;
425433
}
426434

427-
private boolean hasDeletedClusterEventData(MakeRightClusterOperation operation) {
435+
private boolean isDeleting(MakeRightClusterOperation operation) {
428436
return EventItem.CLUSTER_DELETED == getEventItem(operation);
429437
}
430438

431-
private EventItem getEventItem(MakeRightClusterOperation operation) {
439+
private boolean isDeleting(MakeRightDomainOperation operation) {
440+
return operation.isDeleting() || EventItem.DOMAIN_DELETED == getEventItem(operation);
441+
}
442+
443+
private EventItem getEventItem(MakeRightOperation operation) {
432444
return Optional.ofNullable(operation.getEventData()).map(EventData::getItem).orElse(null);
433445
}
434446

@@ -644,7 +656,7 @@ public void updateDomainStatus(@Nonnull V1PersistentVolumeClaim pvc, DomainPrese
644656
}
645657

646658
private String getPhase(@Nonnull V1PersistentVolumeClaim pvc) {
647-
return Optional.ofNullable(pvc).map(V1PersistentVolumeClaim::getStatus)
659+
return Optional.of(pvc).map(V1PersistentVolumeClaim::getStatus)
648660
.map(V1PersistentVolumeClaimStatus::getPhase).orElse(null);
649661
}
650662

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,7 @@ private boolean isStranded(DomainPresenceInfo dpi) {
272272
private static void removeStrandedDomainPresenceInfo(DomainProcessor dp, DomainPresenceInfo info) {
273273
info.setDeleting(true);
274274
info.setPopulated(true);
275-
dp.createMakeRightOperation(info).withExplicitRecheck().forDeletion().withEventData(new EventData(
276-
EventItem.DOMAIN_DELETED)).execute();
275+
dp.createMakeRightOperation(info).withExplicitRecheck().forDeletion().execute();
277276
}
278277

279278
private Stream<DomainPresenceInfo> getActiveDomainPresenceInfos() {
@@ -289,9 +288,10 @@ private void activateDomain(DomainProcessor dp, DomainPresenceInfo info) {
289288
EventItem eventItem = getEventItem(info);
290289
MakeRightDomainOperation makeRight = dp.createMakeRightOperation(info).withExplicitRecheck();
291290
if (eventItem != null) {
292-
makeRight.withEventData(new EventData(eventItem)).interrupt();
291+
makeRight.withEventData(new EventData(eventItem)).interrupt().execute();
292+
} else if (!info.hasRetriableFailure()) {
293+
makeRight.execute();
293294
}
294-
makeRight.execute();
295295
}
296296

297297
private EventItem getEventItem(DomainPresenceInfo info) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ private boolean wasNotRolling() {
201201
/**
202202
* Creates an asynchronous step to initialize the domain status, if needed, to indicate that the operator has
203203
* seen the domain and is now working on it.
204-
* @param hasEventData tue if the make right operation is associated with an event data
204+
* @param hasEventData true if the make right operation is associated with an event.
205205
*/
206206
public static Step createStatusInitializationStep(boolean hasEventData) {
207207
return new StatusInitializationStep(hasEventData);
@@ -603,7 +603,7 @@ void addDomainEvent(DomainCondition condition) {
603603
}
604604

605605
public static class StatusInitializationStep extends DomainStatusUpdaterStep {
606-
private boolean hasEventData;
606+
private final boolean hasEventData;
607607

608608
StatusInitializationStep(boolean hasEventData) {
609609
super();

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* Defines the operation to log a ClusterCreated/Changed/Deleted event.
1111
*/
1212
public interface MakeRightClusterOperation extends MakeRightOperation<ClusterPresenceInfo> {
13+
1314
/**
1415
* Set the event data that is associated with this operation.
1516
*
@@ -26,11 +27,4 @@ public interface MakeRightClusterOperation extends MakeRightOperation<ClusterPre
2627
MakeRightClusterOperation interrupt();
2728

2829
MakeRightClusterOperation withExplicitRecheck();
29-
30-
/**
31-
* Get the event data associated with this make-right operation.
32-
*
33-
* @return the event data.
34-
*/
35-
EventHelper.EventData getEventData();
3630
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,17 @@ public interface MakeRightDomainOperation extends MakeRightOperation<DomainPrese
4444
*/
4545
MakeRightDomainOperation interrupt();
4646

47+
/**
48+
* Modifies the factory to indicate that this is a retry operation on a retriable failure.
49+
+
50+
+ @return the updated factory
51+
*/
52+
MakeRightDomainOperation retryOnFailure();
53+
4754
boolean isDeleting();
4855

56+
boolean isRetryOnFailure();
57+
4958
void setInspectionRun();
5059

5160
void setLiveInfo(@Nonnull DomainPresenceInfo info);
@@ -99,5 +108,4 @@ static Step createStepsToRerunWithIntrospection(Packet packet) {
99108
static Optional<MakeRightDomainOperation> fromPacket(Packet packet) {
100109
return Optional.ofNullable(packet.getValue(MAKE_RIGHT_DOMAIN_OPERATION));
101110
}
102-
103111
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import javax.annotation.Nonnull;
77

8+
import oracle.kubernetes.operator.helpers.EventHelper;
89
import oracle.kubernetes.operator.helpers.ResourcePresenceInfo;
910
import oracle.kubernetes.operator.work.Packet;
1011
import oracle.kubernetes.operator.work.PacketComponent;
@@ -15,6 +16,7 @@
1516
* or to log a ClusterCreated/Changed/Deleted event.
1617
*/
1718
public interface MakeRightOperation<T extends ResourcePresenceInfo> extends PacketComponent {
19+
1820
void execute();
1921

2022
@Nonnull
@@ -28,5 +30,12 @@ public interface MakeRightOperation<T extends ResourcePresenceInfo> extends Pack
2830

2931
boolean hasEventData();
3032

33+
/**
34+
* Get the event data associated with this make-right operation.
35+
*
36+
* @return the event data.
37+
*/
38+
EventHelper.EventData getEventData();
39+
3140
boolean isExplicitRecheck();
3241
}

operator/src/main/java/oracle/kubernetes/operator/helpers/DomainPresenceInfo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,10 @@ public Collection<ClusterResource> getClusterResources() {
10491049
return clusters.values();
10501050
}
10511051

1052+
public boolean hasRetriableFailure() {
1053+
return Optional.ofNullable(getDomain()).map(DomainResource::hasRetriableFailure).orElse(false);
1054+
}
1055+
10521056
/** Details about a specific managed server. */
10531057
public static class ServerInfo {
10541058
public final WlsServerConfig serverConfig;

operator/src/main/java/oracle/kubernetes/operator/makeright/MakeRightClusterOperationImpl.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import oracle.kubernetes.operator.helpers.ClusterPresenceInfo;
1515
import oracle.kubernetes.operator.helpers.EventHelper;
1616
import oracle.kubernetes.operator.helpers.EventHelper.ClusterResourceEventData;
17+
import oracle.kubernetes.operator.helpers.EventHelper.EventData;
1718
import oracle.kubernetes.operator.work.NextAction;
1819
import oracle.kubernetes.operator.work.Packet;
1920
import oracle.kubernetes.operator.work.Step;
@@ -105,7 +106,7 @@ private boolean isDeleting() {
105106
}
106107

107108
private EventHelper.EventItem getEventItem() {
108-
return Optional.ofNullable(getEventData()).map(EventHelper.EventData::getItem).orElse(null);
109+
return Optional.ofNullable(getEventData()).map(EventData::getItem).orElse(null);
109110
}
110111

111112
@Override
@@ -123,11 +124,6 @@ public boolean isExplicitRecheck() {
123124
return explicitRecheck;
124125
}
125126

126-
@Override
127-
public EventHelper.EventData getEventData() {
128-
return eventData;
129-
}
130-
131127
class StartPlanStep extends Step {
132128

133129
private final ClusterPresenceInfo info;

operator/src/main/java/oracle/kubernetes/operator/makeright/MakeRightDomainOperationImpl.java

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import oracle.kubernetes.operator.helpers.PodHelper;
4444
import oracle.kubernetes.operator.helpers.ResponseStep;
4545
import oracle.kubernetes.operator.helpers.ServiceHelper;
46+
import oracle.kubernetes.operator.logging.LoggingFacade;
47+
import oracle.kubernetes.operator.logging.LoggingFactory;
4648
import oracle.kubernetes.operator.steps.DefaultResponseStep;
4749
import oracle.kubernetes.operator.steps.DeleteDomainStep;
4850
import oracle.kubernetes.operator.steps.ManagedServersUpStep;
@@ -61,15 +63,18 @@
6163
import static oracle.kubernetes.operator.LabelConstants.INTROSPECTION_STATE_LABEL;
6264
import static oracle.kubernetes.operator.ProcessingConstants.DOMAIN_INTROSPECT_REQUESTED;
6365
import static oracle.kubernetes.operator.helpers.EventHelper.EventItem.DOMAIN_DELETED;
66+
import static oracle.kubernetes.operator.helpers.EventHelper.createEventStep;
6467

6568
/**
6669
* A factory which creates and executes steps to align the cached domain status with the value read from Kubernetes.
6770
*/
6871
public class MakeRightDomainOperationImpl extends MakeRightOperationImpl<DomainPresenceInfo>
6972
implements MakeRightDomainOperation {
7073

71-
private boolean deleting;
74+
public static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
75+
7276
private boolean inspectionRun;
77+
private boolean retryOnFailure;
7378

7479
/**
7580
* Create the operation.
@@ -93,7 +98,7 @@ private MakeRightDomainOperation cloneWith(@Nonnull DomainPresenceInfo presenceI
9398
@Override
9499
public MakeRightDomainOperation createRetry(@Nonnull DomainPresenceInfo presenceInfo) {
95100
presenceInfo.setPopulated(false);
96-
return cloneWith(presenceInfo).withExplicitRecheck();
101+
return cloneWith(presenceInfo).withExplicitRecheck().retryOnFailure();
97102
}
98103

99104
/**
@@ -141,6 +146,12 @@ public MakeRightDomainOperation interrupt() {
141146
return this;
142147
}
143148

149+
@Override
150+
public MakeRightDomainOperation retryOnFailure() {
151+
this.retryOnFailure = true;
152+
return this;
153+
}
154+
144155
@Override
145156
public boolean isDeleting() {
146157
return deleting;
@@ -151,6 +162,11 @@ public boolean isExplicitRecheck() {
151162
return explicitRecheck;
152163
}
153164

165+
@Override
166+
public boolean isRetryOnFailure() {
167+
return retryOnFailure;
168+
}
169+
154170
@Override
155171
public void execute() {
156172
executor.runMakeRight(this);
@@ -213,12 +229,13 @@ private String getNamespace() {
213229
public Step createSteps() {
214230
final List<Step> result = new ArrayList<>();
215231

216-
result.add(Optional.ofNullable(eventData).map(EventHelper::createEventStep).orElse(null));
217-
result.add(new DomainProcessorImpl.PopulatePacketServerMapsStep());
218-
result.add(createStatusInitializationStep(hasEventData()));
232+
result.add(new UpdateDomainPresenceInfoStep(liveInfo));
219233
if (deleting || domainHasDeletionTimestamp()) {
220234
result.add(new StartPlanStep(liveInfo, createDomainDownPlan()));
221235
} else {
236+
result.add(getCreateEventStep());
237+
result.add(new DomainProcessorImpl.PopulatePacketServerMapsStep());
238+
result.add(createStatusInitializationStep(hasEventData()));
222239
result.add(createListClusterResourcesStep(getNamespace()));
223240
result.add(createDomainValidationStep(getDomain()));
224241
result.add(new StartPlanStep(liveInfo, createDomainUpPlan(liveInfo)));
@@ -258,12 +275,8 @@ private boolean isForDomain(ClusterResource clusterResource, DomainPresenceInfo
258275
}
259276

260277
private Step createDomainDownPlan() {
261-
Step eventStep = null;
262-
if (Optional.ofNullable(eventData).map(e -> e.getItem() != DOMAIN_DELETED).orElse(true)) {
263-
eventStep = EventHelper.createEventStep(new EventData(DOMAIN_DELETED));
264-
}
265278
return Step.chain(
266-
eventStep,
279+
createEventStep(new EventData(DOMAIN_DELETED)),
267280
new DeleteDomainStep(),
268281
new UnregisterStatusUpdaterStep(),
269282
new UnregisterEventK8SObjectsStep());
@@ -311,6 +324,10 @@ private Step createDomainUpPlan(DomainPresenceInfo info) {
311324
return new UpHeadStep(introspectionAndDomainPresenceSteps);
312325
}
313326

327+
private Step getCreateEventStep() {
328+
return Optional.ofNullable(eventData).map(EventHelper::createEventStep).orElse(null);
329+
}
330+
314331
static Step domainIntrospectionSteps() {
315332
return Step.chain(
316333
ConfigMapHelper.readIntrospectionVersionStep(),
@@ -408,12 +425,12 @@ public NextAction apply(Packet packet) {
408425
}
409426
}
410427

411-
class StartPlanStep extends Step {
428+
class UpdateDomainPresenceInfoStep extends Step {
412429

413430
private final DomainPresenceInfo info;
414431

415-
StartPlanStep(DomainPresenceInfo info, Step next) {
416-
super(next);
432+
UpdateDomainPresenceInfoStep(DomainPresenceInfo info) {
433+
super();
417434
this.info = info;
418435
}
419436

@@ -424,7 +441,22 @@ public NextAction apply(Packet packet) {
424441
} else {
425442
executor.registerDomainPresenceInfo(info);
426443
}
444+
return doNext(packet);
445+
}
446+
}
447+
448+
449+
class StartPlanStep extends Step {
450+
451+
private final DomainPresenceInfo info;
427452

453+
StartPlanStep(DomainPresenceInfo info, Step next) {
454+
super(next);
455+
this.info = info;
456+
}
457+
458+
@Override
459+
public NextAction apply(Packet packet) {
428460
return doNext(getNextSteps(), packet);
429461
}
430462

operator/src/main/java/oracle/kubernetes/operator/makeright/MakeRightOperationImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
public abstract class MakeRightOperationImpl<T extends ResourcePresenceInfo> implements MakeRightOperation<T> {
1717
protected T liveInfo;
1818
protected boolean willInterrupt;
19+
protected boolean deleting;
1920
protected EventData eventData;
2021

2122
protected final MakeRightExecutor executor;
@@ -41,4 +42,9 @@ public boolean isWillInterrupt() {
4142
public boolean hasEventData() {
4243
return eventData != null;
4344
}
45+
46+
public EventData getEventData() {
47+
return eventData;
48+
}
49+
4450
}

0 commit comments

Comments
 (0)