8000 feat: isolate use of cache in DefaultEventHandler · jeesmon/java-operator-sdk@39e0c51 · GitHub
[go: up one dir, main page]

Skip to content

Commit 39e0c51

Browse files
committed
feat: isolate use of cache in DefaultEventHandler
1 parent f5d7120 commit 39e0c51

File tree

5 files changed

+26
-14
lines changed

5 files changed

+26
-14
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.javaoperatorsdk.operator.processing.event.DefaultEventSourceManager;
1313
import io.javaoperatorsdk.operator.processing.event.Event;
1414
import io.javaoperatorsdk.operator.processing.event.EventHandler;
15+
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEvent;
1516
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
1617
import io.javaoperatorsdk.operator.processing.retry.Retry;
1718
import io.javaoperatorsdk.operator.processing.retry.RetryExecution;
@@ -76,6 +77,12 @@ public void setEventSourceManager(DefaultEventSourceManager eventSourceManager)
7677

7778
@Override
7879
public void handleEvent(Event event) {
80+
// cache the latest version of the CR
81+
if (event instanceof CustomResourceEvent) {
82+
CustomResourceEvent crEvent = (CustomResourceEvent) event;
83+
customResourceCache.cacheResource(crEvent.getCustomResource());
84+
}
85+
7986
try {
8087
lock.lock();
8188
log.debug("Received event: {}", event);

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.slf4j.Logger;
1919
import org.slf4j.LoggerFactory;
2020

21-
public class DefaultEventSourceManager implements EventSourceManager {
21+
public class DefaultEventSourceManager implements EventSourceManager, EventHandler {
2222

2323
public static final String RETRY_TIMER_EVENT_SOURCE_NAME = "retry-timer-event-source";
2424
private static final Logger log = LoggerFactory.getLogger(DefaultEventSourceManager.class);
@@ -58,7 +58,6 @@ public <R extends CustomResource> DefaultEventSourceManager(
5858
}
5959
registerCustomResourceEventSource(
6060
new CustomResourceEventSource(
61-
customResourceCache,
6261
client,
6362
targetNamespaces,
6463
configuration.isGenerationAware(),
@@ -124,4 +123,7 @@ public void cleanup(String customResourceUid) {
124123
.forEach(k -> deRegisterCustomResourceFromEventSource(k, customResourceUid));
125124
eventSources.remove(customResourceUid);
126125
}
126+
127+
@Override
128+
public void handleEvent(Event event) {}
127129
}

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.fabric8.kubernetes.client.dsl.MixedOperation;
1010
import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationsImpl;
1111
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
12-
import io.javaoperatorsdk.operator.processing.CustomResourceCache;
1312
import io.javaoperatorsdk.operator.processing.KubernetesResourceUtils;
1413
import io.javaoperatorsdk.operator.processing.event.AbstractEventSource;
1514
import java.util.Map;
@@ -24,20 +23,17 @@ public class CustomResourceEventSource extends AbstractEventSource
2423

2524
private static final Logger log = LoggerFactory.getLogger(CustomResourceEventSource.class);
2625

27-
private final CustomResourceCache resourceCache;
2826
private MixedOperation client;
2927
private final String[] targetNamespaces;
3028
private final boolean generationAware;
3129
private final String resourceFinalizer;
3230
private final Map<String, Long> lastGenerationProcessedSuccessfully = new ConcurrentHashMap<>();
3331

3432
public CustomResourceEventSource(
35-
CustomResourceCache customResourceCache,
3633
MixedOperation client,
3734
String[] targetNamespaces,
3835
boolean generationAware,
3936
String resourceFinalizer) {
40-
this.resourceCache = customResourceCache;
4137
this.client = client;
4238
this.targetNamespaces = targetNamespaces;
4339
this.generationAware = generationAware;
@@ -73,8 +69,6 @@ public void eventReceived(Watcher.Action action, CustomResource customResource)
7369
action.name(),
7470
customResource.getMetadata().getName());
7571

76-
resourceCache.cacheResource(
77-
customResource); // always store the latest event. Outside the sync block is intentional.
7872
if (action == Action.ERROR) {
7973
log.debug(
8074
"Skipping {} event for custom resource uid: {}, version: {}",

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/DefaultEventHandlerTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.fabric8.kubernetes.client.Watcher;
1515
import io.javaoperatorsdk.operator.processing.event.DefaultEventSourceManager;
1616
import io.javaoperatorsdk.operator.processing.event.Event;
17+
import io.javaoperatorsdk.operator.processing.event.EventSource;
1718
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEvent;
1819
import io.javaoperatorsdk.operator.processing.event.internal.TimerEvent;
1920
import io.javaoperatorsdk.operator.processing.event.internal.TimerEventSource;
@@ -68,8 +69,18 @@ public void dispatchesEventsIfNoExecutionInProgress() {
6869

6970
@Test
7071
public void skipProcessingIfLatestCustomResourceNotInCache() {
71-
Event event = prepareCREvent();
72-
customResourceCache.cleanup(event.getRelatedCustomResourceUid());
72+
Event event =
73+
new Event() {
74+
@Override
75+
public String getRelatedCustomResourceUid() {
76+
return UUID.randomUUID().toString();
77+
}
78+
79+
@Override
80+
public EventSource getEventSource() {
81+
return null;
82+
}
83+
};
7384

7485
defaultEventHandler.handleEvent(event);
7586

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSourceTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.fabric8.kubernetes.client.Watcher;
99 D8A9
import io.fabric8.kubernetes.client.dsl.MixedOperation;
1010
import io.javaoperatorsdk.operator.TestUtils;
11-
import io.javaoperatorsdk.operator.processing.CustomResourceCache;
1211
import io.javaoperatorsdk.operator.processing.event.EventHandler;
1312
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
1413
import java.time.LocalDateTime;
@@ -19,12 +18,11 @@
1918
class CustomResourceEventSourceTest {
2019

2120
public static final String FINALIZER = "finalizer";
22-
CustomResourceCache customResourceCache = new CustomResourceCache();
2321
MixedOperation mixedOperation = mock(MixedOperation.class);
2422
EventHandler eventHandler = mock(EventHandler.class);
2523

2624
private CustomResourceEventSource customResourceEventSource =
27-
new CustomResourceEventSource(customResourceCache, mixedOperation, null, true, FINALIZER);
25+
new CustomResourceEventSource(mixedOperation, null, true, FINALIZER);
2826

2927
@BeforeEach
3028
public void setup() {
@@ -71,7 +69,7 @@ public void normalExecutionIfGenerationChanges() {
7169
@Test
7270
public void handlesAllEventIfNotGenerationAware() {
7371
customResourceEventSource =
74-
new CustomResourceEventSource(customResourceCache, mixedOperation, null, false, FINALIZER);
72+
new CustomResourceEventSource(mixedOperation, null, false, FINALIZER);
7573
setup();
7674

7775
TestCustomResource customResource1 = TestUtils.testCustomResource();

0 commit comments

Comments
 (0)
0