Skip to content

Commit cab4875

Browse files
vierbergenlarsthijslemmens
authored andcommitted
Avoid triggering service updates when the service has not changed
This reduces the amount of logs emitted for all discovered services, while still logging when a new service has been discovered (or when it has changed).
1 parent ba26492 commit cab4875

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)