Skip to content

Commit 2115de4

Browse files
committed
fix: migrated tomcat operator to informers, some minor changes to make it easy to write
1 parent 715126b commit 2115de4

File tree

10 files changed

+51
-284
lines changed

10 files changed

+51
-284
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public Optional<T> getLatestResource(String uuid) {
7676
return Optional.ofNullable(resources.get(uuid)).map(this::clone);
7777
}
7878

79-
public List<T> getLatestResources(Predicate<CustomResource> selector) {
79+
public List<T> getLatestResources(Predicate<T> selector) {
8080
try {
8181
lock.lock();
8282
return resources.values().stream()
@@ -88,7 +88,7 @@ public List<T> getLatestResources(Predicate<CustomResource> selector) {
8888
}
8989
}
9090

91-
public Set<String> getLatestResourcesUids(Predicate<CustomResource> selector) {
91+
public Set<String> getLatestResourcesUids(Predicate<T> selector) {
9292
try {
9393
lock.lock();
9494
return resources.values().stream()
@@ -113,4 +113,5 @@ private T clone(CustomResource customResource) {
113113
public T cleanup(String customResourceUid) {
114114
return resources.remove(customResourceUid);
115115
}
116+
116117
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/DefaultEventSourceManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
public class DefaultEventSourceManager<R extends CustomResource<?, ?>>
2727
implements EventSourceManager {
2828

29+
public static final String CUSTOM_RESOURCE_EVENT_SOURCE_NAME = "custom-resource-event-source";
2930
public static final String RETRY_TIMER_EVENT_SOURCE_NAME = "retry-timer-event-source";
30-
private static final String CUSTOM_RESOURCE_EVENT_SOURCE_NAME = "custom-resource-event-source";
3131
private static final Logger log = LoggerFactory.getLogger(DefaultEventSourceManager.class);
3232

3333
private final ReentrantLock lock = new ReentrantLock();

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ public void onClose(WatcherException e) {
159159
}
160160
}
161161

162-
// todo: remove
163162
public CustomResourceCache<T> getCache() {
164163
return customResourceCache;
165164
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/InformerEventSource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ private void propagateEvent(InformerEvent.Action action, T object, T oldObject)
8181
}
8282
uids.forEach(uid -> {
8383
InformerEvent event = new InformerEvent(uid, this, action, object, oldObject);
84-
this.eventHandler.handleEvent(event);
84+
if (this.eventHandler != null) {
85+
this.eventHandler.handleEvent(event);
86+
}
8587
});
8688
}
8789

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/DeploymentEvent.java

Lines changed: 0 additions & 51 deletions
This file was deleted.

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/DeploymentEventSource.java

Lines changed: 0 additions & 78 deletions
This file was deleted.

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatController.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.io.IOException;
44
import java.io.InputStream;
55
import java.util.Objects;
6-
import java.util.Optional;
6+
import java.util.Set;
77

88
import org.slf4j.Logger;
99
import org.slf4j.LoggerFactory;
@@ -15,10 +15,13 @@
1515
import io.fabric8.kubernetes.client.KubernetesClient;
1616
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
1717
import io.fabric8.kubernetes.client.dsl.ServiceResource;
18+
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
1819
import io.fabric8.kubernetes.client.utils.Serialization;
1920
import io.javaoperatorsdk.operator.api.*;
2021
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
21-
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEvent;
22+
import io.javaoperatorsdk.operator.processing.event.internal.InformerEventSource;
23+
24+
import static java.util.Collections.EMPTY_SET;
2225

2326
/**
2427
* Runs a specified number of Tomcat app server Pods. It uses a Deployment to create the Pods. Also
@@ -31,40 +34,47 @@ public class TomcatController implements ResourceController<Tomcat> {
3134

3235
private final KubernetesClient kubernetesClient;
3336

34-
private DeploymentEventSource deploymentEventSource;
37+
private volatile InformerEventSource<Deployment> informerEventSource;
3538

3639
public TomcatController(KubernetesClient client) {
3740
this.kubernetesClient = client;
3841
}
3942

4043
@Override
4144
public void init(EventSourceManager eventSourceManager) {
42-
this.deploymentEventSource = DeploymentEventSource.createAndRegisterWatch(kubernetesClient);
43-
eventSourceManager.registerEventSource("deployment-event-source", this.deploymentEventSource);
45+
SharedIndexInformer<Deployment> deploymentInformer =
46+
kubernetesClient.apps().deployments().inAnyNamespace()
47+
.withLabel("app.kubernetes.io/managed-by", "tomcat-operator")
48+
.inform();
49+
50+
this.informerEventSource = new InformerEventSource<>(deploymentInformer, d -> {
51+
var ownerReferences = d.getMetadata().getOwnerReferences();
52+
if (!ownerReferences.isEmpty()) {
53+
return Set.of(ownerReferences.get(0).getUid());
54+
} else {
55+
return EMPTY_SET;
56+
}
57+
});
58+
eventSourceManager.registerEventSource("deployment-event-source", this.informerEventSource);
4459
}
4560

4661
@Override
4762
public UpdateControl<Tomcat> createOrUpdateResource(Tomcat tomcat, Context<Tomcat> context) {
48-
Optional<CustomResourceEvent> latestCREvent =
49-
context.getEvents().getLatestOfType(CustomResourceEvent.class);
50-
if (latestCREvent.isPresent()) {
51-
createOrUpdateDeployment(tomcat);
52-
createOrUpdateService(tomcat);
53-
}
63+
createOrUpdateDeployment(tomcat);
64+
createOrUpdateService(tomcat);
5465

55-
Optional<DeploymentEvent> latestDeploymentEvent =
56-
context.getEvents().getLatestOfType(DeploymentEvent.class);
57-
if (latestDeploymentEvent.isPresent()) {
66+
Deployment deployment = informerEventSource.getAssociated(tomcat);
67+
68+
if (deployment != null) {
5869
Tomcat updatedTomcat =
59-
updateTomcatStatus(tomcat, latestDeploymentEvent.get().getDeployment());
70+
updateTomcatStatus(tomcat, deployment);
6071
log.info(
6172
"Updating status of Tomcat {} in namespace {} to {} ready replicas",
6273
tomcat.getMetadata().getName(),
6374
tomcat.getMetadata().getNamespace(),
6475
tomcat.getStatus().getReadyReplicas());
6576
return UpdateControl.updateStatusSubResource(updatedTomcat);
6677
}
67-
6878
return UpdateControl.noUpdate();
6979
}
7080

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatEvent.java

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)