Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-565

SKIP_LOCKING with cache loader and calling remove results in java.lang.ClassCastException

    XMLWordPrintable

Details

    • Hide

      Create Cache with cache loader and enable innvocation batching
      Put value into cache
      Remove value from cache using getAdvancedCache()..withFlags(Flag.SKIP_LOCKING).remove()

      Show
      Create Cache with cache loader and enable innvocation batching Put value into cache Remove value from cache using getAdvancedCache()..withFlags(Flag.SKIP_LOCKING).remove()

    Description

      When using SKIP_LOCKING and removing from Cache with a cache loader a ClassCaseException is thrown

      java.lang.ClassCastException: org.infinispan.container.entries.ImmortalCacheEntry cannot be cast to org.infinispan.container.entries.MVCCEntry
      at org.infinispan.commands.write.RemoveCommand.perform(RemoveCommand.java:74)
      at org.infinispan.interceptors.CallInterceptor.handleDefault(CallInterceptor.java:72)
      at org.infinispan.commands.AbstractVisitor.visitRemoveCommand(AbstractVisitor.java:61)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
      at org.infinispan.interceptors.LockingInterceptor.visitRemoveCommand(LockingInterceptor.java:221)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
      at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:132)
      at org.infinispan.commands.AbstractVisitor.visitRemoveCommand(AbstractVisitor.java:61)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
      at org.infinispan.interceptors.CacheLoaderInterceptor.visitRemoveCommand(CacheLoaderInterceptor.java:103)
      at org.infinispan.interceptors.ActivationInterceptor.visitRemoveCommand(ActivationInterceptor.java:44)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
      at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:132)
      at org.infinispan.commands.AbstractVisitor.visitRemoveCommand(AbstractVisitor.java:61)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
      at org.infinispan.interceptors.TxInterceptor.enlistWriteAndInvokeNext(TxInterceptor.java:183)
      at org.infinispan.interceptors.TxInterceptor.visitRemoveCommand(TxInterceptor.java:137)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
      at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:58)
      at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:39)
      at org.infinispan.commands.AbstractVisitor.visitRemoveCommand(AbstractVisitor.java:61)
      at org.infinispan.commands.write.RemoveCommand.acceptVisitor(RemoveCommand.java:70)
      at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:271)
      at org.infinispan.CacheDelegate.remove(CacheDelegate.java:207)
      at uk.co.cosmic_solutions.mdtest2.infinispan.test.InfinispanTest3.runTest(InfinispanTest3.java:87)

      This issue was first encountered while using Infinispan as a Lucene store via the InfinispanDirectory as that module makes extensive use of Flag.SKIP_LOCKING, attempting to use Directory.copy on cache with cacheloader produced this error

      The issue appears to relate to org.infinispan.container.EntryFactoryImpl#wrapEntryForWriting which doesn't appear to wrap the entry if it exists in the context when locking is skipped, this results in an ImmortalCacheEntry being returned in the org.infinispan.commands.write.RemoveCommand#perform

      Test case attached

      Attachments

        Activity

          People

            rh-ee-galder Galder ZamarreƱo
            paulnardone Paul Nardone (Inactive)
            Votes:
            1 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: