You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geode.apache.org by "Anthony Baker (JIRA)" <ji...@apache.org> on 2016/12/28 00:01:58 UTC

[jira] [Updated] (GEODE-2228) FutureResult.get() does not check for cancellation prior to waiting for a result

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

Anthony Baker updated GEODE-2228:
---------------------------------
    Fix Version/s: 1.1.0

> FutureResult.get()  does not check for cancellation prior to waiting for a result
> ---------------------------------------------------------------------------------
>
>                 Key: GEODE-2228
>                 URL: https://issues.apache.org/jira/browse/GEODE-2228
>             Project: Geode
>          Issue Type: Bug
>          Components: distributed lock service
>            Reporter: Bruce Schuchardt
>            Assignee: Bruce Schuchardt
>             Fix For: 1.1.0
>
>
> A system was found hung with a thread in this state:
> {noformat}
> vm_0_bridge1_w1-gst-dev23_17330:ServerConnection on port 21566 Thread 352 ID=861 state=TIMED_WAITING
> 	waiting to lock <ja...@41c71f7d>
> 	at sun.misc.Unsafe.park(Native Method)
> 	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1033)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)
> 	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:282)
> 	at com.gemstone.gemfire.internal.util.concurrent.StoppableCountDownLatch.await(StoppableCountDownLatch.java:55)
> 	at com.gemstone.gemfire.internal.util.concurrent.FutureResult.get(FutureResult.java:54)
> 	at com.gemstone.gemfire.distributed.internal.locks.DLockService.waitForLockGrantorFutureResult(DLockService.java:774)
> 	at com.gemstone.gemfire.distributed.internal.locks.DLockService.notLockGrantorId(DLockService.java:837)
> 	at com.gemstone.gemfire.distributed.internal.locks.DLockService.releaseTryLocks(DLockService.java:2216)
> 	at com.gemstone.gemfire.internal.cache.locks.TXLockServiceImpl.release(TXLockServiceImpl.java:222)
> 	locked <ja...@34bbf1cf>
> 	at com.gemstone.gemfire.internal.cache.TXLockRequest.releaseDistributed(TXLockRequest.java:91)
> 	at com.gemstone.gemfire.internal.cache.TXLockRequest.cleanup(TXLockRequest.java:120)
> 	at com.gemstone.gemfire.internal.cache.TXState.cleanup(TXState.java:730)
> 	at com.gemstone.gemfire.internal.cache.TXState.commit(TXState.java:447)
> 	at com.gemstone.gemfire.internal.cache.TXStateProxyImpl.commit(TXStateProxyImpl.java:234)
> 	at com.gemstone.gemfire.internal.cache.TXManagerImpl.commit(TXManagerImpl.java:325)
> {noformat}
> No other threads were trying to find the lock grantor and further testing showed that the FutureResult that this thread was using must have been cancelled by another thread.  I wrote a unit test and found that FutureResult is not respecting its cancelled state in its get() methods.



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