You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ib...@apache.org on 2021/05/25 07:43:13 UTC

[ignite] branch master updated: IGNITE-14771 Fixed deadlock in GridCacheDataStore initialization. (#9121)

This is an automated email from the ASF dual-hosted git repository.

ibessonov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 905e573  IGNITE-14771 Fixed deadlock in GridCacheDataStore initialization. (#9121)
905e573 is described below

commit 905e573bc33841318a6cc94fc30f3f37ae4a6d7f
Author: ibessonov <be...@gmail.com>
AuthorDate: Tue May 25 10:42:47 2021 +0300

    IGNITE-14771 Fixed deadlock in GridCacheDataStore initialization. (#9121)
---
 .../processors/cache/persistence/GridCacheOffheapManager.java     | 8 +++++---
 .../processors/cache/persistence/checkpoint/Checkpointer.java     | 4 ++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 9dbf87a..66f2629 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -2001,11 +2001,11 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
 
             AtomicLong pageListCacheLimit = ((GridCacheDatabaseSharedManager) ctx.database()).pageListCacheLimitHolder(grp.dataRegion());
 
-            if (init.compareAndSet(false, true)) {
-                IgniteCacheDatabaseSharedManager dbMgr = ctx.database();
+            IgniteCacheDatabaseSharedManager dbMgr = ctx.database();
 
-                dbMgr.checkpointReadLock();
+            dbMgr.checkpointReadLock();
 
+            if (init.compareAndSet(false, true)) {
                 try {
                     Metas metas = getOrAllocatePartitionMetas();
 
@@ -2225,6 +2225,8 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
                 }
             }
             else {
+                dbMgr.checkpointReadUnlock();
+
                 U.await(latch);
 
                 delegate0 = delegate;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
index a7ac809..21032a7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
@@ -363,13 +363,13 @@ public class Checkpointer extends GridWorker {
 
         long nextNanos = System.nanoTime() + U.millisToNanos(delayFromNow);
 
-        if (sched.nextCpNanos() <= nextNanos)
+        if (sched.nextCpNanos() - nextNanos <= 0)
             return sched;
 
         synchronized (this) {
             sched = scheduledCp;
 
-            if (sched.nextCpNanos() > nextNanos) {
+            if (sched.nextCpNanos() - nextNanos > 0) {
                 sched.reason(reason);
 
                 sched.nextCpNanos(nextNanos);