Skip to content

Commit a996bcc

Browse files
committed
separate initial load to avoid retaining list items in memory
1 parent 1fb8231 commit a996bcc

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

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

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@
1212
*/
1313
package io.kubernetes.client.informer.cache;
1414

15+
import java.io.IOException;
16+
import java.net.ConnectException;
17+
import java.net.HttpURLConnection;
18+
import java.time.Duration;
19+
import java.util.List;
20+
import java.util.Optional;
21+
import java.util.concurrent.atomic.AtomicBoolean;
22+
import java.util.function.BiConsumer;
23+
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
26+
1527
import io.kubernetes.client.common.KubernetesListObject;
1628
import io.kubernetes.client.common.KubernetesObject;
1729
import io.kubernetes.client.informer.EventType;
@@ -23,16 +35,6 @@
2335
import io.kubernetes.client.util.CallGeneratorParams;
2436
import io.kubernetes.client.util.Strings;
2537
import io.kubernetes.client.util.Watchable;
26-
import java.io.IOException;
27-
import java.net.ConnectException;
28-
import java.net.HttpURLConnection;
29-
import java.time.Duration;
30-
import java.util.List;
31-
import java.util.Optional;
32-
import java.util.concurrent.atomic.AtomicBoolean;
33-
import java.util.function.BiConsumer;
34-
import org.slf4j.Logger;
35-
import org.slf4j.LoggerFactory;
3638

3739
public class ReflectorRunnable<
3840
ApiType extends KubernetesObject, ApiListType extends KubernetesListObject>
@@ -87,19 +89,7 @@ public void run() {
8789
log.info("{}#Start listing and watching...", apiTypeClass);
8890

8991
try {
90-
ApiListType list =
91-
listerWatcher.list(
92-
new CallGeneratorParams(Boolean.FALSE, getRelistResourceVersion(), null));
93-
94-
V1ListMeta listMeta = list.getMetadata();
95-
String resourceVersion = listMeta.getResourceVersion();
96-
List<? extends KubernetesObject> items = list.getItems();
97-
98-
if (log.isDebugEnabled()) {
99-
log.debug("{}#Extract resourceVersion {} list meta", apiTypeClass, resourceVersion);
100-
}
101-
this.syncWith(items, resourceVersion);
102-
this.lastSyncResourceVersion = resourceVersion;
92+
this.lastSyncResourceVersion = initialLoad();
10393
this.isLastSyncResourceVersionUnavailable = false;
10494

10595
if (log.isDebugEnabled()) {
@@ -198,6 +188,22 @@ private synchronized void closeWatch() throws IOException {
198188
}
199189
}
200190

191+
private String initialLoad() throws ApiException {
192+
ApiListType list =
193+
listerWatcher.list(
194+
new CallGeneratorParams(Boolean.FALSE, getRelistResourceVersion(), null));
195+
196+
V1ListMeta listMeta = list.getMetadata();
197+
String resourceVersion = listMeta.getResourceVersion();
198+
List<? extends KubernetesObject> items = list.getItems();
199+
200+
if (log.isDebugEnabled()) {
201+
log.debug("{}#Extract resourceVersion {} list meta", apiTypeClass, resourceVersion);
202+
}
203+
this.syncWith(items, resourceVersion);
204+
return resourceVersion;
205+
}
206+
201207
private void syncWith(List<? extends KubernetesObject> items, String resourceVersion) {
202208
this.store.replace(
203209
(List<KubernetesObject>) items, resourceVersion); // down-casting is safe here

0 commit comments

Comments
 (0)