ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Zhengqingzheng <zhengqingzh...@huawei.com>
Subject asynchronized cache put cause cache get blocked problem
Date Wed, 24 Aug 2016 07:32:58 GMT
Hi there,
When running performance test, our system always blocked at "GridFutureAdapter.get0"method.
Here is the log info:
""busReqExecutor-thread-99" #818 daemon prio=5 os_prio=0 tid=0x00007f972ba3c000 nid=0x1f5a5
waiting on condition [0x00007f96f9e3d000]
   java.lang.Thread.State: WAITING (parking)
         at sun.misc.Unsafe.park(Native Method)
         - parking to wait for  <0x00000007a164a690> (a org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture)
         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
         at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
         at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
         at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
         at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:159)
         at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:117)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.get(GridDhtAtomicCache.java:347)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4783)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1395)
         at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.get(IgniteCacheProxy.java:956)
         at com.huawei.soa.daf.impl.DafContextImpl.checkObjIsExist(DafContextImpl.java:2348)
 ---- step 2
         at com.huawei.soa.daf.impl.DafContextImpl.saveOrUpdateData(DafContextImpl.java:1896)
   --step 1
         at com.huawei.soa.daf.impl.DafContextImpl.batchSaveCreatedVo(DafContextImpl.java:1555)
         at com.huawei.soa.daf.impl.DafContextImpl.saveCreatedVo(DafContextImpl.java:1482)
         at com.huawei.soa.daf.impl.DafContextImpl.commit(DafContextImpl.java:688)
         ..."
In the step1, SaveOrUpdateData method will call putAll methods for different caches using
.withAysnc(). During this time , it seems that all async cache is locked for put operations.
However in step 2 checkObjIsExist() method, I need to call cache.get(key) method to verify
some other data (keys, values). But due to the first step, the cache is locked.
All the get operations are queued and wait for async cache put operations to complete.
Is there any way I can call get method without async put blocking?

Please see press log for details.

Best regards,
Kevin





Mime
View raw message