You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dg...@apache.org on 2019/09/05 13:09:23 UTC

[ignite] branch ignite-2.7.6 updated: IGNITE-12127 Fixed WAL writer may close file IO with unflushed changes when MMAP is disabled - Fixes #6840.

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

dgovorukhin pushed a commit to branch ignite-2.7.6
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/ignite-2.7.6 by this push:
     new 402c945  IGNITE-12127 Fixed WAL writer may close file IO with unflushed changes when MMAP is disabled - Fixes #6840.
402c945 is described below

commit 402c9450dafbb201708f66d8bdab0ade0b87bd4f
Author: Dmitriy Govorukhin <dm...@gmail.com>
AuthorDate: Thu Sep 5 10:15:21 2019 +0300

    IGNITE-12127 Fixed WAL writer may close file IO with unflushed changes when MMAP is disabled - Fixes #6840.
    
    (cherry picked from commit a13337d94755d7e1cc097c6f00311552fea25ae6)
---
 .../cache/persistence/wal/FileWriteAheadLogManager.java  | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

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 e958db7..47473be 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
@@ -129,6 +129,7 @@ import org.apache.ignite.thread.IgniteThread;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import static java.lang.Long.MAX_VALUE;
 import static java.nio.file.StandardOpenOption.CREATE;
 import static java.nio.file.StandardOpenOption.READ;
 import static java.nio.file.StandardOpenOption.WRITE;
@@ -2616,9 +2617,10 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
                 return;
             }
 
-            assert ptr.index() == getSegmentId();
+            assert ptr.index() == getSegmentId() : "Pointer segment idx is not equals to current write segment idx. " +
+                "ptr=" + ptr + " segmetntId=" + getSegmentId();
 
-            walWriter.flushBuffer(ptr.fileOffset());
+            walWriter.flushBuffer(ptr.fileOffset() + ptr.length());
         }
 
         /**
@@ -3243,7 +3245,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
                             }
                         }
                         else {
-                            unparkWaiters(Long.MAX_VALUE);
+                            unparkWaiters(MAX_VALUE);
 
                             return;
                         }
@@ -3274,7 +3276,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
 
                             err = e;
 
-                            unparkWaiters(Long.MAX_VALUE);
+                            unparkWaiters(MAX_VALUE);
 
                             return;
                         }
@@ -3308,7 +3310,9 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
                         finally {
                             seg.release();
 
-                            long p = pos <= UNCONDITIONAL_FLUSH || err != null ? Long.MAX_VALUE : currentHandle().written;
+                            boolean unparkAll = (pos == UNCONDITIONAL_FLUSH || pos == FILE_CLOSE) || err != null;
+
+                            long p = unparkAll ? MAX_VALUE : currentHandle().written;
 
                             unparkWaiters(p);
                         }
@@ -3319,7 +3323,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
                 err = t;
             }
             finally {
-                unparkWaiters(Long.MAX_VALUE);
+                unparkWaiters(MAX_VALUE);
 
                 if (err == null && !isCancelled)
                     err = new IllegalStateException("Worker " + name() + " is terminated unexpectedly");