2 Replies Latest reply on Jul 6, 2015 11:14 AM by wesssel

    Modshape 3.8.1 to Modeshape 4.3.0 migration

    folch

      Hi guys,

       

      we are evaluating what are the benefits/cons to upgrade Modeshape to the latest stable version (currently 4.3.0) and doing a prototype we've found couple of problems, mainly related to Infinispan eviction.

       

       

      1. Issue about ClassCastException mentioned in https://developer.jboss.org/thread/260372.
        To bypass the problem we have to:
        • Avoid using LIRS.
        • Disable eviction (not really an option for production I think)
        • Upgrade Infinispan version to 7.2.3 or wait Modeshape 4.4
      2. Issue about Nullpointer in Infinispan when evaluating eviction. Our test is trying to upload a file in paralel (20 threads) into the repository. From time to time fails with a Nullpointer.
        Even if we try the following we continue seing the issue.:
        • Using LRU eviction
        • Using NONE as eviction mechanism.
        • Don't adding the eviction tag.

       

      This is the Stacktrace (using Modeshape 4.3.0.Final and Infinispan 7.2.3:

       

      Jul 06, 2015 2:17:30 PM org.infinispan.interceptors.InvocationContextInterceptor handleAll

      ERROR: ISPN000136: Execution error

      java.lang.NullPointerException

        at org.infinispan.commons.util.concurrent.jdk8backported.BoundedEquivalentConcurrentHashMapV8$LIRSEvictionPolicy.findIfEntriesNeedEvicting(BoundedEquivalentConcurrentHashMapV8.java:1397)

        at org.infinispan.commons.util.concurrent.jdk8backported.BoundedEquivalentConcurrentHashMapV8.compute(BoundedEquivalentConcurrentHashMapV8.java:3487)

        at org.infinispan.container.DefaultDataContainer$BoundedEquivalentConcurrentExtendedMap.putAndActivate(DefaultDataContainer.java:556)

        at org.infinispan.container.DefaultDataContainer.put(DefaultDataContainer.java:192)

        at org.infinispan.container.entries.ReadCommittedEntry.commit(ReadCommittedEntry.java:168)

        at org.infinispan.statetransfer.CommitManager.commit(CommitManager.java:98)

        at org.infinispan.interceptors.locking.ClusteringDependentLogic$LocalLogic.commitSingleEntry(ClusteringDependentLogic.java:255)

        at org.infinispan.interceptors.locking.ClusteringDependentLogic$AbstractClusteringDependentLogic.commitEntry(ClusteringDependentLogic.java:108)

        at org.infinispan.interceptors.EntryWrappingInterceptor.commitContextEntry(EntryWrappingInterceptor.java:371)

        at org.infinispan.interceptors.EntryWrappingInterceptor.commitEntryIfNeeded(EntryWrappingInterceptor.java:549)

        at org.infinispan.interceptors.EntryWrappingInterceptor.commitContextEntries(EntryWrappingInterceptor.java:348)

        at org.infinispan.interceptors.EntryWrappingInterceptor.invokeNextAndApplyChanges(EntryWrappingInterceptor.java:422)

        at org.infinispan.interceptors.EntryWrappingInterceptor.setSkipRemoteGetsAndInvokeNextForDataCommand(EntryWrappingInterceptor.java:453)

        at org.infinispan.interceptors.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:195)

        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)

        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)

        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitNonTxDataWriteCommand(AbstractLockingInterceptor.java:88)

        at org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor.visitDataWriteCommand(NonTransactionalLockingInterceptor.java:40)

        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:55)

        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)

        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)

        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:111)

        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:44)

        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)

        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)

        at org.infinispan.interceptors.CacheMgmtInterceptor.updateStoreStatistics(CacheMgmtInterceptor.java:191)

        at org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:177)

        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)

        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)

        at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:102)

        at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:71)

        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:44)

        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)

        at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:336)

        at org.infinispan.cache.impl.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1617)

        at org.infinispan.cache.impl.CacheImpl.putIfAbsentInternal(CacheImpl.java:1122)

        at org.infinispan.cache.impl.CacheImpl.putIfAbsent(CacheImpl.java:1112)

        at org.infinispan.cache.impl.CacheImpl.putIfAbsent(CacheImpl.java:1717)

        at org.infinispan.cache.impl.CacheImpl.putIfAbsent(CacheImpl.java:283)

        at org.modeshape.jcr.cache.document.WorkspaceCache.getNode(WorkspaceCache.java:244)

        at org.modeshape.jcr.cache.document.NodeCacheIterator.nextNode(NodeCacheIterator.java:103)

        at org.modeshape.jcr.cache.document.NodeCacheIterator.hasNext(NodeCacheIterator.java:70)

        at org.modeshape.jcr.query.NodeSequence$16.hasNext(NodeSequence.java:1450)

        at org.modeshape.jcr.query.NodeSequence$23.findNext(NodeSequence.java:1863)

        at org.modeshape.jcr.query.NodeSequence$23.hasNext(NodeSequence.java:1849)

        at org.modeshape.jcr.query.NodeSequence$23.findNext(NodeSequence.java:1863)

        at org.modeshape.jcr.query.NodeSequence$23.hasNext(NodeSequence.java:1849)

        at org.modeshape.jcr.query.NodeSequence$23.findNext(NodeSequence.java:1863)

        at org.modeshape.jcr.query.NodeSequence$23.hasNext(NodeSequence.java:1849)

        at org.modeshape.jcr.query.NodeSequence$SingleWidthBatch.<init>(NodeSequence.java:1920)

        at org.modeshape.jcr.query.NodeSequence.copy(NodeSequence.java:1907)

        at org.modeshape.jcr.query.engine.process.RestartableSequence.loadBatch(RestartableSequence.java:213)

        at org.modeshape.jcr.query.engine.process.RestartableSequence$1.nextBatch(RestartableSequence.java:92)

        at org.modeshape.jcr.query.engine.process.RestartableSequence.nextBatch(RestartableSequence.java:119)

        at org.modeshape.jcr.query.JcrQueryResult$QueryResultIterator.findNextBatch(JcrQueryResult.java:257)

        at org.modeshape.jcr.query.JcrQueryResult$QueryResultIterator.hasNext(JcrQueryResult.java:241)

        at com.hp.exstream.hes.repository.impl.ApplicationRepository.searchApplications(ApplicationRepository.java:99)
        ...

       

      What can we do? As with this issue we don't want to upgrade to Modeshape 4.3.0 as currently Modeshape 3.8.1 is pretty stable.

       

      Thanks in advance.

        • 1. Re: Modshape 3.8.1 to Modeshape 4.3.0 migration
          hchiorean

          What can we do? As with this issue we don't want to upgrade to Modeshape 4.3.0 as currently Modeshape 3.8.1 is pretty stable.

          If you're already decided that you don't want to upgrade, I don't understand what the question is.

           

          Both issues described above are about Infinispan, not ModeShape. Both have workarounds: in the LIRS eviction bug you can choose to use another eviction algorithm and configure Infinispan as such (e.g. LRU). The ClassCastException issue is a bug in the Infinispan AS kit, which we've opened and until Infinispan decide to fix their artifact, there's nothing ModeShape can do (see https://issues.jboss.org/browse/MODE-2478 and the linked Infinispan issue). The workaround for this is to add the correct version of jboss-marshalling artifacts in AS - either under a separate module slot or inside the Infinispan main module and then update the module.xml accordingly - note that the ClassCastException is only specific to running in Wildfly 8.x.

           

          You can also use Infinispan 7.2.3 (and replace Infinispan 7.2.1) since the APIs are compatible. ModeShape 4.3 will work just fine with any Infinispan 7.x version it finds in the classpath.

          • 2. Re: Modshape 3.8.1 to Modeshape 4.3.0 migration
            wesssel

            I would also looking into the indexing performance. Modeshape 4.x has completely different indexing than 3.8.1.