You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2017/06/22 16:59:42 UTC
camel git commit: CAMEL-11388: camel-infinispan -
InfinispanRoutePolicy issue with locking from remote server
Repository: camel
Updated Branches:
refs/heads/camel-2.19.x e8f0bc8db -> ba4689296
CAMEL-11388: camel-infinispan - InfinispanRoutePolicy issue with locking from remote server
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ba468929
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ba468929
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ba468929
Branch: refs/heads/camel-2.19.x
Commit: ba468929624a93ae707ecbb943d41db84ab99712
Parents: e8f0bc8
Author: lburgazzoli <lb...@gmail.com>
Authored: Thu Jun 22 18:59:00 2017 +0200
Committer: lburgazzoli <lb...@gmail.com>
Committed: Thu Jun 22 18:59:00 2017 +0200
----------------------------------------------------------------------
.../component/infinispan/InfinispanManager.java | 18 ++++++++++++++++++
.../infinispan/policy/InfinispanRoutePolicy.java | 18 ++++++++++--------
.../src/test/resources/log4j2.properties | 3 +++
3 files changed, 31 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ba468929/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanManager.java
----------------------------------------------------------------------
diff --git a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanManager.java b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanManager.java
index 24ad853..028a2fe 100644
--- a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanManager.java
+++ b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanManager.java
@@ -164,6 +164,24 @@ public class InfinispanManager implements Service {
return cache;
}
+ public <K, V> BasicCache<K, V> getCache(String cacheName, boolean forceReturnValue) {
+ if (isCacheContainerRemote()) {
+ BasicCache<K, V> cache;
+ if (ObjectHelper.isEmpty(cacheName)) {
+ cache = InfinispanUtil.asRemote(cacheContainer).getCache(forceReturnValue);
+ cacheName = cache.getName();
+ } else {
+ cache = InfinispanUtil.asRemote(cacheContainer).getCache(cacheName, forceReturnValue);
+ }
+
+ LOGGER.trace("Cache[{}]", cacheName);
+
+ return cache;
+ } else {
+ return getCache(cacheName);
+ }
+ }
+
public <K, V> BasicCache<K, V> getCache(Exchange exchange, String defaultCache) {
return getCache(exchange.getIn().getHeader(InfinispanConstants.CACHE_NAME, defaultCache, String.class));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ba468929/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
----------------------------------------------------------------------
diff --git a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
index 7afc26a..bc9a977 100644
--- a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
+++ b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
@@ -152,10 +152,6 @@ public class InfinispanRoutePolicy extends RoutePolicySupport implements CamelCo
StringHelper.notEmpty(lockValue, "lockValue", this);
ObjectHelper.notNull(camelContext, "camelContext", this);
- if (this.lockValue == null) {
- this.lockValue = camelContext.getUuidGenerator().generateUuid();
- }
-
this.manager.start();
this.executorService = getCamelContext().getExecutorServiceManager().newSingleThreadScheduledExecutor(this, "InfinispanRoutePolicy");
@@ -163,10 +159,14 @@ public class InfinispanRoutePolicy extends RoutePolicySupport implements CamelCo
throw new IllegalArgumentException("Lock lifespan can not be less that 2 seconds");
}
- BasicCache<String, String> cache = manager.getCache(lockMapName);
+
if (manager.isCacheContainerEmbedded()) {
+ BasicCache<String, String> cache = manager.getCache(lockMapName);
this.service = new EmbeddedCacheService(InfinispanUtil.asEmbedded(cache));
} else {
+ // By default, previously existing values for java.util.Map operations
+ // are not returned for remote caches but policy needs it so force it.
+ BasicCache<String, String> cache = manager.getCache(lockMapName, true);
this.service = new RemoteCacheService(InfinispanUtil.asRemote(cache));
}
@@ -464,8 +464,10 @@ public class InfinispanRoutePolicy extends RoutePolicySupport implements CamelCo
// I'm still the leader, so refresh the key so it does not expire.
if (!cache.replaceWithVersion(lockKey, lockValue, version, (int)lifespanTimeUnit.toSeconds(lifespan))) {
- // Looks like I've lost the leadership.
setLeader(false);
+ } else {
+ version = cache.getWithMetadata(lockKey).getVersion();
+ LOGGER.debug("Lock refreshed key={} with new version={}", lockKey, version);
}
}
@@ -495,14 +497,14 @@ public class InfinispanRoutePolicy extends RoutePolicySupport implements CamelCo
}
@ClientCacheEntryRemoved
- public void onCacheEntryRemoved(ClientCacheEntryRemovedEvent<Object> event) {
+ public void onCacheEntryRemoved(ClientCacheEntryRemovedEvent<String> event) {
if (ObjectHelper.equal(lockKey, event.getKey())) {
run();
}
}
@ClientCacheEntryExpired
- public void onCacheEntryExpired(ClientCacheEntryExpiredEvent<Object> event) {
+ public void onCacheEntryExpired(ClientCacheEntryExpiredEvent<String> event) {
if (ObjectHelper.equal(lockKey, event.getKey())) {
run();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ba468929/components/camel-infinispan/src/test/resources/log4j2.properties
----------------------------------------------------------------------
diff --git a/components/camel-infinispan/src/test/resources/log4j2.properties b/components/camel-infinispan/src/test/resources/log4j2.properties
index 7c25ddd..4b09a1d 100644
--- a/components/camel-infinispan/src/test/resources/log4j2.properties
+++ b/components/camel-infinispan/src/test/resources/log4j2.properties
@@ -26,3 +26,6 @@ appender.out.layout.type = PatternLayout
appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
rootLogger.level = INFO
rootLogger.appenderRef.file.ref = file
+
+logger.infinispan.name = org.apache.camel.component.infinispan
+logger.infinispan.level = DEBUG