oscerd commented on a change in pull request #6728: URL: https://github.com/apache/camel/pull/6728#discussion_r783279670
########## File path: components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/cache/CaffeineCacheEndpoint.java ########## @@ -64,27 +64,37 @@ public Producer createProducer() throws Exception { @Override protected void doStart() throws Exception { - cache = CamelContextHelper.lookup(getCamelContext(), cacheName, Cache.class); - if (cache == null) { - Caffeine<?, ?> builder = Caffeine.newBuilder(); - if (configuration.getEvictionType() == EvictionType.SIZE_BASED) { - builder.initialCapacity(configuration.getInitialCapacity()); - builder.maximumSize(configuration.getMaximumSize()); - } else if (configuration.getEvictionType() == EvictionType.TIME_BASED) { - builder.expireAfterAccess(configuration.getExpireAfterAccessTime(), TimeUnit.SECONDS); - builder.expireAfterWrite(configuration.getExpireAfterWriteTime(), TimeUnit.SECONDS); - } - if (configuration.isStatsEnabled()) { - if (ObjectHelper.isEmpty(configuration.getStatsCounter())) { - builder.recordStats(); + + synchronized (this) { + cache = CamelContextHelper.lookup(getCamelContext(), cacheName, Cache.class); + if (cache == null) { + if (configuration.isCreateCacheIfNotExist()) { + Caffeine<?, ?> builder = Caffeine.newBuilder(); + if (configuration.getEvictionType() == EvictionType.SIZE_BASED) { + builder.initialCapacity(configuration.getInitialCapacity()); + builder.maximumSize(configuration.getMaximumSize()); + } else if (configuration.getEvictionType() == EvictionType.TIME_BASED) { + builder.expireAfterAccess(configuration.getExpireAfterAccessTime(), TimeUnit.SECONDS); + builder.expireAfterWrite(configuration.getExpireAfterWriteTime(), TimeUnit.SECONDS); + } + if (configuration.isStatsEnabled()) { + if (ObjectHelper.isEmpty(configuration.getStatsCounter())) { + builder.recordStats(); + } else { + builder.recordStats(configuration::getStatsCounter); + } + } + if (ObjectHelper.isNotEmpty(configuration.getRemovalListener())) { + builder.removalListener(configuration.getRemovalListener()); + } + cache = builder.build(); + getCamelContext().getRegistry().bind(cacheName, Cache.class, cache); Review comment: If you don't set the cache in the registry before the endpoint has been started, there is no mean of doing this after you create it in the doStart. If you don't set the cache instance in the registry, you'll use the cache created in the doStart for the lifecycle of the endpoint. The toF examples are an attempt to explain that if you use a pure to without a cache in the registry you'll get just a cache created in the lifecycle of the endpoint, this means you won't be able to reuse it in a different endpoint. Binding the cache to the registry in the doStart is wrong in my opinion. ########## File path: components/camel-caffeine/src/main/docs/caffeine-cache-component.adoc ########## @@ -83,5 +83,13 @@ CaffeineConstants.ACTION_HAS_RESULT CaffeineConstants.ACTION_SUCCEEDED ------------------------------------------------------------ +== Cache invalidation + +Please note that before Camel 3.15 the invalidate all action (CaffeineConstants.ACTION_INVALIDATE_ALL) does not +delete anything in case that CaffeineConstants.KEYS header is either missing or contains an empty set. + +Starting vom Camel 3.15 the invalidate all action does not delete anything in case the CaffeineConstants.KEYS header Review comment: I think we should move this section to the migration guide, since we are producing docs for each of the active branches ########## File path: components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/load/CaffeineLoadCacheEndpoint.java ########## @@ -64,27 +65,36 @@ public Producer createProducer() throws Exception { @Override protected void doStart() throws Exception { - cache = CamelContextHelper.lookup(getCamelContext(), cacheName, LoadingCache.class); - if (cache == null) { - Caffeine<Object, Object> builder = Caffeine.newBuilder(); - if (configuration.getEvictionType() == EvictionType.SIZE_BASED) { - builder.initialCapacity(configuration.getInitialCapacity()); - builder.maximumSize(configuration.getMaximumSize()); - } else if (configuration.getEvictionType() == EvictionType.TIME_BASED) { - builder.expireAfterAccess(configuration.getExpireAfterAccessTime(), TimeUnit.SECONDS); - builder.expireAfterWrite(configuration.getExpireAfterWriteTime(), TimeUnit.SECONDS); - } - if (configuration.isStatsEnabled()) { - if (ObjectHelper.isEmpty(configuration.getStatsCounter())) { - builder.recordStats(); + + synchronized (this) { Review comment: No need for sync ########## File path: components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/cache/CaffeineCacheEndpoint.java ########## @@ -64,27 +64,37 @@ public Producer createProducer() throws Exception { @Override protected void doStart() throws Exception { - cache = CamelContextHelper.lookup(getCamelContext(), cacheName, Cache.class); - if (cache == null) { - Caffeine<?, ?> builder = Caffeine.newBuilder(); - if (configuration.getEvictionType() == EvictionType.SIZE_BASED) { - builder.initialCapacity(configuration.getInitialCapacity()); - builder.maximumSize(configuration.getMaximumSize()); - } else if (configuration.getEvictionType() == EvictionType.TIME_BASED) { - builder.expireAfterAccess(configuration.getExpireAfterAccessTime(), TimeUnit.SECONDS); - builder.expireAfterWrite(configuration.getExpireAfterWriteTime(), TimeUnit.SECONDS); - } - if (configuration.isStatsEnabled()) { - if (ObjectHelper.isEmpty(configuration.getStatsCounter())) { - builder.recordStats(); + + synchronized (this) { Review comment: +1, no need for sync -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org