Skip to content

Commit d469b27

Browse files
committed
Instant reschedule after finalizer added
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 87cd5d8 commit d469b27

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ private PostExecutionControl<P> handleReconcile(
141141
} else {
142142
updatedResource = ReconcileUtils.addFinalizer(context);
143143
}
144-
return PostExecutionControl.onlyFinalizerAdded(updatedResource);
144+
return PostExecutionControl.onlyFinalizerAdded(updatedResource)
145+
.withReSchedule(BaseControl.INSTANT_RESCHEDULE);
145146
} else {
146147
try {
147148
return reconcileExecution(executionScope, resourceForExecution, originalResource, context);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.slf4j.LoggerFactory;
2626

2727
import io.fabric8.kubernetes.api.model.HasMetadata;
28+
import io.javaoperatorsdk.operator.api.reconciler.BaseControl;
2829
import io.javaoperatorsdk.operator.health.Status;
2930
import io.javaoperatorsdk.operator.processing.event.Event;
3031
import io.javaoperatorsdk.operator.processing.event.ResourceID;
@@ -62,8 +63,12 @@ public void scheduleOnce(ResourceID resourceID, long delay) {
6263
cancelOnceSchedule(resourceID);
6364
}
6465
EventProducerTimeTask task = new EventProducerTimeTask(resourceID);
65-
onceTasks.put(resourceID, task);
66-
timer.schedule(task, delay);
66+
if (delay == BaseControl.INSTANT_RESCHEDULE) {
67+
task.run();
68+
} else {
69+
onceTasks.put(resourceID, task);
70+
timer.schedule(task, delay);
71+
}
6772
}
6873

6974
@Override

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSourceTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.junit.jupiter.api.Test;
2727

2828
import io.javaoperatorsdk.operator.TestUtils;
29+
import io.javaoperatorsdk.operator.api.reconciler.BaseControl;
2930
import io.javaoperatorsdk.operator.health.Status;
3031
import io.javaoperatorsdk.operator.processing.event.Event;
3132
import io.javaoperatorsdk.operator.processing.event.EventHandler;
@@ -115,6 +116,15 @@ public void eventNotFiredIfStopped() {
115116
assertThat(source.getStatus()).isEqualTo(Status.UNHEALTHY);
116117
}
117118

119+
@Test
120+
public void handlesInstanceReschedule() {
121+
var resourceID = ResourceID.fromResource(TestUtils.testCustomResource());
122+
123+
source.scheduleOnce(resourceID, BaseControl.INSTANT_RESCHEDULE);
124+
125+
assertThat(eventHandler.events).hasSize(1);
126+
}
127+
118128
private void untilAsserted(ThrowingRunnable assertion) {
119129
untilAsserted(INITIAL_DELAY, PERIOD, assertion);
120130
}

0 commit comments

Comments
 (0)