Repository: ignite Updated Branches: refs/heads/master ef4a02dc5 -> 1fd72477e
IGNITE-9402 Throws exception if WALWriter failed during flush buffer. - Fixes #4640. Signed-off-by: Dmitriy Govorukhin <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1fd72477 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1fd72477 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1fd72477 Branch: refs/heads/master Commit: 1fd72477e336bc48b2568d58114a2d15f5036d12 Parents: ef4a02d Author: Anton Kalashnikov <[email protected]> Authored: Wed Sep 5 14:43:47 2018 +0300 Committer: Dmitriy Govorukhin <[email protected]> Committed: Wed Sep 5 14:43:47 2018 +0300 ---------------------------------------------------------------------- .../wal/FileWriteAheadLogManager.java | 22 +++++++++++--------- .../IgnitePdsWithIndexingCoreTestSuite.java | 2 ++ 2 files changed, 14 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/1fd72477/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 eb5ae95..634cab3 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 @@ -78,7 +78,6 @@ import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; -import org.apache.ignite.internal.processors.cache.persistence.StorageException; import org.apache.ignite.internal.pagemem.wal.WALIterator; import org.apache.ignite.internal.pagemem.wal.WALPointer; import org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord; @@ -90,12 +89,12 @@ import org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter import org.apache.ignite.internal.processors.cache.WalStateManager.WALDisableContext; import org.apache.ignite.internal.processors.cache.persistence.DataStorageMetricsImpl; import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager; +import org.apache.ignite.internal.processors.cache.persistence.StorageException; import org.apache.ignite.internal.processors.cache.persistence.file.FileIO; import org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory; import org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager; import org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory; import org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderSettings; -import org.apache.ignite.internal.processors.cache.persistence.wal.AbstractWalRecordsIterator.AbstractFileDescriptor; import org.apache.ignite.internal.processors.cache.persistence.wal.crc.PureJavaCrc32; import org.apache.ignite.internal.processors.cache.persistence.wal.record.HeaderRecord; import org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordSerializer; @@ -2682,7 +2681,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl * * @param ptr Pointer. */ - private void flushOrWait(FileWALPointer ptr) { + private void flushOrWait(FileWALPointer ptr) throws IgniteCheckedException { if (ptr != null) { // If requested obsolete file index, it must be already flushed by close. if (ptr.index() != idx) @@ -2695,7 +2694,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl /** * @param ptr Pointer. */ - private void flush(FileWALPointer ptr) { + private void flush(FileWALPointer ptr) throws IgniteCheckedException { if (ptr == null) { // Unconditional flush. walWriter.flushAll(); @@ -3275,8 +3274,6 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl /** {@inheritDoc} */ @Override protected void body() { - Throwable err = null; - try { while (!isCancelled()) { while (waiters.isEmpty()) { @@ -3399,21 +3396,21 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl /** * Forces all made changes to the file. */ - void force() { + void force() throws IgniteCheckedException { flushBuffer(FILE_FORCE); } /** * Closes file. */ - void close() { + void close() throws IgniteCheckedException { flushBuffer(FILE_CLOSE); } /** * Flushes all data from the buffer. */ - void flushAll() { + void flushAll() throws IgniteCheckedException { flushBuffer(UNCONDITIONAL_FLUSH); } @@ -3421,7 +3418,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl * @param expPos Expected position. */ @SuppressWarnings("ForLoopReplaceableByForEach") - void flushBuffer(long expPos) { + void flushBuffer(long expPos) throws IgniteCheckedException { if (mmap) return; @@ -3447,6 +3444,11 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl if (val == Long.MIN_VALUE) { waiters.remove(t); + Throwable walWriterError = walWriter.err; + + if (walWriterError != null) + throw new IgniteCheckedException("Flush buffer failed.", walWriterError); + return; } else http://git-wip-us.apache.org/repos/asf/ignite/blob/1fd72477/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java index 491bab7..2989ccd 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingCoreTestSuite.java @@ -72,7 +72,9 @@ public class IgnitePdsWithIndexingCoreTestSuite extends TestSuite { suite.addTestSuite(IgnitePdsTxHistoricalRebalancingTest.class); suite.addTestSuite(IgniteWalRecoveryPPCTest.class); + suite.addTestSuite(IgnitePdsDiskErrorsRecoveringTest.class); + suite.addTestSuite(IgnitePdsCacheDestroyDuringCheckpointTest.class); suite.addTestSuite(IgnitePdsBinaryMetadataOnClusterRestartTest.class);
