Skip to content

Commit 1a3b46a

Browse files
committed
refactor: simplify code by using the resource full name instead of GVK
Signed-off-by: Chris Laprun <[email protected]>
1 parent 48fef80 commit 1a3b46a

File tree

2 files changed

+18
-36
lines changed

2 files changed

+18
-36
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java

+17-35
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
import io.fabric8.kubernetes.api.model.HasMetadata;
1010
import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition;
11-
import io.fabric8.kubernetes.client.KubernetesClient;
1211
import io.javaoperatorsdk.operator.api.reconciler.Context;
1312
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
14-
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
1513
import io.javaoperatorsdk.operator.processing.expiration.Expiration;
1614
import io.javaoperatorsdk.operator.processing.expiration.ExpirationExecution;
1715
import io.javaoperatorsdk.operator.processing.expiration.RetryExpiration;
@@ -36,7 +34,7 @@ public class CRDPresentActivationCondition implements Condition<HasMetadata, Has
3634
.setIntervalMultiplier(DEFAULT_EXPIRATION_INTERVAL_MULTIPLIER)
3735
.setMaxAttempts(DEFAULT_EXPIRATION_MAX_RETRY_ATTEMPTS);
3836

39-
private final Map<GroupVersionKind, CRDCheckState> crdPresenceCache = new ConcurrentHashMap<>();
37+
private final Map<String, CRDCheckState> crdPresenceCache = new ConcurrentHashMap<>();
4038

4139
private final Expiration expiration;
4240

@@ -53,56 +51,40 @@ public boolean isMet(DependentResource<HasMetadata, HasMetadata> dependentResour
5351
HasMetadata primary, Context<HasMetadata> context) {
5452

5553
var resourceClass = dependentResource.resourceType();
56-
var apiVersion = HasMetadata.getApiVersion(resourceClass);
57-
var kind = HasMetadata.getKind(resourceClass);
58-
var gvk = new GroupVersionKind(apiVersion, kind);
54+
final var crdName = HasMetadata.getFullResourceName(resourceClass);
5955

60-
var crdCheckState = crdPresenceCache.computeIfAbsent(gvk,
56+
var crdCheckState = crdPresenceCache.computeIfAbsent(crdName,
6157
g -> new CRDCheckState(expiration.initExecution()));
6258
// in case of parallel execution it is only refreshed once
6359
synchronized (crdCheckState) {
64-
if (crdCheckState.getExpiration().isExpired()) {
65-
refreshCache(crdCheckState, gvk, context.getClient());
60+
if (crdCheckState.isExpired()) {
61+
log.debug("Refreshing cache for resource: {}", crdName);
62+
final var found = context.getClient().resources(CustomResourceDefinition.class).withName(crdName).get() != null;
63+
crdCheckState.refresh(found);
6664
}
6765
}
68-
return crdPresenceCache.get(gvk).getCrdPresent();
69-
}
70-
71-
private void refreshCache(CRDCheckState crdCheckState, GroupVersionKind gvk,
72-
KubernetesClient client) {
73-
log.debug("Refreshing cache for gvk: {}", gvk);
74-
boolean found = client.resources(CustomResourceDefinition.class).list().getItems()
75-
.stream().anyMatch(crd -> crd.getSpec().getNames().getKind().equals(gvk.getKind())
76-
&& crd.getSpec().getGroup().equals(gvk.getGroup()));
77-
78-
crdCheckState.setCrdPresent(found);
79-
crdCheckState.getExpiration().refreshed();
66+
return crdPresenceCache.get(crdName).isCrdPresent();
8067
}
8168

8269
static class CRDCheckState {
83-
70+
private final ExpirationExecution expirationExecution;
71+
private boolean crdPresent;
72+
8473
public CRDCheckState(ExpirationExecution expirationExecution) {
8574
this.expirationExecution = expirationExecution;
8675
}
8776

88-
private ExpirationExecution expirationExecution;
89-
90-
private Boolean crdPresent;
91-
92-
public ExpirationExecution getExpiration() {
93-
return expirationExecution;
77+
void refresh(boolean found) {
78+
crdPresent = found;
79+
expirationExecution.refreshed();
9480
}
9581

96-
public void setExpiration(ExpirationExecution expirationExecution) {
97-
this.expirationExecution = expirationExecution;
82+
boolean isExpired() {
83+
return expirationExecution.isExpired();
9884
}
9985

100-
public Boolean getCrdPresent() {
86+
public boolean isCrdPresent() {
10187
return crdPresent;
10288
}
103-
104-
public void setCrdPresent(Boolean crdPresent) {
105-
this.crdPresent = crdPresent;
106-
}
10789
}
10890
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/expiration/RetryExpirationExecution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class RetryExpirationExecution implements ExpirationExecution {
1111
public static final long NO_MORE_EXPIRATION = -1L;
1212

1313
private LocalDateTime lastRefreshTime;
14-
private Long delayUntilExpiration;
14+
private long delayUntilExpiration;
1515
private final RetryExecution retryExecution;
1616

1717
public RetryExpirationExecution(RetryExecution retryExecution) {

0 commit comments

Comments
 (0)