ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Semen Boikov (JIRA)" <j...@apache.org>
Subject [jira] [Closed] (IGNITE-1275) 'Get' from marshaller cache hangs on topology change
Date Tue, 08 Sep 2015 07:46:46 GMT

     [ https://issues.apache.org/jira/browse/IGNITE-1275?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Semen Boikov closed IGNITE-1275.
--------------------------------
    Assignee:     (was: Semen Boikov)

> 'Get' from marshaller cache hangs on topology change
> ----------------------------------------------------
>
>                 Key: IGNITE-1275
>                 URL: https://issues.apache.org/jira/browse/IGNITE-1275
>             Project: Ignite
>          Issue Type: Sub-task
>          Components: cache
>            Reporter: 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)

Mime
View raw message