Synchronize cache update (#3408)

Fixes gh-3407
This commit is contained in:
Abel Salgado Romero
2024-05-29 18:02:05 +02:00
committed by GitHub
parent a54297bd55
commit fbbc8a6107

View File

@@ -89,18 +89,13 @@ public class CachingRouteLocator
.onErrorResume(s -> Mono.just(List.of()));
scopedRoutes.subscribe(scopedRoutesList -> {
Flux.concat(Flux.fromIterable(scopedRoutesList), getNonScopedRoutes(event))
.sort(AnnotationAwareOrderComparator.INSTANCE).materialize().collect(Collectors.toList())
.subscribe(this::publishRefreshEvent, this::handleRefreshError);
updateCache(Flux.concat(Flux.fromIterable(scopedRoutesList), getNonScopedRoutes(event))
.sort(AnnotationAwareOrderComparator.INSTANCE));
}, this::handleRefreshError);
}
else {
final Mono<List<Route>> allRoutes = fetch().collect(Collectors.toList());
allRoutes.subscribe(
list -> Flux.fromIterable(list).materialize().collect(Collectors.toList())
.subscribe(this::publishRefreshEvent, this::handleRefreshError),
this::handleRefreshError);
allRoutes.subscribe(list -> updateCache(Flux.fromIterable(list)), this::handleRefreshError);
}
}
catch (Throwable e) {
@@ -108,6 +103,11 @@ public class CachingRouteLocator
}
}
private synchronized void updateCache(Flux<Route> routes) {
routes.materialize().collect(Collectors.toList()).subscribe(this::publishRefreshEvent,
this::handleRefreshError);
}
private void publishRefreshEvent(List<Signal<Route>> signals) {
cache.put(CACHE_KEY, signals);
applicationEventPublisher.publishEvent(new RefreshRoutesResultEvent(this));