Skip to content

Commit aed94b0

Browse files
Merge pull request #294 from xenit-eu/ACC-1629
Avoid triggering service updates when the service has not changed
2 parents ba26492 + cab4875 commit aed94b0

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/main/java/com/contentgrid/gateway/ServiceDiscoveryProperties.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.contentgrid.gateway;
22

3+
import java.time.Duration;
34
import lombok.Data;
45
import org.springframework.boot.context.properties.ConfigurationProperties;
56

@@ -9,5 +10,5 @@ public class ServiceDiscoveryProperties {
910

1011
private boolean enabled = false;
1112
private String namespace = "default";
12-
private long resync = 60;
13+
private Duration resync = Duration.ofMinutes(1);
1314
}
Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,31 @@
11
package com.contentgrid.gateway.runtime.servicediscovery;
22

3-
43
import io.fabric8.kubernetes.api.model.LabelSelector;
54
import io.fabric8.kubernetes.api.model.LabelSelectorBuilder;
65
import io.fabric8.kubernetes.api.model.Service;
7-
import io.fabric8.kubernetes.api.model.discovery.v1.EndpointSlice;
86
import io.fabric8.kubernetes.client.KubernetesClient;
9-
import io.fabric8.kubernetes.client.Watcher;
10-
import io.fabric8.kubernetes.client.WatcherException;
117
import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
12-
import java.io.Closeable;
13-
import java.io.IOException;
8+
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
9+
import java.time.Duration;
10+
import java.util.Objects;
1411
import lombok.RequiredArgsConstructor;
1512
import lombok.extern.slf4j.Slf4j;
16-
import org.springframework.cloud.client.ServiceInstance;
1713
import org.springframework.cloud.kubernetes.fabric8.loadbalancer.Fabric8ServiceInstanceMapper;
1814

1915
@Slf4j
2016
@RequiredArgsConstructor
21-
public class KubernetesServiceDiscovery implements ServiceDiscovery {
17+
public class KubernetesServiceDiscovery implements ServiceDiscovery, AutoCloseable {
2218

2319
private final KubernetesClient client;
2420
private final String namespace;
25-
private final long resyncInterval;
21+
private final Duration resyncInterval;
2622

2723
private final ServiceAddedHandler serviceAddedHandler;
2824
private final ServiceDeletedHandler serviceDeletedHandler;
2925

3026
private final Fabric8ServiceInstanceMapper mapper;
3127

28+
private SharedIndexInformer<Service> informer;
3229

3330
private static final LabelSelector selector = new LabelSelectorBuilder()
3431
.addToMatchLabels("app.kubernetes.io/managed-by", "contentgrid")
@@ -38,7 +35,7 @@ public class KubernetesServiceDiscovery implements ServiceDiscovery {
3835
// TODO this should by a bean-init method
3936
@Override
4037
public void discoverApis() {
41-
client.services()
38+
this.informer = client.services()
4239
.inNamespace(namespace)
4340
.withLabelSelector(selector)
4441
.inform(new ResourceEventHandler<Service>() {
@@ -51,7 +48,10 @@ public void onAdd(Service obj) {
5148

5249
@Override
5350
public void onUpdate(Service oldObj, Service newObj) {
54-
this.onAdd(newObj);
51+
// Only trigger an update when the service has actually changed
52+
if(!Objects.equals(oldObj.getMetadata().getResourceVersion(), newObj.getMetadata().getResourceVersion())) {
53+
this.onAdd(newObj);
54+
}
5555
}
5656

5757
@Override
@@ -60,6 +60,13 @@ public void onDelete(Service obj, boolean deletedFinalStateUnknown) {
6060
serviceDeletedHandler.handleServiceDeleted(service);
6161
log.info("{} deleted", service);
6262
}
63-
}, resyncInterval * 1000);
63+
}, resyncInterval.toMillis());
64+
}
65+
66+
@Override
67+
public void close() throws Exception {
68+
if(this.informer != null) {
69+
this.informer.close();
70+
}
6471
}
6572
}

0 commit comments

Comments
 (0)