Skip to content

Commit 89cc67c

Browse files
committed
fix build
Signed-off-by: Attila Mészáros <[email protected]>
1 parent d952926 commit 89cc67c

15 files changed

+99
-107
lines changed

Diff for: pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
<sonar.organization>java-operator-sdk</sonar.organization>
1919
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
2020
<fabric8-client.version>7.1.0</fabric8-client.version>
21-
<quarkus.version>3.17.4</quarkus.version>
21+
<quarkus.version>3.19.0</quarkus.version>
2222
<graalvm.version>24.1.2</graalvm.version>
2323
<mokito.version>5.11.0</mokito.version>
24-
<qosdk.version>7.0.1</qosdk.version>
24+
<qosdk.version>7.1.0</qosdk.version>
2525
<assertj.version>3.27.3</assertj.version>
2626
<spotless.version>2.43.0</spotless.version>
2727
</properties>

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/Utils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static Map<String, GenericKubernetesResource> getRelatedResources(Glue gl
6666
var es =
6767
(InformerEventSource<GenericKubernetesResource, Glue>) context
6868
.eventSourceRetriever()
69-
.getResourceEventSourceFor(GenericKubernetesResource.class, gvk.toString());
69+
.getEventSourceFor(GenericKubernetesResource.class, gvk.toString());
7070

7171
var namespace = relatedResourceSpec.isClusterScoped() ? null
7272
: relatedResourceSpec.getNamespace() == null ? glue.getMetadata().getNamespace()

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/customresource/AbstractStatus.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.javaoperatorsdk.operator.glue.customresource;
22

3-
import io.javaoperatorsdk.operator.api.ObservedGenerationAwareStatus;
3+
public class AbstractStatus {
44

5-
public class AbstractStatus extends ObservedGenerationAwareStatus {
5+
private Long observedGeneration = null;
66

77
private String errorMessage;
88

@@ -14,4 +14,11 @@ public void setErrorMessage(String errorMessage) {
1414
this.errorMessage = errorMessage;
1515
}
1616

17+
public Long getObservedGeneration() {
18+
return observedGeneration;
19+
}
20+
21+
public void setObservedGeneration(Long observedGeneration) {
22+
this.observedGeneration = observedGeneration;
23+
}
1724
}

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/dependent/GCGenericDependentResource.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ public class GCGenericDependentResource extends GenericDependentResource
1010
implements GarbageCollected<Glue> {
1111

1212
public GCGenericDependentResource(GenericTemplateHandler genericTemplateHandler,
13-
GenericKubernetesResource desired, String name,
13+
GenericKubernetesResource desired, String name, String namespace,
1414
boolean clusterScoped, Matcher matcher) {
15-
super(genericTemplateHandler, desired, name, clusterScoped, matcher);
15+
super(genericTemplateHandler, desired, name, namespace, clusterScoped, matcher);
1616
}
1717

1818
public GCGenericDependentResource(GenericTemplateHandler genericTemplateHandler,
19-
String desiredTemplate, String name, boolean clusterScoped, Matcher matcher) {
20-
super(genericTemplateHandler, desiredTemplate, name, clusterScoped, matcher);
19+
String desiredTemplate, String name, String namespace, boolean clusterScoped,
20+
Matcher matcher) {
21+
super(genericTemplateHandler, desiredTemplate, name, namespace, clusterScoped, matcher);
2122
}
2223
}

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/dependent/GenericBulkDependentResource.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public GenericBulkDependentResource(GenericTemplateHandler genericTemplateHandle
2222
String desiredTemplate, String name,
2323
boolean clusterScoped,
2424
Matcher matcher) {
25-
super(genericTemplateHandler, desiredTemplate, name, clusterScoped, matcher);
25+
super(genericTemplateHandler, desiredTemplate, name, null, clusterScoped, matcher);
2626
}
2727

2828
@Override

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/dependent/GenericDependentResource.java

+35-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.javaoperatorsdk.operator.glue.dependent;
22

3+
import java.util.Objects;
4+
import java.util.Optional;
5+
import java.util.Set;
6+
37
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
48
import io.fabric8.kubernetes.client.utils.Serialization;
59
import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -23,16 +27,18 @@ public class GenericDependentResource
2327
protected final GenericKubernetesResource desired;
2428
protected final String desiredTemplate;
2529
protected final String name;
30+
protected final String namespace;
2631
protected final boolean clusterScoped;
2732
protected final Matcher matcher;
2833

2934
protected final GenericTemplateHandler genericTemplateHandler;
3035

3136
public GenericDependentResource(GenericTemplateHandler genericTemplateHandler,
32-
GenericKubernetesResource desired, String name,
37+
GenericKubernetesResource desired, String name, String namespace,
3338
boolean clusterScoped, Matcher matcher) {
3439
super(new GroupVersionKind(desired.getApiVersion(), desired.getKind()));
3540
this.desired = desired;
41+
this.namespace = namespace;
3642
this.matcher = matcher;
3743
this.desiredTemplate = null;
3844
this.name = name;
@@ -41,12 +47,14 @@ public GenericDependentResource(GenericTemplateHandler genericTemplateHandler,
4147
}
4248

4349
public GenericDependentResource(GenericTemplateHandler genericTemplateHandler,
44-
String desiredTemplate, String name, boolean clusterScoped, Matcher matcher) {
50+
String desiredTemplate, String name, String namespace, boolean clusterScoped,
51+
Matcher matcher) {
4552
super(new GroupVersionKind(Utils.getApiVersionFromTemplate(desiredTemplate),
4653
Utils.getKindFromTemplate(desiredTemplate)));
4754
this.genericTemplateHandler = genericTemplateHandler;
4855
this.name = name;
4956
this.desiredTemplate = desiredTemplate;
57+
this.namespace = namespace;
5058
this.matcher = matcher;
5159
this.desired = null;
5260
this.clusterScoped = clusterScoped;
@@ -84,4 +92,29 @@ public Result<GenericKubernetesResource> match(GenericKubernetesResource actualR
8492
return Result.nonComputed(false);
8593
}
8694
}
95+
96+
@Override
97+
protected Optional<GenericKubernetesResource> selectTargetSecondaryResource(
98+
Set<GenericKubernetesResource> secondaryResources,
99+
Glue primary,
100+
Context<Glue> context) {
101+
102+
var res = context.getSecondaryResources(GenericKubernetesResource.class)
103+
.stream()
104+
.filter(r -> r.getKind().equals(getGroupVersionKind().getKind()) &&
105+
r.getApiVersion().equals(getGroupVersionKind().apiVersion()) &&
106+
r.getMetadata().getName().equals(name) &&
107+
(namespace == null || Objects.equals(namespace, r.getMetadata().getNamespace())))
108+
.toList();
109+
110+
if (res.size() > 1) {
111+
throw new IllegalStateException("Multiple resources found for gvk: " + getGroupVersionKind()
112+
+ " name:" + name
113+
+ " namespace:" + namespace);
114+
} else if (res.size() == 1) {
115+
return Optional.of(res.get(0));
116+
} else {
117+
return Optional.empty();
118+
}
119+
}
87120
}

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/dependent/GenericResourceDiscriminator.java

-48
This file was deleted.

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/reconciler/ValidationAndErrorHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ public class ValidationAndErrorHandler {
3737
if (e instanceof ValidationAndErrorHandler.NonUniqueNameException ex) {
3838
resource.getStatus()
3939
.setErrorMessage(NON_UNIQUE_NAMES_FOUND_PREFIX + String.join(",", ex.getDuplicates()));
40-
return ErrorStatusUpdateControl.updateStatus(resource).withNoRetry();
40+
return ErrorStatusUpdateControl.patchStatus(resource).withNoRetry();
4141
} else {
4242
var message = e.getMessage();
4343
if (message.length() > MAX_MESSAGE_SIZE) {
4444
message = message.substring(0, MAX_MESSAGE_SIZE) + "...";
4545
}
4646
resource.getStatus().setErrorMessage("Error: " + message);
47-
return ErrorStatusUpdateControl.updateStatus(resource);
47+
return ErrorStatusUpdateControl.patchStatus(resource);
4848
}
4949
}
5050

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/reconciler/glue/GlueReconciler.java

+19-25
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import io.javaoperatorsdk.operator.glue.dependent.GCGenericBulkDependentResource;
2525
import io.javaoperatorsdk.operator.glue.dependent.GCGenericDependentResource;
2626
import io.javaoperatorsdk.operator.glue.dependent.GenericDependentResource;
27-
import io.javaoperatorsdk.operator.glue.dependent.GenericResourceDiscriminator;
2827
import io.javaoperatorsdk.operator.glue.reconciler.ValidationAndErrorHandler;
2928
import io.javaoperatorsdk.operator.glue.reconciler.operator.GlueOperatorReconciler;
3029
import io.javaoperatorsdk.operator.glue.templating.GenericTemplateHandler;
31-
import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
3230
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
3331
import io.javaoperatorsdk.operator.processing.dependent.workflow.KubernetesResourceDeletedCondition;
3432
import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowBuilder;
@@ -38,7 +36,7 @@
3836
import static io.javaoperatorsdk.operator.glue.reconciler.operator.GlueOperatorReconciler.PARENT_RELATED_RESOURCE_NAME;
3937

4038
@ControllerConfiguration(name = GlueReconciler.GLUE_RECONCILER_NAME)
41-
public class GlueReconciler implements Reconciler<Glue>, Cleaner<Glue>, ErrorStatusHandler<Glue> {
39+
public class GlueReconciler implements Reconciler<Glue>, Cleaner<Glue> {
4240

4341
private static final Logger log = LoggerFactory.getLogger(GlueReconciler.class);
4442
public static final String DEPENDENT_NAME_ANNOTATION_KEY =
@@ -107,7 +105,7 @@ public DeleteControl cleanup(Glue primary, Context<Glue> context) {
107105
return DeleteControl.noFinalizerRemoval();
108106
} else {
109107
removeFinalizerForParent(primary, context);
110-
actualWorkflow.getDependentResourcesByNameWithoutActivationCondition().forEach((n, dr) -> {
108+
actualWorkflow.getDependentResourcesWithoutActivationCondition().forEach(dr -> {
111109
var genericDependentResource = (GenericDependentResource) dr;
112110
informerRegister.deRegisterInformer(genericDependentResource.getGroupVersionKind(),
113111
primary, context);
@@ -201,55 +199,51 @@ private void createAndAddDependentToWorkflow(Glue primary, Context<Glue> context
201199
targetNamespace.map(n -> n.trim().equals(primary.getMetadata().getNamespace().trim()))
202200
.orElse(true);
203201

204-
var dr = createDependentResource(spec, leafDependent, resourceInSameNamespaceAsPrimary);
202+
var name = genericTemplateHandler.processTemplate(Utils.getName(spec), primary, false, context);
203+
var dr = createDependentResource(name, spec, leafDependent, resourceInSameNamespaceAsPrimary,
204+
targetNamespace.orElse(null));
205205
var gvk = dr.getGroupVersionKind();
206206

207-
if (!(dr instanceof BulkDependentResource<?, ?>)) {
208-
dr.setResourceDiscriminator(new GenericResourceDiscriminator(dr.getGroupVersionKind(),
209-
genericTemplateHandler.processTemplate(Utils.getName(spec), primary, false, context),
210-
targetNamespace.orElse(null)));
211-
}
212-
213207
var es = informerRegister.registerInformer(context, gvk, primary);
214-
dr.configureWith(es);
208+
dr.setEventSource(es);
215209

216-
builder.addDependentResource(dr);
217-
spec.getDependsOn().forEach(s -> builder.dependsOn(genericDependentResourceMap.get(s)));
218-
// if a resources does not depend on another there is no reason to add cleanup condition
210+
var nodeBuilder = builder.addDependentResourceAndConfigure(dr);
211+
spec.getDependsOn().forEach(s -> nodeBuilder.dependsOn(genericDependentResourceMap.get(s)));
212+
// if resources do not depend on another, there is no reason to add cleanup condition
219213
if (!spec.getDependsOn().isEmpty()) {
220-
builder.withDeletePostcondition(deletePostCondition);
214+
nodeBuilder.withDeletePostcondition(deletePostCondition);
221215
}
222216
genericDependentResourceMap.put(spec.getName(), dr);
223217

224218
Optional.ofNullable(spec.getReadyPostCondition())
225-
.ifPresent(c -> builder.withReadyPostcondition(toCondition(c)));
219+
.ifPresent(c -> nodeBuilder.withReadyPostcondition(toCondition(c)));
226220
Optional.ofNullable(spec.getCondition())
227-
.ifPresent(c -> builder.withReconcilePrecondition(toCondition(c)));
221+
.ifPresent(c -> nodeBuilder.withReconcilePrecondition(toCondition(c)));
228222
}
229223

230-
private GenericDependentResource createDependentResource(DependentResourceSpec spec,
231-
boolean leafDependent, Boolean resourceInSameNamespaceAsPrimary) {
224+
private GenericDependentResource createDependentResource(String name, DependentResourceSpec spec,
225+
boolean leafDependent, Boolean resourceInSameNamespaceAsPrimary, String namespace) {
232226

233227
if (leafDependent && resourceInSameNamespaceAsPrimary && !spec.isClusterScoped()) {
234228
return spec.getResourceTemplate() != null
235229
? spec.getBulk()
236230
? new GCGenericBulkDependentResource(genericTemplateHandler,
237231
spec.getResourceTemplate(),
238-
spec.getName(),
232+
name,
239233
spec.isClusterScoped(), spec.getMatcher())
240234
: new GCGenericDependentResource(genericTemplateHandler, spec.getResourceTemplate(),
241-
spec.getName(),
235+
name, namespace,
242236
spec.isClusterScoped(), spec.getMatcher())
243237
: new GCGenericDependentResource(genericTemplateHandler, spec.getResource(),
244-
spec.getName(),
238+
name, namespace,
245239
spec.isClusterScoped(), spec.getMatcher());
246240
} else {
247241
return spec.getResourceTemplate() != null
248242
? new GenericDependentResource(genericTemplateHandler,
249-
spec.getResourceTemplate(), spec.getName(), spec.isClusterScoped(),
243+
spec.getResourceTemplate(), name, namespace, spec.isClusterScoped(),
250244
spec.getMatcher())
251245
: new GenericDependentResource(genericTemplateHandler,
252-
spec.getResource(), spec.getName(), spec.isClusterScoped(), spec.getMatcher());
246+
spec.getResource(), name, namespace, spec.isClusterScoped(), spec.getMatcher());
253247
}
254248
}
255249

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/reconciler/glue/InformerProducer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
5-
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
5+
import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
66
import io.javaoperatorsdk.operator.api.reconciler.Context;
77
import io.javaoperatorsdk.operator.glue.customresource.glue.Glue;
88
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
@@ -15,7 +15,7 @@
1515
public class InformerProducer {
1616

1717
public InformerEventSource<GenericKubernetesResource, Glue> createInformer(
18-
InformerConfiguration<GenericKubernetesResource> configuration,
18+
InformerEventSourceConfiguration<GenericKubernetesResource> configuration,
1919
Context<Glue> context) {
2020
return new InformerEventSource<>(configuration,
2121
context.eventSourceRetriever().eventSourceContextForDynamicRegistration());

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/reconciler/glue/InformerRegister.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.slf4j.LoggerFactory;
99

1010
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
11-
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
11+
import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
1212
import io.javaoperatorsdk.operator.api.reconciler.Context;
1313
import io.javaoperatorsdk.operator.glue.ControllerConfig;
1414
import io.javaoperatorsdk.operator.glue.Utils;
@@ -94,8 +94,9 @@ public InformerEventSource<GenericKubernetesResource, Glue> registerInformer(
9494
markEventSource(gvk, glue);
9595
}
9696

97-
var configBuilder = InformerConfiguration.<GenericKubernetesResource>from(gvk)
98-
.withSecondaryToPrimaryMapper(mapper);
97+
var configBuilder = InformerEventSourceConfiguration.from(gvk, Glue.class)
98+
.withSecondaryToPrimaryMapper(mapper)
99+
.withName(gvk.toString());
99100
labelSelectorForGVK(gvk).ifPresent(ls -> {
100101
log.debug("Registering label selector: {} for informer for gvk: {}", ls, gvk);
101102
configBuilder.withLabelSelector(ls);
@@ -105,8 +106,7 @@ public InformerEventSource<GenericKubernetesResource, Glue> registerInformer(
105106

106107
return (InformerEventSource<GenericKubernetesResource, Glue>) context
107108
.eventSourceRetriever()
108-
.dynamicallyRegisterEventSource(gvk.toString(), newInformer);
109-
109+
.dynamicallyRegisterEventSource(newInformer);
110110
}
111111

112112
public synchronized void deRegisterInformer(GroupVersionKind groupVersionKind,

Diff for: src/main/java/io/javaoperatorsdk/operator/glue/reconciler/glue/RelatedAndOwnedResourceSecondaryToPrimaryMapper.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.concurrent.ConcurrentHashMap;
88

99
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
10+
import io.javaoperatorsdk.operator.glue.customresource.operator.GlueOperator;
1011
import io.javaoperatorsdk.operator.processing.event.ResourceID;
1112
import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
1213
import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers;
@@ -19,8 +20,8 @@ public class RelatedAndOwnedResourceSecondaryToPrimaryMapper
1920
@Override
2021
public Set<ResourceID> toPrimaryResourceIDs(GenericKubernetesResource resource) {
2122
// based on if GC or non GC dependent it can have different mapping
22-
var res = Mappers.fromOwnerReferences(false).toPrimaryResourceIDs(resource);
23-
res.addAll(Mappers.fromDefaultAnnotations().toPrimaryResourceIDs(resource));
23+
var res = Mappers.fromOwnerReferences(GlueOperator.class, false).toPrimaryResourceIDs(resource);
24+
res.addAll(Mappers.fromDefaultAnnotations(GlueOperator.class).toPrimaryResourceIDs(resource));
2425

2526
// related resource mapping
2627
var idMapped = secondaryToPrimaryMap.get(

0 commit comments

Comments
 (0)