Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-11657

Deadlock on Cache.putAll(Map<KV>)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Duplicate
    • 2.5, 2.7
    • 2.10
    • cache
    • None
    • Docs Required

    Description

      We have been seeing consistent Deadlocks with Ignite Latest versions on Cache.putAll, as putAll tries to lock all the keys before updating them.
       
      As per the documentation (below) putAll should be Equivalent to individual iterative puts and these individual puts should behave atomically but not the entire pull, But the error logs pasted further below seem to suggest otherwise
       
      putAll Documentation

      void javax.cache.Cache.putAll(Map<? extends K, ? extends V> map)

      Copies all of the entries from the specified map to the Cache.
      The effect of this call is equivalent to that of calling put(k, v) on this cache once for each mapping from key k to value v in the specified map.
      The order in which the individual puts occur is undefined.
      The behavior of this operation is undefined if entries in the cache corresponding to entries in the map are modified or removed while this operation is in progress. or if map is modified while the operation is in progress.
      In Default Consistency mode, individual puts occur atomically but not the entire putAll. Listeners may observe individual updates.
       
       
      Error Log suggesting otherwise
       
      Deadlock: true
      Completed: 12808
      Thread name="sys-stripe-3-#4%VPS%", id=27, state=WAITING, blockCnt=3, waitCnt=121340
        Lock [object=java.util.concurrent.locks.ReentrantLock$NonfairSync@138205af, ownerName=sys-stripe-26-#27%VPS%, ownerId=50]
        at sun.misc.Unsafe.park(Native Method)
        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.acquireQueued(AbstractQueuedSynchronizer.java:870)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
        at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
         at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
        at o.a.i.i.processors.cache.GridCacheMapEntry.lockEntry(GridCacheMapEntry.java:4272)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.lockEntries(GridDhtAtomicCache.java:2848)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1706)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1628)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3056)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:130)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:266)
        at o.a.i.i.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:261)
        at o.a.i.i.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1054)
        at o.a.i.i.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:579)
        at o.a.i.i.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:378)
        at o.a.i.i.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:304)
        at o.a.i.i.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:99)
        at o.a.i.i.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:293)
        at o.a.i.i.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1556)
        at o.a.i.i.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1184)
        at o.a.i.i.managers.communication.GridIoManager.access$4200(GridIoManager.java:125)
        at o.a.i.i.managers.communication.GridIoManager$9.run(GridIoManager.java:1091)
        at o.a.i.i.util.StripedExecutor$Stripe.run(StripedExecutor.java:511)
        at java.lang.Thread.run(Thread.java:748)
       
      I have tried sorting my keys but the same doesn't helps
       

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              gaurav.agg83 Gaurav Aggarwal
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: