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();
