diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java index 6180656e55..6dbf5b7fb4 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java @@ -238,7 +238,7 @@ public synchronized void handleRecentResourceUpdate( if (actualValues != null) { var resourceId = resourceIDMapper.idFor(resource); R actualResource = actualValues.get(resourceId); - if (actualResource.equals(previousVersionOfResource)) { + if (actualResource != null && actualResource.equals(previousVersionOfResource)) { actualValues.put(resourceId, resource); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java index 6fe97b2fdd..024bd95dfc 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java @@ -212,6 +212,16 @@ void genericFilteringEvents() { } @Test + void recentResourceUpdateIsIgnoredForUnknownSecondaryResource() { + source.handleResources(primaryID1(), Set.of(testResource1())); + + // testResource2 has a different id, so it is not present in the cache for primaryID1 + var unknown = testResource2(); + source.handleRecentResourceUpdate(primaryID1(), unknown, unknown); + + assertThat(source.getSecondaryResources(primaryID1())).containsExactly(testResource1()); + } + void onlyGenericFilterSetDoesNotFailOnAdd() { var eventSource = new TestExternalCachingEventSource(); eventSource.setGenericFilter(res -> true);