Skip to content

Commit 89e4ecf

Browse files
committed
enforcing read-timeout for informer-factory processor to zero
1 parent 7592454 commit 89e4ecf

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

spring/src/main/java/io/kubernetes/client/spring/extended/controller/KubernetesInformerFactoryProcessor.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@
1717
import io.kubernetes.client.informer.SharedInformer;
1818
import io.kubernetes.client.informer.SharedInformerFactory;
1919
import io.kubernetes.client.informer.cache.Lister;
20+
import io.kubernetes.client.informer.cache.ReflectorRunnable;
2021
import io.kubernetes.client.openapi.ApiClient;
2122
import io.kubernetes.client.spring.extended.controller.annotation.KubernetesInformer;
2223
import io.kubernetes.client.spring.extended.controller.annotation.KubernetesInformers;
24+
import io.kubernetes.client.spring.extended.controller.factory.KubernetesControllerFactory;
2325
import io.kubernetes.client.util.generic.GenericKubernetesApi;
26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
2428
import org.springframework.beans.BeansException;
2529
import org.springframework.beans.factory.BeanFactory;
2630
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
@@ -45,6 +49,8 @@ public class KubernetesInformerFactoryProcessor
4549

4650
public static final int ORDER = 0;
4751

52+
private static final Logger log = LoggerFactory.getLogger(KubernetesControllerFactory.class);
53+
4854
private ConfigurableListableBeanFactory beanFactory;
4955

5056
@Override
@@ -122,6 +128,18 @@ private <T extends KubernetesObject> Lister<T> lister(Class<T> type) {
122128
private <T extends KubernetesObject> SharedInformer<T> informer(
123129
Class<T> type, KubernetesInformer kubernetesInformer) {
124130
ApiClient apiClient = this.beanFactory.getBean(ApiClient.class);
131+
132+
if (apiClient.getHttpClient().readTimeoutMillis() > 0) {
133+
log.warn(
134+
"Enforcing read-timeout of the ApiClient to zero so that the watch connection won't abort from client-side");
135+
apiClient.setHttpClient(
136+
apiClient
137+
.getHttpClient()
138+
.newBuilder()
139+
.readTimeout(ReflectorRunnable.REFLECTOR_WATCH_CLIENTSIDE_TIMEOUT)
140+
.build());
141+
}
142+
125143
SharedInformerFactory sharedInformerFactory =
126144
this.beanFactory.getBean(SharedInformerFactory.class);
127145
final GenericKubernetesApi api =

util/src/main/java/io/kubernetes/client/informer/cache/ReflectorRunnable.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class ReflectorRunnable<
3737
ApiType extends KubernetesObject, ApiListType extends KubernetesListObject>
3838
implements Runnable {
3939

40+
public static Duration REFLECTOR_WATCH_CLIENTSIDE_TIMEOUT = Duration.ofMinutes(5);
41+
4042
private static final Logger log = LoggerFactory.getLogger(ReflectorRunnable.class);
4143

4244
private String lastSyncResourceVersion;
@@ -113,7 +115,7 @@ public void run() {
113115
new CallGeneratorParams(
114116
Boolean.TRUE,
115117
lastSyncResourceVersion,
116-
Long.valueOf(Duration.ofMinutes(5).getSeconds()).intValue()));
118+
Long.valueOf(REFLECTOR_WATCH_CLIENTSIDE_TIMEOUT.getSeconds()).intValue()));
117119

118120
synchronized (this) {
119121
if (!isActive.get()) {

0 commit comments

Comments
 (0)