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/ignite-5578
Commit: 6cff4811636209ce39b1e2097b5a14233ee08413
Parents: 97813a8
Author: Ivan Rakov <[email protected]>
Authored: Fri Jul 28 19:54:07 2017 +0300
Committer: Ivan Rakov <[email protected]>
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 {

Reply via email to