From b0132595eab64479def953fa4f80c4c358cebf3c Mon Sep 17 00:00:00 2001 From: csviri Date: Thu, 26 May 2022 14:03:04 +0200 Subject: [PATCH 1/2] fix: concurrent modification exception --- .../event/source/informer/PrimaryToSecondaryIndex.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java index d83b60827b..bee1eb5891 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java @@ -41,7 +41,8 @@ public synchronized Set getSecondaryResources(ResourceID primary) { if (resourceIDs == null) { return Collections.emptySet(); } else { - return Collections.unmodifiableSet(resourceIDs); + // see https://github.com/java-operator-sdk/java-operator-sdk/issues/1242 + return Set.copyOf(resourceIDs); } } } From e5a671997432f80622bae54c59c432bda14884cf Mon Sep 17 00:00:00 2001 From: csviri Date: Thu, 26 May 2022 14:25:36 +0200 Subject: [PATCH 2/2] fix: using thredsafe set instead of copy --- .../event/source/informer/PrimaryToSecondaryIndex.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java index bee1eb5891..8918895aa1 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndex.java @@ -1,6 +1,7 @@ package io.javaoperatorsdk.operator.processing.event.source.informer; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.processing.event.ResourceID; @@ -19,7 +20,8 @@ public synchronized void onAddOrUpdate(R resource) { Set primaryResources = secondaryToPrimaryMapper.toPrimaryResourceIDs(resource); primaryResources.forEach( primaryResource -> { - var resourceSet = index.computeIfAbsent(primaryResource, pr -> new HashSet<>()); + var resourceSet = + index.computeIfAbsent(primaryResource, pr -> ConcurrentHashMap.newKeySet()); resourceSet.add(ResourceID.fromResource(resource)); }); } @@ -41,8 +43,7 @@ public synchronized Set getSecondaryResources(ResourceID primary) { if (resourceIDs == null) { return Collections.emptySet(); } else { - // see https://github.com/java-operator-sdk/java-operator-sdk/issues/1242 - return Set.copyOf(resourceIDs); + return Collections.unmodifiableSet(resourceIDs); } } }