Skip to content

Commit 7470a1b

Browse files
committed
feat: UpdateControl and ErrorStatusUpdateControl refinement
1 parent 3b0d909 commit 7470a1b

File tree

3 files changed

+58
-33
lines changed

3 files changed

+58
-33
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,20 @@ public class UpdateControl<P extends HasMetadata> extends BaseControl<UpdateCont
88
private final P resource;
99
private final boolean updateStatus;
1010
private final boolean updateResource;
11-
private final boolean patch;
11+
private final boolean patchStatus;
12+
private final boolean patchResource;
1213

1314
private UpdateControl(
14-
P resource, boolean updateStatus, boolean updateResource, boolean patch) {
15+
P resource, boolean updateStatus, boolean updateResource, boolean patchStatus,
16+
boolean patchResource) {
1517
if ((updateResource || updateStatus) && resource == null) {
1618
throw new IllegalArgumentException("CustomResource cannot be null in case of update");
1719
}
1820
this.resource = resource;
1921
this.updateStatus = updateStatus;
2022
this.updateResource = updateResource;
21-
this.patch = patch;
23+
this.patchStatus = patchStatus;
24+
this.patchResource = patchResource;
2225
}
2326

2427
/**
@@ -31,7 +34,7 @@ private UpdateControl(
3134
* @return initialized update control
3235
*/
3336
public static <T extends HasMetadata> UpdateControl<T> updateResource(T customResource) {
34-
return new UpdateControl<>(customResource, false, true, false);
37+
return new UpdateControl<>(customResource, false, true, false, false);
3538
}
3639

3740
/**
@@ -50,7 +53,7 @@ public static <T extends HasMetadata> UpdateControl<T> updateResource(T customRe
5053
* @return UpdateControl instance
5154
*/
5255
public static <T extends HasMetadata> UpdateControl<T> patchStatus(T customResource) {
53-
return new UpdateControl<>(customResource, true, false, true);
56+
return new UpdateControl<>(customResource, true, false, true, false);
5457
}
5558

5659
/**
@@ -66,7 +69,7 @@ public static <T extends HasMetadata> UpdateControl<T> patchStatus(T customResou
6669
* @return UpdateControl instance
6770
*/
6871
public static <T extends HasMetadata> UpdateControl<T> updateStatus(T customResource) {
69-
return new UpdateControl<>(customResource, true, false, false);
72+
return new UpdateControl<>(customResource, true, false, false, false);
7073
}
7174

7275
/**
@@ -79,17 +82,22 @@ public static <T extends HasMetadata> UpdateControl<T> updateStatus(T customReso
7982
*/
8083
public static <T extends HasMetadata> UpdateControl<T> updateResourceAndStatus(
8184
T customResource) {
82-
return new UpdateControl<>(customResource, true, true, false);
85+
return new UpdateControl<>(customResource, true, true, false, false);
86+
}
87+
88+
public static <T extends HasMetadata> UpdateControl<T> updateResourceAndPatchStatus(
89+
T customResource) {
90+
return new UpdateControl<>(customResource, true, true, true, false);
8391
}
8492

8593
public static <T extends HasMetadata> UpdateControl<T> patchResourceAndStatus(
8694
T customResource) {
87-
return new UpdateControl<>(customResource, true, true, true);
95+
return new UpdateControl<>(customResource, true, true, true, false);
8896
}
8997

9098

9199
public static <T extends HasMetadata> UpdateControl<T> noUpdate() {
92-
return new UpdateControl<>(null, false, false, false);
100+
return new UpdateControl<>(null, false, false, false, false);
93101
}
94102

95103
public P getResource() {
@@ -104,8 +112,12 @@ public boolean isUpdateResource() {
104112
return updateResource;
105113
}
106114

107-
public boolean isPatch() {
108-
return patch;
115+
public boolean isPatchStatus() {
116+
return patchStatus;
117+
}
118+
119+
public boolean isPatchResource() {
120+
return patchResource;
109121
}
110122

111123
public boolean isNoUpdate() {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/PostExecutionControl.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,47 +9,49 @@ final class PostExecutionControl<R extends HasMetadata> {
99
private final boolean finalizerRemoved;
1010
private final R updatedCustomResource;
1111
private final boolean updateIsStatusPatch;
12+
private final boolean updateIsResourcePatch;
1213
private final Exception runtimeException;
1314

1415
private Long reScheduleDelay = null;
1516

1617
private PostExecutionControl(
1718
boolean finalizerRemoved,
1819
R updatedCustomResource,
19-
boolean updateIsStatusPatch, Exception runtimeException) {
20+
boolean updateIsStatusPatch, boolean updateIsResourcePatch, Exception runtimeException) {
2021
this.finalizerRemoved = finalizerRemoved;
2122
this.updatedCustomResource = updatedCustomResource;
2223
this.updateIsStatusPatch = updateIsStatusPatch;
24+
this.updateIsResourcePatch = updateIsResourcePatch;
2325
this.runtimeException = runtimeException;
2426
}
2527

2628
public static <R extends HasMetadata> PostExecutionControl<R> onlyFinalizerAdded(
2729
R updatedCustomResource) {
28-
return new PostExecutionControl<>(false, updatedCustomResource, false, null);
30+
return new PostExecutionControl<>(false, updatedCustomResource, false, false, null);
2931
}
3032

3133
public static <R extends HasMetadata> PostExecutionControl<R> defaultDispatch() {
32-
return new PostExecutionControl<>(false, null, false, null);
34+
return new PostExecutionControl<>(false, null, false, false, null);
3335
}
3436

3537
public static <R extends HasMetadata> PostExecutionControl<R> customResourceStatusPatched(
3638
R updatedCustomResource) {
37-
return new PostExecutionControl<>(false, updatedCustomResource, true, null);
39+
return new PostExecutionControl<>(false, updatedCustomResource, true, false, null);
3840
}
3941

4042
public static <R extends HasMetadata> PostExecutionControl<R> customResourceUpdated(
41-
R updatedCustomResource) {
42-
return new PostExecutionControl<>(false, updatedCustomResource, false, null);
43+
R updatedCustomResource, boolean patched) {
44+
return new PostExecutionControl<>(false, updatedCustomResource, false, patched, null);
4345
}
4446

4547
public static <R extends HasMetadata> PostExecutionControl<R> customResourceFinalizerRemoved(
4648
R updatedCustomResource) {
47-
return new PostExecutionControl<>(true, updatedCustomResource, false, null);
49+
return new PostExecutionControl<>(true, updatedCustomResource, false, false, null);
4850
}
4951

5052
public static <R extends HasMetadata> PostExecutionControl<R> exceptionDuringExecution(
5153
Exception exception) {
52-
return new PostExecutionControl<>(false, null, false, exception);
54+
return new PostExecutionControl<>(false, null, false, false, exception);
5355
}
5456

5557
public Optional<R> getUpdatedCustomResource() {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ private PostExecutionControl<P> handleDispatch(ExecutionScope<P> executionScope)
8484
Context<P> context =
8585
new DefaultContext<>(executionScope.getRetryInfo(), controller, originalResource);
8686
if (markedForDeletion) {
87-
return handleCleanup(originalResource, resourceForExecution, context);
87+
return handleCleanup(resourceForExecution, context);
8888
} else {
8989
return handleReconcile(executionScope, resourceForExecution, originalResource, context);
9090
}
@@ -140,30 +140,31 @@ private PostExecutionControl<P> reconcileExecution(ExecutionScope<P> executionSc
140140
P updatedCustomResource = null;
141141
if (updateControl.isUpdateResourceAndStatus()) {
142142
updatedCustomResource =
143-
updateCustomResource(updateControl.getResource());
143+
updateCustomResource(updateControl.getResource(), updateControl.isPatchResource());
144144
updateControl
145145
.getResource()
146146
.getMetadata()
147147
.setResourceVersion(updatedCustomResource.getMetadata().getResourceVersion());
148148
updatedCustomResource =
149149
updateStatusGenerationAware(updateControl.getResource(), originalResource,
150-
updateControl.isPatch());
150+
updateControl.isPatchStatus());
151151
} else if (updateControl.isUpdateStatus()) {
152152
updatedCustomResource =
153153
updateStatusGenerationAware(updateControl.getResource(), originalResource,
154-
updateControl.isPatch());
154+
updateControl.isPatchStatus());
155155
} else if (updateControl.isUpdateResource()) {
156156
updatedCustomResource =
157-
updateCustomResource(updateControl.getResource());
157+
updateCustomResource(updateControl.getResource(), updateControl.isPatchResource());
158158
if (shouldUpdateObservedGenerationAutomatically(updatedCustomResource)) {
159159
updatedCustomResource =
160160
updateStatusGenerationAware(updateControl.getResource(), originalResource,
161-
updateControl.isPatch());
161+
updateControl.isPatchStatus());
162162
}
163163
} else if (updateControl.isNoUpdate()
164164
&& shouldUpdateObservedGenerationAutomatically(resourceForExecution)) {
165165
updatedCustomResource =
166-
updateStatusGenerationAware(originalResource, originalResource, updateControl.isPatch());
166+
updateStatusGenerationAware(originalResource, originalResource,
167+
updateControl.isPatchStatus());
167168
}
168169
return createPostExecutionControl(updatedCustomResource, updateControl);
169170
}
@@ -202,7 +203,8 @@ public boolean isLastAttempt() {
202203
if (updatedResource != null) {
203204
return errorStatusUpdateControl.isPatch()
204205
? PostExecutionControl.customResourceStatusPatched(updatedResource)
205-
: PostExecutionControl.customResourceUpdated(updatedResource);
206+
// todo review if this is ok
207+
: PostExecutionControl.customResourceUpdated(updatedResource, false);
206208
} else {
207209
return PostExecutionControl.defaultDispatch();
208210
}
@@ -259,11 +261,12 @@ private PostExecutionControl<P> createPostExecutionControl(P updatedCustomResour
259261
UpdateControl<P> updateControl) {
260262
PostExecutionControl<P> postExecutionControl;
261263
if (updatedCustomResource != null) {
262-
if (updateControl.isUpdateStatus() && updateControl.isPatch()) {
264+
if (updateControl.isUpdateStatus() && updateControl.isPatchStatus()) {
263265
postExecutionControl =
264266
PostExecutionControl.customResourceStatusPatched(updatedCustomResource);
265267
} else {
266-
postExecutionControl = PostExecutionControl.customResourceUpdated(updatedCustomResource);
268+
postExecutionControl = PostExecutionControl.customResourceUpdated(updatedCustomResource,
269+
updateControl.isPatchResource());
267270
}
268271
} else {
269272
postExecutionControl = PostExecutionControl.defaultDispatch();
@@ -279,7 +282,7 @@ private void updatePostExecutionControlWithReschedule(
279282
}
280283

281284

282-
private PostExecutionControl<P> handleCleanup(P originalResource, P resource,
285+
private PostExecutionControl<P> handleCleanup(P resource,
283286
Context<P> context) {
284287
log.debug(
285288
"Executing delete for resource: {} with version: {}",
@@ -316,10 +319,13 @@ private P updateCustomResourceWithFinalizer(P resourceForExecution, P originalRe
316319
r -> r.addFinalizer(configuration().getFinalizerName()));
317320
}
318321

319-
private P updateCustomResource(P resource) {
320-
log.debug("Updating resource: {} with version: {}", getUID(resource), getVersion(resource));
322+
private P updateCustomResource(P resource, boolean isPatch) {
323+
log.debug("Updating resource: {} with version: {} patch: {}", getUID(resource),
324+
getVersion(resource), isPatch);
321325
log.trace("Resource before update: {}", resource);
322-
return customResourceFacade.updateResource(resource);
326+
327+
return isPatch ? customResourceFacade.patchResource(resource)
328+
: customResourceFacade.updateResource(resource);
323329
}
324330

325331
ControllerConfiguration<P> configuration() {
@@ -375,6 +381,11 @@ public R getResource(String namespace, String name) {
375381
}
376382
}
377383

384+
public R patchResource(R resource) {
385+
// todo
386+
return null;
387+
}
388+
378389
public R updateResource(R resource) {
379390
log.debug(
380391
"Trying to replace resource {}, version: {}",

0 commit comments

Comments
 (0)