Skip to content

Commit d36c058

Browse files
committed
improve: owner reference mappers checks only group not apiVersion
In case of a resource is has a new version, but owner reference still points to the old version we should still propapage the event. Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 21fd3b8 commit d36c058

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ReconcilerUtilsInternal.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,4 +361,16 @@ private static int validateResourceVersion(String v1) {
361361
}
362362
return v1Length;
363363
}
364+
365+
public static String getGroup(String apiVersion) {
366+
if (apiVersion.startsWith("/")) {
367+
apiVersion = apiVersion.substring(1);
368+
}
369+
var index = apiVersion.indexOf("/");
370+
if (index < 0) {
371+
return "";
372+
} else {
373+
return apiVersion.substring(0, index);
374+
}
375+
}
364376
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2525
import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
2626

27+
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.getGroup;
28+
2729
public class Mappers {
2830

2931
public static final String DEFAULT_ANNOTATION_FOR_NAME = "io.javaoperatorsdk/primary-name";
@@ -98,10 +100,12 @@ public static <T extends HasMetadata> SecondaryToPrimaryMapper<T> fromOwnerRefer
98100

99101
public static <T extends HasMetadata> SecondaryToPrimaryMapper<T> fromOwnerReferences(
100102
String apiVersion, String kind, boolean clusterScope) {
101-
String correctApiVersion = apiVersion.startsWith("/") ? apiVersion.substring(1) : apiVersion;
102103
return resource ->
103104
resource.getMetadata().getOwnerReferences().stream()
104-
.filter(r -> r.getKind().equals(kind) && r.getApiVersion().equals(correctApiVersion))
105+
.filter(
106+
r ->
107+
r.getKind().equals(kind)
108+
&& getGroup(r.getApiVersion()).equals(getGroup(apiVersion)))
105109
.map(or -> ResourceID.fromOwnerReference(resource, or, clusterScope))
106110
.collect(Collectors.toSet());
107111
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ReconcilerUtilsInternalTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.getDefaultFinalizerName;
4040
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.getDefaultNameFor;
4141
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.getDefaultReconcilerName;
42+
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.getGroup;
4243
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.handleKubernetesClientException;
4344
import static io.javaoperatorsdk.operator.ReconcilerUtilsInternal.isFinalizerValid;
4445
import static org.assertj.core.api.Assertions.assertThat;
@@ -308,6 +309,14 @@ void compareResourceVersionsWithHasMetadata() {
308309
assertThat(ReconcilerUtilsInternal.compareResourceVersions(resource2, resource1)).isPositive();
309310
}
310311

312+
@Test
313+
void extractsGroupFromApiVersion() {
314+
assertThat(getGroup("v1")).isEqualTo("");
315+
assertThat(getGroup("/v1")).isEqualTo("");
316+
assertThat(getGroup("apps/v1")).isEqualTo("apps");
317+
assertThat(getGroup("/apps/v1")).isEqualTo("apps");
318+
}
319+
311320
private HasMetadata createResourceWithVersion(String resourceVersion) {
312321
return new PodBuilder()
313322
.withMetadata(

0 commit comments

Comments
 (0)