Details
-
Bug
-
Resolution: Done
-
Blocker
-
5.1.0.CR4
-
None
Description
With ISPN 5.1.0.CR4, I face exceptions of the following type:
17.01.2012 11:56:53 *ERROR* [main] InvocationContextInterceptor: ISPN000136: Execution error (InvocationContextInterceptor.java, line 123) java.lang.IllegalArgumentException: Comparison method violates its general contract! at org.infinispan.util.TimSort.mergeHi(TimSort.java:872) at org.infinispan.util.TimSort.mergeAt(TimSort.java:489) at org.infinispan.util.TimSort.mergeForceCollapse(TimSort.java:430) at org.infinispan.util.TimSort.sort(TimSort.java:227) at org.infinispan.util.TimSort.sort(TimSort.java:177) at org.infinispan.interceptors.locking.OptimisticLockingInterceptor.sort(OptimisticLockingInterceptor.java:252) at org.infinispan.interceptors.locking.OptimisticLockingInterceptor.visitPrepareCommand(OptimisticLockingInterceptor.java:94) at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:131) at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) at org.infinispan.interceptors.NotificationInterceptor.visitPrepareCommand(NotificationInterceptor.java:58) at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:131) at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) at org.infinispan.interceptors.TxInterceptor.visitPrepareCommand(TxInterceptor.java:106) at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:131) at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:130) at org.infinispan.commands.AbstractVisitor.visitPrepareCommand(AbstractVisitor.java:113) at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:131) at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:116) at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:76) at org.infinispan.commands.AbstractVisitor.visitPrepareCommand(AbstractVisitor.java:113) at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:131) at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:345) at org.infinispan.transaction.TransactionCoordinator.prepare(TransactionCoordinator.java:129) at org.infinispan.transaction.TransactionCoordinator.prepare(TransactionCoordinator.java:111) at org.infinispan.transaction.xa.TransactionXaAdapter.commit(TransactionXaAdapter.java:122) at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelOnePhaseCommit(XAResourceRecord.java:811) at com.arjuna.ats.arjuna.coordinator.BasicAction.onePhaseCommit(BasicAction.java:2656) at com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1784) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:94) at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177) at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1423) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:137)
After a deeper investigation, it seems to be due to the implementation of keyComparator used to sort the keys based on MurmurHash3. Please find as attached file a test case that shows the issue.