You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Semen Boikov (JIRA)" <ji...@apache.org> on 2016/01/15 13:20:39 UTC

[jira] [Resolved] (IGNITE-2386) affinityCall() execution hangs

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

Semen Boikov resolved IGNITE-2386.
----------------------------------
    Resolution: Fixed

Hang was possible in scenario:
- two nodes (or two threads) try to create cache concurrently, this triggers two customer discovery message
- GridDiscoveryManager on each discovery message increments minor topology version, but GridCacheProcessor ignores second message (since cache was already created) and does not initiate partition exchange for it
- as result GridDiscoveryManager has invalid AffinityTopology version, and any attempt to use this version causes hang

Fixed this to do not increment minor topology version if exchange is not initiated (commit d881417).

> affinityCall() execution hangs
> ------------------------------
>
>                 Key: IGNITE-2386
>                 URL: https://issues.apache.org/jira/browse/IGNITE-2386
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>            Reporter: Valentin Kulichenko
>            Assignee: Semen Boikov
>            Priority: Critical
>             Fix For: 1.6
>
>         Attachments: AffinityTest.java
>
>
> Test reproducing the issue is attached. affinityCall() invocation hangs with the following trace:
> {noformat}
> "main" prio=5 tid=0x00007f8b1b001800 nid=0x1703 waiting on condition [0x0000700000218000]
>    java.lang.Thread.State: WAITING (parking)
> 	at sun.misc.Unsafe.park(Native Method)
> 	- parking to wait for  <0x00000007ab170eb8> (a org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentCache$AffinityReadyFuture)
> 	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303)
> 	at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:157)
> 	at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:115)
> 	at org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentCache.awaitTopologyVersion(GridAffinityAssignmentCache.java:477)
> 	at org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentCache.cachedAffinity(GridAffinityAssignmentCache.java:435)
> 	at org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentCache.assignments(GridAffinityAssignmentCache.java:306)
> 	at org.apache.ignite.internal.processors.cache.GridCacheAffinityManager.assignments(GridCacheAffinityManager.java:159)
> 	at org.apache.ignite.internal.processors.affinity.GridAffinityProcessor.affinityCache(GridAffinityProcessor.java:333)
> 	at org.apache.ignite.internal.processors.affinity.GridAffinityProcessor.affinityKey(GridAffinityProcessor.java:238)
> 	at org.apache.ignite.internal.processors.closure.GridClosureProcessor.affinityCall(GridClosureProcessor.java:442)
> 	at org.apache.ignite.internal.IgniteComputeImpl.affinityCall(IgniteComputeImpl.java:130)
> 	at AffinityTest.main(AffinityTest.java:42)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)