From 2fd77e02cdeb8ab6e573943d97f45bfe3590bd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Fri, 8 Sep 2023 13:46:38 +0200 Subject: [PATCH 1/2] fix: processor issue with cleanup resources MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit if leader election not running delete event was not cleaning up state Signed-off-by: Attila Mészáros --- .../operator/processing/event/EventProcessor.java | 6 +++++- .../processing/event/EventProcessorTest.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java index 833e10816d..843979e3eb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java @@ -97,6 +97,9 @@ public synchronized void handleEvent(Event event) { metrics.receivedEvent(event, metricsMetadata); handleEventMarking(event, state); if (!this.running) { + if (state.deleteEventPresent()) { + cleanupForDeletedEvent(state.getId()); + } // events are received and marked, but will be processed when started, see start() method. log.debug("Skipping event: {} because the event processor is not started", event); return; @@ -110,7 +113,8 @@ public synchronized void handleEvent(Event event) { private void handleMarkedEventForResource(ResourceState state) { if (state.deleteEventPresent()) { cleanupForDeletedEvent(state.getId()); - } else if (!state.processedMarkForDeletionPresent()) { + } + if (!state.processedMarkForDeletionPresent()) { submitReconciliationExecution(state); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java index 880b4a8e14..9d538713c1 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java @@ -452,6 +452,21 @@ void executionOfReconciliationShouldNotStartIfProcessorStopped() throws Interrup .handleExecution(any()); } + @Test + void cleansUpForDeleteEventEvenIfProcessorNotStarted() { + ResourceID resourceID = new ResourceID("test1", "default"); + + eventProcessor = + spy(new EventProcessor(controllerConfiguration(null, rateLimiterMock), + reconciliationDispatcherMock, + eventSourceManagerMock, null)); + + eventProcessor.handleEvent(prepareCREvent(resourceID)); + eventProcessor.handleEvent(new ResourceEvent(ResourceAction.DELETED, resourceID, null)); + eventProcessor.handleEvent(prepareCREvent(resourceID)); + // no exception thrown + } + private ResourceID eventAlreadyUnderProcessing() { when(reconciliationDispatcherMock.handleExecution(any())) .then( From 870a6f9cc2b5c288fab569b28f2d50aaf7e1c6d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Fri, 8 Sep 2023 13:49:15 +0200 Subject: [PATCH 2/2] revert small change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../operator/processing/event/EventProcessor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java index 843979e3eb..14c7cf6d1e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java @@ -113,8 +113,7 @@ public synchronized void handleEvent(Event event) { private void handleMarkedEventForResource(ResourceState state) { if (state.deleteEventPresent()) { cleanupForDeletedEvent(state.getId()); - } - if (!state.processedMarkForDeletionPresent()) { + } else if (!state.processedMarkForDeletionPresent()) { submitReconciliationExecution(state); } }