@@ -144,7 +144,7 @@ private synchronized EventHandling onEvent(
144144 "Removing resource from temp cache. comparison: {} unknown state: {}" ,
145145 comp ,
146146 unknownState );
147- cacheRemove (resourceId , cached . getMetadata (). getResourceVersion () );
147+ cacheRemove (resourceId );
148148 // we propagate event only for our update or newer other can be discarded since we know we
149149 // will receive
150150 // additional event
@@ -160,7 +160,6 @@ private synchronized EventHandling onEvent(
160160 delete
161161 ? new ResourceDeleteEvent (ResourceAction .DELETED , resourceId , resource , unknownState )
162162 : new ExtendedResourceEvent (action , resourceId , resource , prevResourceVersion ));
163- checkStaleResources ();
164163 return EventHandling .DEFER ;
165164 } else {
166165 return result ;
@@ -173,8 +172,10 @@ private void checkStaleResources() {
173172 var longLatest = Long .parseLong (latestResourceVersion );
174173 var head = cachedVersions .headMap (longLatest );
175174 for (var entry : head .entrySet ()) {
176- cache .remove (entry .getValue ());
177- cachedVersions .remove (entry .getKey ());
175+ synchronized (this ) {
176+ cache .remove (entry .getValue ());
177+ cachedVersions .remove (entry .getKey ());
178+ }
178179 }
179180 });
180181 }
@@ -231,18 +232,15 @@ public synchronized Optional<T> getResourceFromCache(ResourceID resourceID) {
231232 }
232233
233234 private void cacheResource (ResourceID resourceId , T resource ) {
234- var actualCached = cache .get (resourceId );
235- cache .put (resourceId , resource );
236- CompletableFuture .runAsync (
237- () -> {
238- cachedVersions .remove (Long .parseLong (actualCached .getMetadata ().getResourceVersion ()));
239- cachedVersions .put (
240- Long .parseLong (resource .getMetadata ().getResourceVersion ()), resourceId );
241- });
235+ var prevValue = cache .put (resourceId , resource );
236+ if (prevValue != null ) {
237+ cachedVersions .remove (Long .parseLong (prevValue .getMetadata ().getResourceVersion ()));
238+ }
239+ cachedVersions .put (Long .parseLong (resource .getMetadata ().getResourceVersion ()), resourceId );
242240 }
243241
244- private void cacheRemove (ResourceID resourceId , String cachedResourceVersion ) {
245- cache .remove (resourceId );
246- CompletableFuture . runAsync (() -> cachedVersions .remove (Long .parseLong (cachedResourceVersion )));
242+ private void cacheRemove (ResourceID resourceId ) {
243+ var removed = cache .remove (resourceId );
244+ cachedVersions .remove (Long .parseLong (removed . getMetadata (). getResourceVersion ( )));
247245 }
248246}
0 commit comments