diff --git a/pom.xml b/pom.xml
index e7d1249728..24ace4f953 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@
3.1.0
2.6
2.0.17
- 2.9.3
+ 3.0.0
4.34.1
5.13.4
5.13.4
diff --git a/spring/src/main/java/io/kubernetes/client/spring/extended/manifests/KubernetesFromConfigMapProcessor.java b/spring/src/main/java/io/kubernetes/client/spring/extended/manifests/KubernetesFromConfigMapProcessor.java
index 142d7528c2..5312cd04d4 100644
--- a/spring/src/main/java/io/kubernetes/client/spring/extended/manifests/KubernetesFromConfigMapProcessor.java
+++ b/spring/src/main/java/io/kubernetes/client/spring/extended/manifests/KubernetesFromConfigMapProcessor.java
@@ -12,21 +12,18 @@
*/
package io.kubernetes.client.spring.extended.manifests;
-import com.github.benmanes.caffeine.cache.CacheLoader;
+import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
-import com.github.benmanes.caffeine.cache.LoadingCache;
import io.kubernetes.client.openapi.models.V1ConfigMap;
import io.kubernetes.client.spring.extended.manifests.annotation.FromConfigMap;
import io.kubernetes.client.spring.extended.manifests.config.KubernetesManifestsProperties;
import io.kubernetes.client.spring.extended.manifests.configmaps.ConfigMapGetter;
import java.lang.reflect.Field;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-import java.util.function.Supplier;
-import org.checkerframework.checker.nullness.qual.NonNull;
-import org.checkerframework.checker.nullness.qual.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
@@ -80,15 +77,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) throw
ConfigMapGetter configMapGetter =
getOrCreateConfigMapGetter(fromConfigMapAnnotation, applicationContext);
- LoadingCache configMapDataCache =
- Caffeine.newBuilder()
- .expireAfterWrite(manifestsProperties.getRefreshInterval())
- .build(
- new ConfigMapGetterCacheLoader(
- () -> {
- return configMapGetter.get(
- fromConfigMapAnnotation.namespace(), fromConfigMapAnnotation.name());
- }));
+ Cache configMapDataCache = Caffeine.newBuilder().build();
fullyRefreshCache(configMapGetter, fromConfigMapAnnotation, configMapDataCache);
configMapKeyRefresher.scheduleAtFixedRate(
() -> {
@@ -106,14 +95,19 @@ public Object postProcessAfterInitialization(Object bean, String beanName) throw
private static void fullyRefreshCache(
ConfigMapGetter configMapGetter,
FromConfigMap fromConfigMapAnnotation,
- LoadingCache configMapDataCache) {
+ Cache configMapDataCache) {
V1ConfigMap configMap =
configMapGetter.get(fromConfigMapAnnotation.namespace(), fromConfigMapAnnotation.name());
if (configMap == null || configMap.getData() == null) {
+ configMapDataCache.invalidateAll();
return;
}
// TODO: make the cache data refreshment atomic
- configMap.getData().keySet().stream().forEach(key -> configMapDataCache.refresh(key));
+ Map newData = configMap.getData();
+ newData.forEach(configMapDataCache::put);
+ Set.copyOf(configMapDataCache.asMap().keySet()).stream()
+ .filter(key -> !newData.containsKey(key))
+ .forEach(configMapDataCache::invalidate);
}
private ConfigMapGetter getOrCreateConfigMapGetter(
@@ -144,22 +138,4 @@ private ConfigMapGetter getOrCreateConfigMapGetter(
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
-
- static class ConfigMapGetterCacheLoader implements CacheLoader {
-
- ConfigMapGetterCacheLoader(Supplier configMapSupplier) {
- this.configMapSupplier = configMapSupplier;
- }
-
- private final Supplier configMapSupplier;
-
- @Override
- public @Nullable String load(@NonNull String key) throws Exception {
- V1ConfigMap configMap = this.configMapSupplier.get();
- if (configMap == null || configMap.getData() == null) {
- return null;
- }
- return configMap.getData().get(key);
- }
- }
}