IGNITE-8975 Invalid initialization of compressed archived WAL segment when WAL 
compression is switched off. - Fixes #4345.

Signed-off-by: Ivan Rakov <[email protected]>


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

Branch: refs/heads/ignite-8783
Commit: 46db0523aba374f288617ddb99a29df905445077
Parents: dd47fab
Author: Ivan Daschinskiy <[email protected]>
Authored: Tue Jul 17 16:52:22 2018 +0300
Committer: Ivan Rakov <[email protected]>
Committed: Tue Jul 17 16:55:13 2018 +0300

----------------------------------------------------------------------
 .../wal/FileWriteAheadLogManager.java           | 11 +++++++---
 .../wal/FsyncModeFileWriteAheadLogManager.java  | 15 +++++++++-----
 .../persistence/db/wal/WalCompactionTest.java   | 21 ++++++++++++++++++++
 3 files changed, 39 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/46db0523/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 2988208..78ab9ac 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
@@ -3047,7 +3047,9 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
             @NotNull AbstractFileDescriptor desc,
             @Nullable FileWALPointer start
         ) throws IgniteCheckedException, FileNotFoundException {
-            if (decompressor != null && !desc.file().exists()) {
+            AbstractFileDescriptor currDesc = desc;
+
+            if (!desc.file().exists()) {
                 FileDescriptor zipFile = new FileDescriptor(
                     new File(walArchiveDir, 
FileDescriptor.fileName(desc.idx()) + ".zip"));
 
@@ -3056,10 +3058,13 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
                         "[segmentIdx=" + desc.idx() + "]");
                 }
 
-                decompressor.decompressFile(desc.idx()).get();
+                if (decompressor != null)
+                    decompressor.decompressFile(desc.idx()).get();
+                else
+                    currDesc = zipFile;
             }
 
-            return (ReadFileHandle) super.initReadHandle(desc, start);
+            return (ReadFileHandle) super.initReadHandle(currDesc, start);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/46db0523/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
index 2f64bd7..7521f73 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FsyncModeFileWriteAheadLogManager.java
@@ -3175,19 +3175,24 @@ public class FsyncModeFileWriteAheadLogManager extends 
GridCacheSharedManagerAda
             @NotNull AbstractFileDescriptor desc,
             @Nullable FileWALPointer start
         ) throws IgniteCheckedException, FileNotFoundException {
-            if (decompressor != null && !desc.file().exists()) {
+            AbstractFileDescriptor currDesc = desc;
+
+            if (!desc.file().exists()) {
                 FileDescriptor zipFile = new FileDescriptor(
-                    new File(walArchiveDir, 
FileDescriptor.fileName(desc.idx()) + ".zip"));
+                        new File(walArchiveDir, 
FileDescriptor.fileName(desc.idx()) + ".zip"));
 
                 if (!zipFile.file.exists()) {
                     throw new FileNotFoundException("Both compressed and raw 
segment files are missing in archive " +
-                        "[segmentIdx=" + desc.idx() + "]");
+                            "[segmentIdx=" + desc.idx() + "]");
                 }
 
-                decompressor.decompressFile(desc.idx()).get();
+                if (decompressor != null)
+                    decompressor.decompressFile(desc.idx()).get();
+                else
+                    currDesc = zipFile;
             }
 
-            return (ReadFileHandle) super.initReadHandle(desc, start);
+            return (ReadFileHandle) super.initReadHandle(currDesc, start);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/46db0523/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
index 2351178..938465c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
@@ -112,9 +112,28 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
     }
 
     /**
+     * Tests applying updates from compacted WAL archive.
+     *
      * @throws Exception If failed.
      */
     public void testApplyingUpdatesFromCompactedWal() throws Exception {
+        testApplyingUpdatesFromCompactedWal(false);
+    }
+
+    /**
+     * Tests applying updates from compacted WAL archive when compressor is 
disabled.
+     *
+     * @throws Exception If failed.
+     */
+    public void testApplyingUpdatesFromCompactedWalWhenCompressorDisabled() 
throws Exception {
+        testApplyingUpdatesFromCompactedWal(true);
+    }
+
+    /**
+     * @param switchOffCompressor Switch off compressor after restart.
+     * @throws Exception If failed.
+     */
+    private void testApplyingUpdatesFromCompactedWal(boolean 
switchOffCompressor) throws Exception {
         IgniteEx ig = (IgniteEx)startGrids(3);
         ig.cluster().active(true);
 
@@ -172,6 +191,8 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
         for (File f : lfsFiles)
             f.delete();
 
+        compactionEnabled = !switchOffCompressor;
+
         ig = (IgniteEx)startGrids(3);
 
         awaitPartitionMapExchange();

Reply via email to