Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Infinispan cache.values ConcurrentModificationException_Java_Caching_Concurrency_Infinispan - Fatal编程技术网

Java Infinispan cache.values ConcurrentModificationException

Java Infinispan cache.values ConcurrentModificationException,java,caching,concurrency,infinispan,Java,Caching,Concurrency,Infinispan,我们使用2个infinispan实例,带有一个文件存储(每个实例都有自己的文件存储位置,只是为了澄清一下),复制是CacheMode.REPL_ASYNC。inifinispan(与JBOSS捆绑)的版本是6.0.2.G1 代码可以正常运行一段时间,但现在我们在缓存中存储了数千个密钥 代码在服务器启动时只运行org.infinispan.CacheImpl.values()一次,因为它需要计算特定类型的所有键 昨天,第二台服务器没有启动(只有一台运行正常),它在迭代期间抛出ConcurrentM

我们使用2个infinispan实例,带有一个文件存储(每个实例都有自己的文件存储位置,只是为了澄清一下),复制是CacheMode.REPL_ASYNC。inifinispan(与JBOSS捆绑)的版本是6.0.2.G1

代码可以正常运行一段时间,但现在我们在缓存中存储了数千个密钥

代码在服务器启动时只运行org.infinispan.CacheImpl.values()一次,因为它需要计算特定类型的所有键

昨天,第二台服务器没有启动(只有一台运行正常),它在迭代期间抛出ConcurrentModificationException,我想:

Caused by: org.infinispan.persistence.spi.PersistenceException: Execution exception!
    at org.infinispan.persistence.file.SingleFileStore.process(SingleFileStore.java:487) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.persistence.async.AdvancedAsyncCacheLoader.loadAllKeys(AdvancedAsyncCacheLoader.java:43) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.persistence.async.AdvancedAsyncCacheLoader.process(AdvancedAsyncCacheLoader.java:78) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.persistence.manager.PersistenceManagerImpl.processOnAllStores(PersistenceManagerImpl.java:414) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.CacheLoaderInterceptor.visitValuesCommand(CacheLoaderInterceptor.java:206) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:112) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:112) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:112) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:112) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.statetransfer.StateTransferInterceptor.handleDefault(StateTransferInterceptor.java:249) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:112) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:112) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:98) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:110) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:73) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.AbstractVisitor.visitValuesCommand(AbstractVisitor.java:84) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.commands.read.ValuesCommand.acceptVisitor(ValuesCommand.java:40) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:333) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.CacheImpl.values(CacheImpl.java:467) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.CacheImpl.values(CacheImpl.java:460) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at MY CODE CALLING cache.values()
Caused by: java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:233) [rt.jar:1.6.0]
    at java.util.concurrent.FutureTask.get(FutureTask.java:94) [rt.jar:1.6.0]
    at org.infinispan.executors.ExecutorAllCompletionService.pollUntilEmpty(ExecutorAllCompletionService.java:48) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.executors.ExecutorAllCompletionService.submit(ExecutorAllCompletionService.java:32) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.persistence.file.SingleFileStore.process(SingleFileStore.java:469) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    ... 99 more
Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$AbstractMapIterator.checkConcurrentMod(HashMap.java:193) [java.util.jar:]
    at java.util.HashMap$AbstractMapIterator.makeNext(HashMap.java:198) [java.util.jar:]
    at java.util.HashMap$KeyIterator.next(HashMap.java:271) [java.util.jar:]
    at java.util.HashMap.analyzeMap(HashMap.java:800) [java.util.jar:]
    at java.util.HashMap.rehash(HashMap.java:786) [java.util.jar:]
    at java.util.HashMap.rehash(HashMap.java:819) [java.util.jar:]
    at java.util.HashMap.putImpl(HashMap.java:702) [java.util.jar:]
    at java.util.HashMap.put(HashMap.java:680) [java.util.jar:]
    at java.util.HashSet.add(HashSet.java:102) [java.util.jar:]
    at org.infinispan.persistence.async.AdvancedAsyncCacheLoader$1.processEntry(AdvancedAsyncCacheLoader.java:46) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.persistence.file.SingleFileStore$1.call(SingleFileStore.java:475) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at org.infinispan.persistence.file.SingleFileStore$1.call(SingleFileStore.java:469) [infinispan-core-6.0.2.G1.Final.jar:6.0.2.Final]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314) [rt.jar:1.6.0]
    at java.util.concurrent.FutureTask.run(FutureTask.java:149) [rt.jar:1.6.0]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:450) [rt.jar:1.6.0]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314) [rt.jar:1.6.0]
    at java.util.concurrent.FutureTask.run(FutureTask.java:149) [rt.jar:1.6.0]
    ... 3 more
如果关闭文件存储,只保留内存存储,则不会发生错误。我不知道Infinispan拥有该版本或文件存储是否有任何问题。如果缓存中已经有很多密钥,并且服务器是集群的,那么(尽管文档中没有提到)迭代所有密钥可能会有一些问题


实际上我不知道如何诊断这个问题,infinispan上的票证确实显示了其他人有这样的问题,但不仅仅是在调用cache.values()时。可能有什么问题?有没有更安全的方法来迭代缓存?

我想在迭代过程运行时会发生一些复制。内存存储速度快得多,因此不会发生这种情况的原因是,当您在缓存上迭代时,复制添加新数据的机会较小。@john16384这也是我的猜测,但我不认为在实现方法值()时没有考虑到这一点,该方法的infinispan javadoc也没有提到任何危险,它看起来像是你在打。编辑:你能更新到新版本吗?Infinispan 9上个月发布了。@pruivo谢谢!我找不到那张票。我认为我们别无选择,只能禁用文件存储,直到我们准备将infinispan更新为8.2+