[ https://issues.apache.org/jira/browse/IGNITE-1275?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Semen Boikov reassigned IGNITE-1275: ------------------------------------ Assignee: Semen Boikov (was: Alexey Goncharuk) > 'Get' from marshaller cache hangs on topology change > ---------------------------------------------------- > > Key: IGNITE-1275 > URL: https://issues.apache.org/jira/browse/IGNITE-1275 > Project: Ignite > Issue Type: Bug > Components: cache > Reporter: Semen Boikov > Assignee: Semen Boikov > Priority: Critical > Fix For: ignite-1.4 > > > Observed this hang on TC in test > IgniteCachePutRetryTransactionalSelfTest.testExplicitTransactionRetries: > {noformat} > [11:27:17] : [org.apache.ignite:ignite-core] Thread > [name="ignite-#91721%sys-dht.IgniteCachePutRetryTransactionalSelfTest2%", > id=115833, state=WAITING, blockCnt=0, waitCnt=3] > [11:27:17] : [org.apache.ignite:ignite-core] Lock > [object=o.a.i.i.processors.cache.distributed.dht.GridPartitionedGetFuture@4a555b67, > ownerName=null, ownerId=-1] > [11:27:17] : [org.apache.ignite:ignite-core] at > sun.misc.Unsafe.park(Native Method) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.util.future.GridFutureAdapter.get(GridFutureAdapter.java:115) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4404) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1448) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.MarshallerContextImpl.className(MarshallerContextImpl.java:139) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.MarshallerContextAdapter.getClass(MarshallerContextAdapter.java:166) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor(OptimizedMarshallerUtils.java:252) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedObjectInputStream.readObjectOverride(OptimizedObjectInputStream.java:246) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.io.ObjectInputStream.readObject(ObjectInputStream.java:364) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.lang.IgniteBiTuple.readExternal(IgniteBiTuple.java:268) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedObjectInputStream.readExternalizable(OptimizedObjectInputStream.java:451) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedClassDescriptor.read(OptimizedClassDescriptor.java:746) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedObjectInputStream.readObjectOverride(OptimizedObjectInputStream.java:252) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.io.ObjectInputStream.readObject(ObjectInputStream.java:364) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedObjectInputStream.readLinkedList(OptimizedObjectInputStream.java:610) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedObjectInputStream.readObjectOverride(OptimizedObjectInputStream.java:227) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.io.ObjectInputStream.readObject(ObjectInputStream.java:364) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.marshaller.optimized.OptimizedMarshaller.unmarshal(OptimizedMarshaller.java:236) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.transactions.IgniteTxEntry.unmarshal(IgniteTxEntry.java:749) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheMessage.unmarshalTx(GridCacheMessage.java:367) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.distributed.GridDistributedTxPrepareRequest.finishUnmarshal(GridDistributedTxPrepareRequest.java:300) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.distributed.dht.GridDhtTxPrepareRequest.finishUnmarshal(GridDhtTxPrepareRequest.java:293) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheIoManager.unmarshall(GridCacheIoManager.java:973) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:229) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:158) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheIoManager.access$000(GridCacheIoManager.java:48) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:127) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:764) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.managers.communication.GridIoManager.access$1500(GridIoManager.java:59) > [11:27:17] : [org.apache.ignite:ignite-core] at > o.a.i.i.managers.communication.GridIoManager$5.run(GridIoManager.java:727) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > [11:27:17] : [org.apache.ignite:ignite-core] at > java.lang.Thread.run(Thread.java:722) > {noformat} > GridPartitionedGetFuture hangs when GridDistributedTxPrepareRequest is > unmarshalled. Looks like for marshaller cache we need implement special 'get' > mode which should not wait for topology futures (similar to 'tryPutIfAbsent' > used for put in marshaller cache). > Found one more issue debugging this failure: test uses only server nodes and > since marshaller cache uses FULL_SYNC mode, value in marshaller cache should > be available locally and there should not be necessary to create > GridPartitionedGetFuture. But it seems FULL_SYNC mode is broken for > 'putIfAbsent' in atomic cache. > If two threads do 'putIfAbsent' concurrenly: > - thread1 on primary node executes 'innerUpdate', creates entry, sets value > and going to send messages to backups > - thread2 on primary executes 'innerUpdate', filter fails since value already > set by thread1, when filter fails backups are not updated, thread2 exits from > 'putIfAbsent' but thread1 did not update backups yet > Also need to check case when GridDhtAtomicUpdateFuture is completed with > error during node stop, looks like error is ignored in > GridDhtAtomicUpdateFuture.onDone. -- This message was sent by Atlassian JIRA (v6.3.4#6332)