[infinispan-issues] [JBoss JIRA] (ISPN-4958) DefaultCacheManager startCaches do not restart stopped caches
Mathieu Lachance (JIRA)
issues at jboss.org
Mon Nov 10 08:33:29 EST 2014
[ https://issues.jboss.org/browse/ISPN-4958?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mathieu Lachance updated ISPN-4958:
-----------------------------------
Description:
using DefaultCacheManager#startCaches do not start a previously stopped cache:
{code}
CacheManager cacheManager = new DefaultCacheManager();
cacheManager.startCaches("abc");
Cache cache = cacheManager.getCache("abc");
cache.stop();
cacheManager.startCaches("abc");
cache = cacheManager.getCache("abc);
cache.get("def"); // trow IllegalStateException
{code}
{quote}
java.lang.IllegalStateException: Cache 'abc' is in 'TERMINATED' state and so it does not accept new invocations. Either restart it or recreate the cache container.
at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:110)
at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:92)
at org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:104)
at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:58)
at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343)
at org.infinispan.CacheImpl.get(CacheImpl.java:289)
at org.infinispan.CacheImpl.get(CacheImpl.java:281)
{quote}
I think the issue is in the thread that will call the {{createCache(cacheName)}}.
By looking at the 7.0.0.Final source code:
{code}
String threadName = "CacheStartThread," + globalConfiguration.transport().nodeName() + "," + cacheName;
Thread thread = new Thread(threadName) {
@Override
public void run() {
try {
createCache(cacheName);
} catch (RuntimeException e) {
exception.set(e);
} catch (Throwable t) {
exception.set(new RuntimeException(t));
}
}
};
{code}
I think we should do instead the following:
{code}
String threadName = "CacheStartThread," + globalConfiguration.transport().nodeName() + "," + cacheName;
Thread thread = new Thread(threadName) {
@Override
public void run() {
try {
Cache cache = getCache(cacheName, false);
if (cache == null) {
createCache(cacheName);
}
else {
if (!ComponentStatus.RUNNING.equals(cache.getStatus())) {
cache.start();
}
}
} catch (RuntimeException e) {
exception.set(e);
} catch (Throwable t) {
exception.set(new RuntimeException(t));
}
}
};
{code}
was:
using DefaultCacheManager#startCaches do not start a previously stopped cache:
{code}
CacheManager cacheManager = new DefaultCacheManager();
cacheManager.startCaches("abc");
Cache cache = cacheManager.getCache("abc");
cache.stop();
cacheManager.startCaches("abc");
cache = cacheManager.getCache("abc);
cache.get("def"); // trow IllegalStateException
{code}
{quote}
java.lang.IllegalStateException: Cache 'XXXX' is in 'TERMINATED' state and so it does not accept new invocations. Either restart it or recreate the cache container.
at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:110)
at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:92)
at org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:104)
at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:58)
at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343)
at org.infinispan.CacheImpl.get(CacheImpl.java:289)
at org.infinispan.CacheImpl.get(CacheImpl.java:281)
{quote}
I think the issue is in the thread that will call the {{createCache(cacheName)}}.
By looking at the 7.0.0.Final source code:
{code}
String threadName = "CacheStartThread," + globalConfiguration.transport().nodeName() + "," + cacheName;
Thread thread = new Thread(threadName) {
@Override
public void run() {
try {
createCache(cacheName);
} catch (RuntimeException e) {
exception.set(e);
} catch (Throwable t) {
exception.set(new RuntimeException(t));
}
}
};
{code}
I think we should do instead the following:
{code}
String threadName = "CacheStartThread," + globalConfiguration.transport().nodeName() + "," + cacheName;
Thread thread = new Thread(threadName) {
@Override
public void run() {
try {
Cache cache = getCache(cacheName, false);
if (cache == null) {
createCache(cacheName);
}
else {
if (!ComponentStatus.RUNNING.equals(cache.getStatus())) {
cache.start();
}
}
} catch (RuntimeException e) {
exception.set(e);
} catch (Throwable t) {
exception.set(new RuntimeException(t));
}
}
};
{code}
> DefaultCacheManager startCaches do not restart stopped caches
> -------------------------------------------------------------
>
> Key: ISPN-4958
> URL: https://issues.jboss.org/browse/ISPN-4958
> Project: Infinispan
> Issue Type: Feature Request
> Components: Core
> Affects Versions: 5.2.7.Final, 7.0.0.Final
> Reporter: Mathieu Lachance
>
> using DefaultCacheManager#startCaches do not start a previously stopped cache:
> {code}
> CacheManager cacheManager = new DefaultCacheManager();
> cacheManager.startCaches("abc");
> Cache cache = cacheManager.getCache("abc");
> cache.stop();
> cacheManager.startCaches("abc");
> cache = cacheManager.getCache("abc);
> cache.get("def"); // trow IllegalStateException
> {code}
> {quote}
> java.lang.IllegalStateException: Cache 'abc' is in 'TERMINATED' state and so it does not accept new invocations. Either restart it or recreate the cache container.
> at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:110)
> at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:92)
> at org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:104)
> at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:58)
> at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343)
> at org.infinispan.CacheImpl.get(CacheImpl.java:289)
> at org.infinispan.CacheImpl.get(CacheImpl.java:281)
> {quote}
> I think the issue is in the thread that will call the {{createCache(cacheName)}}.
> By looking at the 7.0.0.Final source code:
> {code}
> String threadName = "CacheStartThread," + globalConfiguration.transport().nodeName() + "," + cacheName;
> Thread thread = new Thread(threadName) {
> @Override
> public void run() {
> try {
> createCache(cacheName);
> } catch (RuntimeException e) {
> exception.set(e);
> } catch (Throwable t) {
> exception.set(new RuntimeException(t));
> }
> }
> };
> {code}
> I think we should do instead the following:
> {code}
> String threadName = "CacheStartThread," + globalConfiguration.transport().nodeName() + "," + cacheName;
> Thread thread = new Thread(threadName) {
> @Override
> public void run() {
> try {
> Cache cache = getCache(cacheName, false);
> if (cache == null) {
> createCache(cacheName);
> }
> else {
> if (!ComponentStatus.RUNNING.equals(cache.getStatus())) {
> cache.start();
> }
> }
> } catch (RuntimeException e) {
> exception.set(e);
> } catch (Throwable t) {
> exception.set(new RuntimeException(t));
> }
> }
> };
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.8#6338)
More information about the infinispan-issues
mailing list