commit | 905e573bc33841318a6cc94fc30f3f37ae4a6d7f | [log] [tgz] |
---|---|---|
author | ibessonov <bessonov.ip@gmail.com> | Tue May 25 10:42:47 2021 +0300 |
committer | GitHub <noreply@github.com> | Tue May 25 10:42:47 2021 +0300 |
tree | a5335f85508ec16ebf9e53c4d2d5cbd826b36ca3 | |
parent | b1529fbd7d42e3f3a5500a217a2b8b21acbb4189 [diff] |
IGNITE-14771 Fixed deadlock in GridCacheDataStore initialization. (#9121)
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 @@ AtomicLong pageListCacheLimit = ((GridCacheDatabaseSharedManager) ctx.database()).pageListCacheLimitHolder(grp.dataRegion()); + IgniteCacheDatabaseSharedManager dbMgr = ctx.database(); + + dbMgr.checkpointReadLock(); + if (init.compareAndSet(false, true)) { - IgniteCacheDatabaseSharedManager dbMgr = ctx.database(); - - dbMgr.checkpointReadLock(); - try { Metas metas = getOrAllocatePartitionMetas(); @@ -2225,6 +2225,8 @@ } } 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 @@ 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);