You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/08/01 09:26:22 UTC

[39/47] ignite git commit: IGNITE-5816 - Fixed race in WAL segment close leading to ClosedChannelException

IGNITE-5816 - Fixed race in WAL segment close leading to ClosedChannelException


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6cff4811
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6cff4811
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6cff4811

Branch: refs/heads/master
Commit: 6cff4811636209ce39b1e2097b5a14233ee08413
Parents: 97813a8
Author: Ivan Rakov <iv...@gmail.com>
Authored: Fri Jul 28 19:54:07 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Fri Jul 28 19:54:25 2017 +0300

----------------------------------------------------------------------
 .../cache/persistence/wal/FileWriteAheadLogManager.java         | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6cff4811/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
index 85eb480..17db8f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
@@ -1881,7 +1881,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
             if (expHead.previous() == null) {
                 FakeRecord frHead = (FakeRecord)expHead;
 
-                if (stop == frHead.stop)
+                if (!stop || frHead.stop) // Protects from CASing terminal FakeRecord(true) to FakeRecord(false)
                     return false;
             }
 
@@ -1891,6 +1891,9 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
             if (!head.compareAndSet(expHead, new FakeRecord(new FileWALPointer(idx, (int)nextPosition(expHead), 0), stop)))
                 return false;
 
+            if (expHead.chainSize() == 0)
+                return false;
+
             // At this point we grabbed the piece of WAL chain.
             // Any failure in this code must invalidate the environment.
             try {