Skip to content

Commit eb5f01b

Browse files
authored
Merge pull request #1928 from yue9944882/cherry-pick-13-setIsLastSyncResourceVersionUnavailable
Cherrypick 13: Reflector list should handle expired resource version from watch handler as well
2 parents 6c0a01f + 58cf34f commit eb5f01b

File tree

6 files changed

+46
-7
lines changed

6 files changed

+46
-7
lines changed

client-java-contrib/Dockerfile

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ FROM docker:stable
22

33
# install git, bash, kind, kubectl and clone the kubernetes-client/gen code base
44
RUN apk add --no-cache git bash && \
5-
wget -O /usr/bin/kind https://kind.sigs.k8s.io/dl/v0.8.1/kind-linux-amd64 && \
5+
wget -O /usr/bin/kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64 && \
66
chmod +x /usr/bin/kind && \
7-
wget -O /usr/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl && \
7+
wget -O /usr/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl && \
88
chmod +x /usr/bin/kubectl && \
9-
git clone https://github.com/kubernetes-client/gen.git
9+
git clone https://github.com/kubernetes-client/gen.git && \
10+
cd gen && \
11+
git checkout 729332ad08f0f4d98983b7beb027e2f657236ef9
12+
# 729332ad08f0f4d98983b7beb027e2f657236ef9 is the last commit using python2 interpreter
13+
1014

1115
COPY Dockerfile.gen gen/openapi/openapi-generator/Dockerfile
1216
COPY generate.sh generate.sh

client-java-contrib/admissionreview/generate.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ docker run --rm \
55
-v $LOCAL_MANIFEST_FILE:$LOCAL_MANIFEST_FILE \
66
-v /var/run/docker.sock:/var/run/docker.sock \
77
-v $PWD:$PWD \
8-
-it ghcr.io/yue9944882/crd-model-gen:v1.0.3 \
8+
-it ghcr.io/yue9944882/crd-model-gen:v1.0.6 \
99
sh -c "source /gen/openapi/java-crd-cmd.sh -n v1 -p io.kubernetes.client.admissionreview -l 2 -o $PWD/gen < $LOCAL_MANIFEST_FILE"

client-java-contrib/cert-manager/update.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# under src/main/java/io/cert/manager/models.
1818

1919
DEFAULT_IMAGE_NAME=docker.pkg.github.com/kubernetes-client/java/crd-model-gen
20-
DEFAULT_IMAGE_TAG=v1.0.3
20+
DEFAULT_IMAGE_TAG=v1.0.6
2121
IMAGE_NAME=${IMAGE_NAME:=$DEFAULT_IMAGE_NAME}
2222
IMAGE_TAG=${IMAGE_TAG:=$DEFAULT_IMAGE_TAG}
2323

client-java-contrib/prometheus-operator/update.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# under src/main/java/io/cert/manager/models.
1818

1919
DEFAULT_IMAGE_NAME=docker.pkg.github.com/kubernetes-client/java/crd-model-gen
20-
DEFAULT_IMAGE_TAG=v1.0.3
20+
DEFAULT_IMAGE_TAG=v1.0.6
2121
IMAGE_NAME=${IMAGE_NAME:=$DEFAULT_IMAGE_NAME}
2222
IMAGE_TAG=${IMAGE_TAG:=$DEFAULT_IMAGE_TAG}
2323

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,11 @@ private void watchHandler(Watchable<ApiType> watch) {
241241
}
242242
if (eventType.get() == EventType.ERROR) {
243243
if (item.status != null && item.status.getCode() == HttpURLConnection.HTTP_GONE) {
244-
log.info("Watch connection expired: {}", item.status.getMessage());
244+
log.info(
245+
"ResourceVersion {} and Watch connection expired: {} , will retry w/o resourceVersion next time",
246+
getRelistResourceVersion(),
247+
item.status.getMessage());
248+
isLastSyncResourceVersionUnavailable = true;
245249
throw new WatchExpiredException();
246250
} else {
247251
String errorMessage =

util/src/test/java/io/kubernetes/client/informer/cache/ReflectorRunnableTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package io.kubernetes.client.informer.cache;
1414

1515
import static org.junit.Assert.assertFalse;
16+
import static org.junit.Assert.assertTrue;
1617
import static org.mockito.Mockito.any;
1718
import static org.mockito.Mockito.mock;
1819
import static org.mockito.Mockito.never;
@@ -312,4 +313,34 @@ public void testReflectorWatchShouldRelistUponExpiredWatchItem() throws ApiExcep
312313
.until(() -> future.isDone());
313314
assertFalse(future.isCompletedExceptionally());
314315
}
316+
317+
@Test
318+
public void testReflectorListShouldHandleExpiredResourceVersionFromWatchHandler()
319+
throws ApiException {
320+
String expectedResourceVersion = "100";
321+
when(listerWatcher.list(any()))
322+
.thenReturn(
323+
new V1PodList().metadata(new V1ListMeta().resourceVersion(expectedResourceVersion)));
324+
325+
V1Status v1Status = new V1Status();
326+
v1Status.setMessage("dummy-error-message");
327+
v1Status.setCode(410);
328+
when(listerWatcher.watch(any()))
329+
.thenReturn(new MockWatch<>(new Watch.Response("Error", v1Status)));
330+
ReflectorRunnable<V1Pod, V1PodList> reflectorRunnable =
331+
new ReflectorRunnable<>(V1Pod.class, listerWatcher, deltaFIFO);
332+
try {
333+
Thread thread = new Thread(reflectorRunnable::run);
334+
thread.setDaemon(true);
335+
thread.start();
336+
Awaitility.await()
337+
.atMost(Duration.ofSeconds(1))
338+
.pollInterval(Duration.ofMillis(100))
339+
.until(
340+
() -> expectedResourceVersion.equals(reflectorRunnable.getLastSyncResourceVersion()));
341+
assertTrue(reflectorRunnable.isLastSyncResourceVersionUnavailable());
342+
} finally {
343+
reflectorRunnable.stop();
344+
}
345+
}
315346
}

0 commit comments

Comments
 (0)