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

Reply via email to