From 467a0916286482ffa41362e5f88307695912048c Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Thu, 13 Dec 2018 19:10:01 +0300 Subject: [PATCH 01/21] IGNITE-10671 Introduced state machine to handle lifecycle of start/activate/stop. --- .../ignite/internal/GridComponentState.java | 33 ++++ .../internal/GridComponentStateMachine.java | 77 +++++++++ .../internal/GridStateChangeCallback.java | 32 ++++ .../wal/FileWriteAheadLogManager.java | 148 ++++++++++-------- .../db/wal/WalCompactionSwitchOverTest.java | 125 +++++++++++++++ 5 files changed, 349 insertions(+), 66 deletions(-) create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java new file mode 100644 index 0000000000000..64c357afd7acd --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal; + +/** + * State of grid components. + */ +public enum GridComponentState { + /** + * Compoment created, no resource has been allocated. + */ + CREATED, + + /** + * Compoment initialized it's structure and resources, but it is not operational. + */ + INITIALIZED +} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java new file mode 100644 index 0000000000000..6e5cf7c078ac6 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal; + +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.IgniteLogger; + +/** + * State machine to track lifecycle of GirdComponents. + * + */ +public class GridComponentStateMachine { + /** + * Grid component. + */ + private final Object gridComponent; + + /** + * Component state. + */ + private GridComponentState componentState = GridComponentState.CREATED; + + /** + * + * @param gridComponent component to track states. + */ + public GridComponentStateMachine(Object gridComponent) { + this.gridComponent = gridComponent; + } + + /** + * Change state method. + * + * @param expected Expected state of component. + * @param target Target state of component. + * @param logger Logger. + * @param callback Callback to invoke on state transition. + * @throws IgniteCheckedException Thrown by callback. + */ + public synchronized void changeState( + GridComponentState expected, + GridComponentState target, + IgniteLogger logger, + GridStateChangeCallback callback + ) throws IgniteCheckedException { + if (componentState != expected) { + if (logger.isInfoEnabled()) + logger.info("State is " + componentState + ", skip callback, cause expected state is " + expected); + + return; + } + + callback.apply(); + + componentState = target; + + if (logger.isInfoEnabled()) + logger.info("Changed " + gridComponent +" state to " + componentState); + + } + +} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java b/modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java new file mode 100644 index 0000000000000..cd3fd25b38885 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal; + +import org.apache.ignite.IgniteCheckedException; + +/** + * Transition callback to invoke on GridComponentStateMachine.changeState(). + */ +public interface GridStateChangeCallback { + /** + * Apply change state transition. + * + * @throws IgniteCheckedException In case of error. + */ + public void apply() throws IgniteCheckedException; +} 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 fad1ec1039d5a..75e089c98c697 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 @@ -60,7 +60,10 @@ import org.apache.ignite.events.WalSegmentCompactedEvent; import org.apache.ignite.failure.FailureContext; import org.apache.ignite.failure.FailureType; +import org.apache.ignite.internal.GridComponentState; +import org.apache.ignite.internal.GridComponentStateMachine; import org.apache.ignite.internal.GridKernalContext; +import org.apache.ignite.internal.GridStateChangeCallback; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager; @@ -232,7 +235,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl * Maximum number of allowed segments without checkpoint. If we have their more checkpoint should be triggered. * It is simple way to calculate WAL size without checkpoint instead fair WAL size calculating. */ - private long maxSegCountWithoutCheckpoint; + private final long maxSegCountWithoutCheckpoint; /** Size of wal archive since which removing of old archive should be started */ private final long allowedThresholdWalArchiveSize; @@ -303,7 +306,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl private volatile FileWriteHandle currHnd; /** File handle manager. */ - private FileHandleManager fileHandleManager; + private volatile FileHandleManager fileHandleManager; /** */ private volatile WALDisableContext walDisableContext; @@ -319,7 +322,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl * segment, skip possible archiving for this case
Value is filled only for case {@link * #walAutoArchiveAfterInactivity} > 0
*/ - private AtomicLong lastRecordLoggedMs = new AtomicLong(); + private final AtomicLong lastRecordLoggedMs = new AtomicLong(); /** * Cancellable task for {@link WALMode#BACKGROUND}, should be cancelled at shutdown. @@ -344,10 +347,11 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl private SegmentRouter segmentRouter; /** Segment factory with ability locked segment during reading. */ - private SegmentFileInputFactory lockedSegmentFileInputFactory; + private volatile SegmentFileInputFactory lockedSegmentFileInputFactory; - private FileHandleManagerFactory fileHandleManagerFactory; + private final FileHandleManagerFactory fileHandleManagerFactory; + private final GridComponentStateMachine stateMachine = new GridComponentStateMachine(this); /** * @param ctx Kernal context. */ @@ -374,6 +378,11 @@ public FileWriteAheadLogManager(@NotNull final GridKernalContext ctx) { failureProcessor = ctx.failure(); fileHandleManagerFactory = new FileHandleManagerFactory(dsCfg); + + maxSegCountWithoutCheckpoint = + (long)((U.adjustedWalHistorySize(dsCfg, log) * CHECKPOINT_TRIGGER_ARCHIVE_SIZE_PERCENTAGE) + / dsCfg.getWalSegmentSize()); + } /** @@ -387,95 +396,95 @@ public void setFileIOFactory(FileIOFactory ioFactory) { /** {@inheritDoc} */ @Override public void start0() throws IgniteCheckedException { - if (!cctx.kernalContext().clientNode()) { - maxSegCountWithoutCheckpoint = - (long)((U.adjustedWalHistorySize(dsCfg, log) * CHECKPOINT_TRIGGER_ARCHIVE_SIZE_PERCENTAGE) - / dsCfg.getWalSegmentSize()); + stateMachine.changeState( + GridComponentState.CREATED, + GridComponentState.INITIALIZED, + log, + new GridStateChangeCallback() { + @Override public void apply() throws IgniteCheckedException { + if(cctx.kernalContext().clientNode()) + return; - final PdsFolderSettings resolveFolders = cctx.kernalContext().pdsFolderResolver().resolveFolders(); + final PdsFolderSettings resolveFolders = cctx.kernalContext().pdsFolderResolver().resolveFolders(); - checkWalConfiguration(); + checkWalConfiguration(); - final File walWorkDir0 = walWorkDir = initDirectory( - dsCfg.getWalPath(), - DataStorageConfiguration.DFLT_WAL_PATH, - resolveFolders.folderName(), - "write ahead log work directory" - ); + final File walWorkDir0 = walWorkDir = initDirectory( + dsCfg.getWalPath(), + DataStorageConfiguration.DFLT_WAL_PATH, + resolveFolders.folderName(), + "write ahead log work directory" + ); - final File walArchiveDir0 = walArchiveDir = initDirectory( - dsCfg.getWalArchivePath(), - DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH, - resolveFolders.folderName(), - "write ahead log archive directory" - ); + final File walArchiveDir0 = walArchiveDir = initDirectory( + dsCfg.getWalArchivePath(), + DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH, + resolveFolders.folderName(), + "write ahead log archive directory" + ); - serializer = new RecordSerializerFactoryImpl(cctx).createSerializer(serializerVer); + serializer = new RecordSerializerFactoryImpl(cctx).createSerializer(serializerVer); - GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)cctx.database(); + GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)cctx.database(); - metrics = dbMgr.persistentStoreMetricsImpl(); + metrics = dbMgr.persistentStoreMetricsImpl(); - checkOrPrepareFiles(); + checkOrPrepareFiles(); - if (metrics != null) - metrics.setWalSizeProvider(new CO() { - @Override public Long apply() { - long size = 0; + if (metrics != null) + metrics.setWalSizeProvider(new CO() { + @Override public Long apply() { + long size = 0; - for (File f : walWorkDir0.listFiles()) - size += f.length(); + for (File f : walWorkDir0.listFiles()) + size += f.length(); - for (File f : walArchiveDir0.listFiles()) - size += f.length(); + for (File f : walArchiveDir0.listFiles()) + size += f.length(); - return size; - } - }); + return size; + } + }); - IgniteBiTuple tup = scanMinMaxArchiveIndices(); + IgniteBiTuple tup = scanMinMaxArchiveIndices(); - segmentAware = new SegmentAware(dsCfg.getWalSegments(), dsCfg.isWalCompactionEnabled()); + segmentAware = new SegmentAware(dsCfg.getWalSegments(), dsCfg.isWalCompactionEnabled()); - segmentAware.lastTruncatedArchiveIdx(tup == null ? -1 : tup.get1() - 1); + segmentAware.lastTruncatedArchiveIdx(tup == null ? -1 : tup.get1() - 1); - long lastAbsArchivedIdx = tup == null ? -1 : tup.get2(); + long lastAbsArchivedIdx = tup == null ? -1 : tup.get2(); - if (isArchiverEnabled()) - archiver = new FileArchiver(lastAbsArchivedIdx, log); - else - archiver = null; + if (isArchiverEnabled()) + archiver = new FileArchiver(lastAbsArchivedIdx, log); + else + archiver = null; - if (lastAbsArchivedIdx > 0) - segmentAware.setLastArchivedAbsoluteIndex(lastAbsArchivedIdx); + if (lastAbsArchivedIdx > 0) + segmentAware.setLastArchivedAbsoluteIndex(lastAbsArchivedIdx); - if (dsCfg.isWalCompactionEnabled()) { - if (compressor == null) + if (dsCfg.isWalCompactionEnabled()) { compressor = new FileCompressor(log); - if (decompressor == null) { // Preventing of two file-decompressor thread instantiations. decompressor = new FileDecompressor(log); - - new IgniteThread(decompressor).start(); } - } - segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg); + segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg); - walDisableContext = cctx.walState().walDisableContext(); + walDisableContext = cctx.walState().walDisableContext(); - fileHandleManager = fileHandleManagerFactory.build( - cctx, metrics, mmap, lastWALPtr::get, serializer, this::currentHandle - ); + fileHandleManager = fileHandleManagerFactory.build( + cctx, metrics, mmap, lastWALPtr::get, serializer, FileWriteAheadLogManager.this::currentHandle + ); - fileHandleManager.start(); + fileHandleManager.start(); - lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory( - segmentAware, - segmentRouter, - ioFactory - ); - } + lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory( + segmentAware, + segmentRouter, + ioFactory + ); + } + }); } /** @@ -492,6 +501,9 @@ private void startArchiverAndCompressor() { if (compressor != null) compressor.start(); + + if (decompressor != null) + decompressor.start(); } /** @@ -2240,6 +2252,10 @@ private void shutdown() { U.join(this, log); } + + void start() { + new IgniteThread(this).start(); + } } /** diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java new file mode 100644 index 0000000000000..2e9fcd0c40236 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java @@ -0,0 +1,125 @@ +package org.apache.ignite.internal.processors.cache.persistence.db.wal; + +import org.apache.ignite.IgniteCache; +import org.apache.ignite.cache.CacheMode; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.DataRegionConfiguration; +import org.apache.ignite.configuration.DataStorageConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager; +import org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor; +import org.apache.ignite.internal.util.lang.GridAbsPredicate; +import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.testframework.GridTestUtils; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +import java.io.File; +import java.io.FileFilter; + +public class WalCompactionSwitchOverTest extends GridCommonAbstractTest { + private boolean compactionEnabled; + + @Override + protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); + + cfg.setDataStorageConfiguration(new DataStorageConfiguration() + .setDefaultDataRegionConfiguration( + new DataRegionConfiguration() + .setPersistenceEnabled(true) + .setMaxSize(256 * 1024 * 1024)) + .setWalSegmentSize(512 * 1024) + .setWalSegments(100) + .setWalCompactionEnabled(compactionEnabled)); + + return cfg; + } + + @Override protected void beforeTest() throws Exception { + cleanPersistenceDir(); + } + + public void testWalCompactionSwitchWithGap() throws Exception { + IgniteEx ex = startGrid(0); + + ex.cluster().active(true); + + IgniteCache cache = ex.getOrCreateCache( + new CacheConfiguration() + .setName("c1") + .setGroupName("g1") + .setCacheMode(CacheMode.PARTITIONED) + ); + + for (int i = 0; i < 500; i++) + cache.put(i, i); + + File walDir = U.resolveWorkDirectory( + ex.configuration().getWorkDirectory(), + "db/wal/node00-" + ex.localNode().consistentId(), + false + ); + + forceCheckpoint(); + + GridTestUtils.waitForCondition(new GridAbsPredicate() { + @Override + public boolean apply() { + File[] archivedFiles = walDir.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.getName().endsWith(".wal"); + } + }); + + + return archivedFiles.length == 39; + } + }, 5000); + + stopGrid(0); + + compactionEnabled = true; + + ex = startGrid(0); + + ex.cluster().active(true); + + + File archiveDir = U.resolveWorkDirectory( + ex.configuration().getWorkDirectory(), + "db/wal/archive/node00-" + ex.localNode().consistentId(), + false + ); + + GridTestUtils.waitForCondition(new GridAbsPredicate() { + @Override + public boolean apply() { + File[] archivedFiles = archiveDir.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.getName().endsWith(FilePageStoreManager.ZIP_SUFFIX); + } + }); + + + return archivedFiles.length == 20; + } + }, 5000); + + File[] tmpFiles = archiveDir.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.getName().endsWith(FilePageStoreManager.TMP_SUFFIX); + } + }); + + assertEquals(0, tmpFiles.length); + } + + @Override + protected void afterTest() throws Exception { + stopAllGrids(); + } +} From f1ee9146bc1c75b6bb919baa9db7a9d5b06f7bb0 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Fri, 14 Dec 2018 11:00:21 +0300 Subject: [PATCH 02/21] IGNITE-10671 Fixed lifecycle of FileWriteAheadLogManager. --- .../ignite/internal/GridComponentState.java | 33 ---- .../internal/GridComponentStateMachine.java | 77 --------- .../internal/GridStateChangeCallback.java | 32 ---- .../wal/FileWriteAheadLogManager.java | 155 ++++++++---------- ...st.java => WalCompactionSwitchOnTest.java} | 3 +- .../testsuites/IgnitePdsTestSuite2.java | 2 + 6 files changed, 71 insertions(+), 231 deletions(-) delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java rename modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/{WalCompactionSwitchOverTest.java => WalCompactionSwitchOnTest.java} (96%) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java deleted file mode 100644 index 64c357afd7acd..0000000000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridComponentState.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal; - -/** - * State of grid components. - */ -public enum GridComponentState { - /** - * Compoment created, no resource has been allocated. - */ - CREATED, - - /** - * Compoment initialized it's structure and resources, but it is not operational. - */ - INITIALIZED -} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java deleted file mode 100644 index 6e5cf7c078ac6..0000000000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridComponentStateMachine.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal; - -import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.IgniteLogger; - -/** - * State machine to track lifecycle of GirdComponents. - * - */ -public class GridComponentStateMachine { - /** - * Grid component. - */ - private final Object gridComponent; - - /** - * Component state. - */ - private GridComponentState componentState = GridComponentState.CREATED; - - /** - * - * @param gridComponent component to track states. - */ - public GridComponentStateMachine(Object gridComponent) { - this.gridComponent = gridComponent; - } - - /** - * Change state method. - * - * @param expected Expected state of component. - * @param target Target state of component. - * @param logger Logger. - * @param callback Callback to invoke on state transition. - * @throws IgniteCheckedException Thrown by callback. - */ - public synchronized void changeState( - GridComponentState expected, - GridComponentState target, - IgniteLogger logger, - GridStateChangeCallback callback - ) throws IgniteCheckedException { - if (componentState != expected) { - if (logger.isInfoEnabled()) - logger.info("State is " + componentState + ", skip callback, cause expected state is " + expected); - - return; - } - - callback.apply(); - - componentState = target; - - if (logger.isInfoEnabled()) - logger.info("Changed " + gridComponent +" state to " + componentState); - - } - -} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java b/modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java deleted file mode 100644 index cd3fd25b38885..0000000000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridStateChangeCallback.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal; - -import org.apache.ignite.IgniteCheckedException; - -/** - * Transition callback to invoke on GridComponentStateMachine.changeState(). - */ -public interface GridStateChangeCallback { - /** - * Apply change state transition. - * - * @throws IgniteCheckedException In case of error. - */ - public void apply() throws IgniteCheckedException; -} 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 75e089c98c697..22b4057e2dd93 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 @@ -60,10 +60,7 @@ import org.apache.ignite.events.WalSegmentCompactedEvent; import org.apache.ignite.failure.FailureContext; import org.apache.ignite.failure.FailureType; -import org.apache.ignite.internal.GridComponentState; -import org.apache.ignite.internal.GridComponentStateMachine; import org.apache.ignite.internal.GridKernalContext; -import org.apache.ignite.internal.GridStateChangeCallback; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager; @@ -351,7 +348,6 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl private final FileHandleManagerFactory fileHandleManagerFactory; - private final GridComponentStateMachine stateMachine = new GridComponentStateMachine(this); /** * @param ctx Kernal context. */ @@ -396,95 +392,87 @@ public void setFileIOFactory(FileIOFactory ioFactory) { /** {@inheritDoc} */ @Override public void start0() throws IgniteCheckedException { - stateMachine.changeState( - GridComponentState.CREATED, - GridComponentState.INITIALIZED, - log, - new GridStateChangeCallback() { - @Override public void apply() throws IgniteCheckedException { - if(cctx.kernalContext().clientNode()) - return; + if(cctx.kernalContext().clientNode()) + return; - final PdsFolderSettings resolveFolders = cctx.kernalContext().pdsFolderResolver().resolveFolders(); + final PdsFolderSettings resolveFolders = cctx.kernalContext().pdsFolderResolver().resolveFolders(); - checkWalConfiguration(); + checkWalConfiguration(); - final File walWorkDir0 = walWorkDir = initDirectory( - dsCfg.getWalPath(), - DataStorageConfiguration.DFLT_WAL_PATH, - resolveFolders.folderName(), - "write ahead log work directory" - ); + final File walWorkDir0 = walWorkDir = initDirectory( + dsCfg.getWalPath(), + DataStorageConfiguration.DFLT_WAL_PATH, + resolveFolders.folderName(), + "write ahead log work directory" + ); - final File walArchiveDir0 = walArchiveDir = initDirectory( - dsCfg.getWalArchivePath(), - DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH, - resolveFolders.folderName(), - "write ahead log archive directory" - ); + final File walArchiveDir0 = walArchiveDir = initDirectory( + dsCfg.getWalArchivePath(), + DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH, + resolveFolders.folderName(), + "write ahead log archive directory" + ); - serializer = new RecordSerializerFactoryImpl(cctx).createSerializer(serializerVer); + serializer = new RecordSerializerFactoryImpl(cctx).createSerializer(serializerVer); - GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)cctx.database(); + GridCacheDatabaseSharedManager dbMgr = (GridCacheDatabaseSharedManager)cctx.database(); - metrics = dbMgr.persistentStoreMetricsImpl(); + metrics = dbMgr.persistentStoreMetricsImpl(); - checkOrPrepareFiles(); + checkOrPrepareFiles(); - if (metrics != null) - metrics.setWalSizeProvider(new CO() { - @Override public Long apply() { - long size = 0; + if (metrics != null) + metrics.setWalSizeProvider(new CO() { + @Override public Long apply() { + long size = 0; - for (File f : walWorkDir0.listFiles()) - size += f.length(); + for (File f : walWorkDir0.listFiles()) + size += f.length(); - for (File f : walArchiveDir0.listFiles()) - size += f.length(); + for (File f : walArchiveDir0.listFiles()) + size += f.length(); - return size; - } - }); + return size; + } + }); - IgniteBiTuple tup = scanMinMaxArchiveIndices(); + IgniteBiTuple tup = scanMinMaxArchiveIndices(); - segmentAware = new SegmentAware(dsCfg.getWalSegments(), dsCfg.isWalCompactionEnabled()); + segmentAware = new SegmentAware(dsCfg.getWalSegments(), dsCfg.isWalCompactionEnabled()); - segmentAware.lastTruncatedArchiveIdx(tup == null ? -1 : tup.get1() - 1); + segmentAware.lastTruncatedArchiveIdx(tup == null ? -1 : tup.get1() - 1); - long lastAbsArchivedIdx = tup == null ? -1 : tup.get2(); + long lastAbsArchivedIdx = tup == null ? -1 : tup.get2(); - if (isArchiverEnabled()) - archiver = new FileArchiver(lastAbsArchivedIdx, log); - else - archiver = null; + if (isArchiverEnabled()) + archiver = new FileArchiver(lastAbsArchivedIdx, log); + else + archiver = null; - if (lastAbsArchivedIdx > 0) - segmentAware.setLastArchivedAbsoluteIndex(lastAbsArchivedIdx); + if (lastAbsArchivedIdx > 0) + segmentAware.setLastArchivedAbsoluteIndex(lastAbsArchivedIdx); - if (dsCfg.isWalCompactionEnabled()) { - compressor = new FileCompressor(log); + if (dsCfg.isWalCompactionEnabled()) { + compressor = new FileCompressor(log); - decompressor = new FileDecompressor(log); - } + decompressor = new FileDecompressor(log); + } - segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg); + segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg); - walDisableContext = cctx.walState().walDisableContext(); + walDisableContext = cctx.walState().walDisableContext(); - fileHandleManager = fileHandleManagerFactory.build( - cctx, metrics, mmap, lastWALPtr::get, serializer, FileWriteAheadLogManager.this::currentHandle - ); + fileHandleManager = fileHandleManagerFactory.build( + cctx, metrics, mmap, lastWALPtr::get, serializer, this::currentHandle + ); - fileHandleManager.start(); + fileHandleManager.start(); - lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory( - segmentAware, - segmentRouter, - ioFactory - ); - } - }); + lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory( + segmentAware, + segmentRouter, + ioFactory + ); } /** @@ -572,7 +560,18 @@ private void checkWalConfiguration() throws IgniteCheckedException { } /** {@inheritDoc} */ - @Override protected void stop0(boolean cancel) { + @Override public void onActivate(GridKernalContext kctx) { + if (log.isDebugEnabled()) + log.debug("Activated file write ahead log manager [nodeId=" + cctx.localNodeId() + + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + } + + /** {@inheritDoc} */ + @Override public void onDeActivate(GridKernalContext kctx) { + if (log.isDebugEnabled()) + log.debug("DeActivate file write ahead log [nodeId=" + cctx.localNodeId() + + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + final GridTimeoutProcessor.CancelableTask schedule = backgroundFlushSchedule; if (schedule != null) @@ -606,24 +605,6 @@ private void checkWalConfiguration() throws IgniteCheckedException { catch (Exception e) { U.error(log, "Failed to gracefully close WAL segment: " + this.currHnd, e); } - } - - /** {@inheritDoc} */ - @Override public void onActivate(GridKernalContext kctx) throws IgniteCheckedException { - if (log.isDebugEnabled()) - log.debug("Activated file write ahead log manager [nodeId=" + cctx.localNodeId() + - " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); - - start0(); - } - - /** {@inheritDoc} */ - @Override public void onDeActivate(GridKernalContext kctx) { - if (log.isDebugEnabled()) - log.debug("DeActivate file write ahead log [nodeId=" + cctx.localNodeId() + - " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); - - stop0(true); currHnd = null; } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java similarity index 96% rename from modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java rename to modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index 2e9fcd0c40236..de302991e2538 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOverTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -8,7 +8,6 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager; -import org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor; import org.apache.ignite.internal.util.lang.GridAbsPredicate; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.testframework.GridTestUtils; @@ -17,7 +16,7 @@ import java.io.File; import java.io.FileFilter; -public class WalCompactionSwitchOverTest extends GridCommonAbstractTest { +public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { private boolean compactionEnabled; @Override diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java index d40e34e530adf..f6a3eb2ef0151 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java @@ -58,6 +58,7 @@ import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalIteratorExceptionDuringReadTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalIteratorSwitchSegmentTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalSerializerVersionTest; +import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalCompactionSwitchOnTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalCompactionTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalDeletionArchiveFsyncTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalDeletionArchiveLogOnlyTest; @@ -174,6 +175,7 @@ public static void addRealPageStoreTests(TestSuite suite) { suite.addTest(new JUnit4TestAdapter(IgniteWalSerializerVersionTest.class)); suite.addTestSuite(WalCompactionTest.class); + suite.addTestSuite(WalCompactionSwitchOnTest.class); suite.addTest(new JUnit4TestAdapter(WalDeletionArchiveFsyncTest.class)); suite.addTest(new JUnit4TestAdapter(WalDeletionArchiveLogOnlyTest.class)); From 49ed2c920eb8de1ec60bb2b1e94c31b303df7445 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Fri, 14 Dec 2018 11:18:18 +0300 Subject: [PATCH 03/21] IGNITE-10671 Fixed lifecycle of FileWriteAheadLogManager. --- .../wal/FileWriteAheadLogManager.java | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 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 22b4057e2dd93..683b1310d2ea6 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 @@ -560,18 +560,7 @@ private void checkWalConfiguration() throws IgniteCheckedException { } /** {@inheritDoc} */ - @Override public void onActivate(GridKernalContext kctx) { - if (log.isDebugEnabled()) - log.debug("Activated file write ahead log manager [nodeId=" + cctx.localNodeId() + - " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); - } - - /** {@inheritDoc} */ - @Override public void onDeActivate(GridKernalContext kctx) { - if (log.isDebugEnabled()) - log.debug("DeActivate file write ahead log [nodeId=" + cctx.localNodeId() + - " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); - + @Override protected void stop0(boolean cancel) { final GridTimeoutProcessor.CancelableTask schedule = backgroundFlushSchedule; if (schedule != null) @@ -590,21 +579,34 @@ private void checkWalConfiguration() throws IgniteCheckedException { if (archiver != null) archiver.shutdown(); - if (compressor != null) { + if (compressor != null) compressor.shutdown(); - compressor = null; - } - - if (decompressor != null) { + if (decompressor != null) decompressor.shutdown(); - decompressor = null; - } } catch (Exception e) { U.error(log, "Failed to gracefully close WAL segment: " + this.currHnd, e); } + } + + /** {@inheritDoc} */ + @Override public void onActivate(GridKernalContext kctx) throws IgniteCheckedException { + if (log.isDebugEnabled()) + log.debug("Activated file write ahead log manager [nodeId=" + cctx.localNodeId() + + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + + startArchiverAndCompressor(); + } + + /** {@inheritDoc} */ + @Override public void onDeActivate(GridKernalContext kctx) { + if (log.isDebugEnabled()) + log.debug("DeActivate file write ahead log [nodeId=" + cctx.localNodeId() + + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + + stop0(true); currHnd = null; } From d45973e201509c1d1e3c7b445ee6d8f75b6aa462 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Fri, 14 Dec 2018 11:33:39 +0300 Subject: [PATCH 04/21] IGNITE-10671 Fixed lifecycle of FileWriteAheadLogManager. --- .../cache/persistence/wal/FileWriteAheadLogManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 683b1310d2ea6..5584f5ebcd562 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 @@ -559,7 +559,10 @@ private void checkWalConfiguration() throws IgniteCheckedException { } } - /** {@inheritDoc} */ + /** + * Method is called twice on deactivate and stop. + * It shutdown workers but do not deallocate them to avoid duplication. + * */ @Override protected void stop0(boolean cancel) { final GridTimeoutProcessor.CancelableTask schedule = backgroundFlushSchedule; @@ -584,7 +587,6 @@ private void checkWalConfiguration() throws IgniteCheckedException { if (decompressor != null) decompressor.shutdown(); - } catch (Exception e) { U.error(log, "Failed to gracefully close WAL segment: " + this.currHnd, e); From 7bc0e1423c1b8f56aefdab6810c6bacc0aece1c8 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 18 Dec 2018 13:33:23 +0300 Subject: [PATCH 05/21] IGNITE-10671 Added ability to restart workers and reinit segment aware. --- .../wal/FileWriteAheadLogManager.java | 53 ++++++++++++------- .../wal/aware/SegmentArchivedStorage.java | 7 +++ .../persistence/wal/aware/SegmentAware.java | 13 +++++ .../wal/aware/SegmentCompressStorage.java | 7 +++ .../wal/aware/SegmentCurrentStateStorage.java | 7 +++ .../wal/filehandle/FileHandleManager.java | 4 +- .../wal/filehandle/FileHandleManagerImpl.java | 45 +++++++++++----- .../FsyncFileHandleManagerImpl.java | 2 +- 8 files changed, 105 insertions(+), 33 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 25d0726a38d64..5b8abe5989162 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 @@ -467,7 +467,7 @@ public void setFileIOFactory(FileIOFactory ioFactory) { cctx, metrics, mmap, lastWALPtr::get, serializer, this::currentHandle ); - fileHandleManager.start(); + fileHandleManager.init(); lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory( segmentAware, @@ -480,19 +480,25 @@ public void setFileIOFactory(FileIOFactory ioFactory) { * */ private void startArchiverAndCompressor() { + segmentAware.reset(); + if (isArchiverEnabled()) { assert archiver != null; - new IgniteThread(archiver).start(); + archiver.restart(); } fileHandleManager.onActivate(); - if (compressor != null) - compressor.start(); + if (dsCfg.isWalCompactionEnabled()) { + assert compressor != null : "Compressor should be initialized."; + + compressor.restart(); + + assert decompressor != null : "Compressor should be initialized."; - if (decompressor != null) - decompressor.start(); + decompressor.restart(); + } } /** @@ -599,8 +605,6 @@ private void checkWalConfiguration() throws IgniteCheckedException { if (log.isDebugEnabled()) log.debug("Activated file write ahead log manager [nodeId=" + cctx.localNodeId() + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); - - startArchiverAndCompressor(); } /** {@inheritDoc} */ @@ -1827,6 +1831,14 @@ private void allocateRemainingFiles() throws StorageException { } ); } + + public void restart() { + assert runner() == null : "FileArchiver is still running"; + + isCancelled = false; + + new IgniteThread(archiver).start(); + } } /** @@ -1835,7 +1847,7 @@ private void allocateRemainingFiles() throws StorageException { */ private class FileCompressor extends FileCompressorWorker { /** Workers queue. */ - List workers = new ArrayList<>(); + private final List workers = new ArrayList<>(); /** */ FileCompressor(IgniteLogger log) { @@ -1861,9 +1873,11 @@ private void init() { for (int i = 1; i < calculateThreadCount(); i++) { FileCompressorWorker worker = new FileCompressorWorker(i, log); - worker.start(); + worker.restart(); - workers.add(worker); + synchronized (this) { + workers.add(worker); + } } } @@ -1914,19 +1928,18 @@ private void shutdown() throws IgniteInterruptedCheckedException { /** */ private class FileCompressorWorker extends GridWorker { - /** */ - private Thread thread; - /** */ FileCompressorWorker(int idx, IgniteLogger log) { super(cctx.igniteInstanceName(), "wal-file-compressor-%" + cctx.igniteInstanceName() + "%-" + idx, log); } /** */ - void start() { - thread = new IgniteThread(this); + void restart() { + assert runner() == null : "FileCompressorWorker is still running."; + + isCancelled = false; - thread.start(); + new IgniteThread(this).start(); } /** @@ -2247,7 +2260,11 @@ private void shutdown() { U.join(this, log); } - void start() { + void restart() { + assert runner() == null : "FileDecompressor is still running."; + + isCancelled = false; + new IgniteThread(this).start(); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentArchivedStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentArchivedStorage.java index e31628f40abbf..57ac848fc8295 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentArchivedStorage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentArchivedStorage.java @@ -124,6 +124,13 @@ synchronized void interrupt() { notifyAll(); } + /** + * Resets interrupted flag. + */ + void reset() { + interrupted = false; + } + /** * Check for interrupt flag was set. */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentAware.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentAware.java index a14f0cac3a325..8fbf4830b6ee7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentAware.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentAware.java @@ -238,6 +238,17 @@ public void releaseWorkSegment(long absIdx) { segmentLockStorage.releaseWorkSegment(absIdx); } + /** + * Reset interrupted flag. + */ + public void reset() { + segmentArchivedStorage.reset(); + + segmentCompressStorage.reset(); + + segmentCurrStateStorage.reset(); + } + /** * Interrupt waiting on related objects. */ @@ -249,6 +260,8 @@ public void interrupt() { segmentCurrStateStorage.interrupt(); } + + /** * Interrupt waiting on related objects. */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCompressStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCompressStorage.java index 95d4f4a770c39..d93bb8423acc4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCompressStorage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCompressStorage.java @@ -170,4 +170,11 @@ void keepUncompressedIdxFrom(long idx) { long keepUncompressedIdxFrom() { return minUncompressedIdxToKeep; } + + /** + * Reset interrupted flag. + */ + public void reset() { + interrupted = false; + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java index 5761ef9fcbb46..e45627d7110ab 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java @@ -168,4 +168,11 @@ private void checkInterrupted() throws IgniteInterruptedCheckedException { if (interrupted) throw new IgniteInterruptedCheckedException("Interrupt waiting of change current idx"); } + + /** + * Reset interrupted flag. + */ + public void reset() { + interrupted = false; + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java index 6597e4615394f..08a500041b923 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java @@ -50,9 +50,9 @@ public interface FileHandleManager { FileWriteHandle nextHandle(SegmentIO fileIO, RecordSerializer serializer) throws IOException; /** - * Start manager. + * Initialize manager. */ - void start(); + void init(); /** * On activate. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java index 1daac31cafc60..f13e79ee24384 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java @@ -179,10 +179,14 @@ private FileWriteHandleImpl currentHandle() { } /** {@inheritDoc} */ - @Override public void start() { + @Override public void init() { + walWriter = new WALWriter(log); + if (mode != WALMode.NONE && mode != WALMode.FSYNC) { - walSegmentSyncWorker = new WalSegmentSyncer(cctx.igniteInstanceName(), - cctx.kernalContext().log(WalSegmentSyncer.class)); + walSegmentSyncWorker = new WalSegmentSyncer( + cctx.igniteInstanceName(), + cctx.kernalContext().log(WalSegmentSyncer.class) + ); if (log.isInfoEnabled()) log.info("Started write-ahead log manager [mode=" + mode + ']'); @@ -195,10 +199,7 @@ private FileWriteHandleImpl currentHandle() { /** {@inheritDoc} */ @Override public void onActivate() { - if (!cctx.kernalContext().clientNode()) { - if (walSegmentSyncWorker != null) - new IgniteThread(walSegmentSyncWorker).start(); - } + } /** {@inheritDoc} */ @@ -222,10 +223,14 @@ private FileWriteHandleImpl currentHandle() { /** {@inheritDoc} */ @Override public void resumeLogging() { - walWriter = new WALWriter(log); - if (!mmap) - new IgniteThread(walWriter).start(); + walWriter.restart(); + + if (cctx.kernalContext().clientNode()) + return; + + if (walSegmentSyncWorker != null) + walSegmentSyncWorker.restart(); } /** {@inheritDoc} */ @@ -556,14 +561,22 @@ private void writeBuffer(long pos, ByteBuffer buf) throws StorageException, Igni throw se; } } + + public void restart() { + assert runner() == null : "WALWriter is still running."; + + isCancelled = false; + + new IgniteThread(this).start(); + } } /** * Syncs WAL segment file. */ - public class WalSegmentSyncer extends GridWorker { + private class WalSegmentSyncer extends GridWorker { /** Sync timeout. */ - long syncTimeout; + private final long syncTimeout; /** * @param igniteInstanceName Ignite instance name. @@ -598,6 +611,14 @@ private void shutdown() { U.join(this, log); } + + public void restart() { + assert runner() == null : "WalSegmentSyncer is running."; + + isCancelled = false; + + new IgniteThread(walSegmentSyncWorker).start(); + } } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java index e456f04c1711d..6d6ce13761081 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java @@ -108,7 +108,7 @@ private FsyncFileWriteHandle currentHandle() { } /** {@inheritDoc} */ - @Override public void start() { + @Override public void init() { //NOOP. } From 7a784504e6aa2416433d64d67f39f0e29412a95e Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 18 Dec 2018 13:42:14 +0300 Subject: [PATCH 06/21] IGNITE-10671 Fixed WALWriter shutdown() in case if it is not started. --- .../wal/filehandle/FileHandleManagerImpl.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java index f13e79ee24384..bc347533e1607 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java @@ -217,8 +217,7 @@ private FileWriteHandleImpl currentHandle() { if (walSegmentSyncWorker != null) walSegmentSyncWorker.shutdown(); - if (walWriter != null) - walWriter.shutdown(); + walWriter.shutdown(); } /** {@inheritDoc} */ @@ -412,9 +411,15 @@ else if (err != null) private void shutdown() throws IgniteInterruptedCheckedException { U.cancel(this); - LockSupport.unpark(runner()); + Thread runner = runner(); - U.join(runner()); + if (runner != null) { + LockSupport.unpark(runner); + + U.join(runner); + } + + assert walWriter.runner() == null : "WALWriter should be stopped."; } /** From fc2bb735ad229541cfebe069818a6f71d264d0fb Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 18 Dec 2018 13:53:10 +0300 Subject: [PATCH 07/21] IGNITE-10671 FileHandleManagerImpl made workers final. --- .../wal/filehandle/FileHandleManagerImpl.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java index bc347533e1607..c0031c8f95617 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java @@ -59,9 +59,9 @@ public class FileHandleManagerImpl implements FileHandleManager { private static final long DFLT_WAL_SEGMENT_SYNC_TIMEOUT = 500L; /** WAL writer worker. */ - private WALWriter walWriter; + private final WALWriter walWriter; /** Wal segment sync worker. */ - private WalSegmentSyncer walSegmentSyncWorker; + private final WalSegmentSyncer walSegmentSyncWorker; /** Context. */ protected final GridCacheSharedContext cctx; /** Logger. */ @@ -109,7 +109,7 @@ public FileHandleManagerImpl( long maxWalSegmentSize, long fsyncDelay) { this.cctx = cctx; - this.log = cctx.logger(FileHandleManagerImpl.class); + log = cctx.logger(FileHandleManagerImpl.class); this.mode = mode; this.metrics = metrics; this.mmap = mmap; @@ -119,6 +119,23 @@ public FileHandleManagerImpl( this.walBufferSize = walBufferSize; this.maxWalSegmentSize = maxWalSegmentSize; this.fsyncDelay = fsyncDelay; + walWriter = new WALWriter(log); + + if (mode != WALMode.NONE && mode != WALMode.FSYNC) { + walSegmentSyncWorker = new WalSegmentSyncer( + cctx.igniteInstanceName(), + cctx.kernalContext().log(WalSegmentSyncer.class) + ); + + if (log.isInfoEnabled()) + log.info("Initialized write-ahead log manager [mode=" + mode + ']'); + } + else { + U.quietAndWarn(log, "Initialized write-ahead log manager in NONE mode, persisted data may be lost in " + + "a case of unexpected node failure. Make sure to deactivate the cluster before shutdown."); + + walSegmentSyncWorker = null; + } } /** {@inheritDoc} */ @@ -180,26 +197,12 @@ private FileWriteHandleImpl currentHandle() { /** {@inheritDoc} */ @Override public void init() { - walWriter = new WALWriter(log); - - if (mode != WALMode.NONE && mode != WALMode.FSYNC) { - walSegmentSyncWorker = new WalSegmentSyncer( - cctx.igniteInstanceName(), - cctx.kernalContext().log(WalSegmentSyncer.class) - ); - - if (log.isInfoEnabled()) - log.info("Started write-ahead log manager [mode=" + mode + ']'); - } - else - U.quietAndWarn(log, "Started write-ahead log manager in NONE mode, persisted data may be lost in " + - "a case of unexpected node failure. Make sure to deactivate the cluster before shutdown."); - + //NOOP } /** {@inheritDoc} */ @Override public void onActivate() { - + //NOOP } /** {@inheritDoc} */ From 09a340dfbd3555281f9cfa788037db0efce27a84 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 18 Dec 2018 13:58:03 +0300 Subject: [PATCH 08/21] IGNITE-10671 Added assert detail message. --- .../cache/persistence/wal/FileWriteAheadLogManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5b8abe5989162..3d3264fddb912 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 @@ -483,7 +483,7 @@ private void startArchiverAndCompressor() { segmentAware.reset(); if (isArchiverEnabled()) { - assert archiver != null; + assert archiver != null : "FileArchiver should be initialized."; archiver.restart(); } From ea61fcd402572b4701052bf359e4c0cbf8b1b94e Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 18 Dec 2018 14:01:55 +0300 Subject: [PATCH 09/21] IGNITE-10671 Added debug logging. --- .../persistence/wal/FileWriteAheadLogManager.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 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 3d3264fddb912..12cccacae6d79 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 @@ -630,6 +630,10 @@ private void checkWalConfiguration() throws IgniteCheckedException { /** {@inheritDoc} */ @Override public void resumeLogging(WALPointer lastPtr) throws IgniteCheckedException { + if (log.isDebugEnabled()) + log.debug("File write ahead log manager resuming logging [nodeId=" + cctx.localNodeId() + + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + assert currHnd == null; assert lastPtr == null || lastPtr instanceof FileWALPointer; @@ -660,11 +664,7 @@ private void checkWalConfiguration() throws IgniteCheckedException { currHnd.finishResumeLogging(); if (mode == WALMode.BACKGROUND) { - backgroundFlushSchedule = cctx.time().schedule(new Runnable() { - @Override public void run() { - doFlush(); - } - }, flushFreq, flushFreq); + backgroundFlushSchedule = cctx.time().schedule(this::doFlush, flushFreq, flushFreq); } if (walAutoArchiveAfterInactivity > 0) From 2378919b2ff0a1888548e64979beb12c72fe8126 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 18 Dec 2018 14:20:10 +0300 Subject: [PATCH 10/21] IGNITE-10671 Fixed codestyle and javadoc. --- .../cache/persistence/wal/FileWriteAheadLogManager.java | 3 +++ .../persistence/wal/filehandle/FileHandleManagerImpl.java | 6 ++++++ 2 files changed, 9 insertions(+) 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 12cccacae6d79..86e0eb27d9e28 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 @@ -1832,6 +1832,9 @@ private void allocateRemainingFiles() throws StorageException { ); } + /** + * Restart worker in IgniteThread. + */ public void restart() { assert runner() == null : "FileArchiver is still running"; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java index c0031c8f95617..48451d5c7d7c9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java @@ -570,6 +570,9 @@ private void writeBuffer(long pos, ByteBuffer buf) throws StorageException, Igni } } + /** + * Restart worker in IgniteThread. + */ public void restart() { assert runner() == null : "WALWriter is still running."; @@ -620,6 +623,9 @@ private void shutdown() { U.join(this, log); } + /** + * Restart worker in IgniteThread. + */ public void restart() { assert runner() == null : "WalSegmentSyncer is running."; From b03e302f3d9ad0fd5e1ec2e66842752550c1247c Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Wed, 19 Dec 2018 14:09:07 +0300 Subject: [PATCH 11/21] IGNITE-10671 Fixed license, review comments. --- .../db/wal/WalCompactionSwitchOnTest.java | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index de302991e2538..15f228cdf030a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -1,5 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.apache.ignite.internal.processors.cache.persistence.db.wal; +import java.io.File; +import java.io.FileFilter; import org.apache.ignite.IgniteCache; import org.apache.ignite.cache.CacheMode; import org.apache.ignite.configuration.CacheConfiguration; @@ -13,9 +31,6 @@ import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; -import java.io.File; -import java.io.FileFilter; - public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { private boolean compactionEnabled; @@ -39,7 +54,12 @@ protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws cleanPersistenceDir(); } - public void testWalCompactionSwitchWithGap() throws Exception { + /** + * Load without compaction -> Stop -> Enable WAL Compaction -> Start + * + * @throws Exception On exception. + */ + public void testWalCompactionSwitch() throws Exception { IgniteEx ex = startGrid(0); ex.cluster().active(true); @@ -66,8 +86,7 @@ public void testWalCompactionSwitchWithGap() throws Exception { @Override public boolean apply() { File[] archivedFiles = walDir.listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { + @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".wal"); } }); @@ -84,8 +103,7 @@ public boolean accept(File pathname) { ex = startGrid(0); ex.cluster().active(true); - - + File archiveDir = U.resolveWorkDirectory( ex.configuration().getWorkDirectory(), "db/wal/archive/node00-" + ex.localNode().consistentId(), @@ -93,11 +111,9 @@ public boolean accept(File pathname) { ); GridTestUtils.waitForCondition(new GridAbsPredicate() { - @Override - public boolean apply() { + @Override public boolean apply() { File[] archivedFiles = archiveDir.listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { + @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.ZIP_SUFFIX); } }); @@ -108,8 +124,7 @@ public boolean accept(File pathname) { }, 5000); File[] tmpFiles = archiveDir.listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { + @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.TMP_SUFFIX); } }); @@ -117,8 +132,7 @@ public boolean accept(File pathname) { assertEquals(0, tmpFiles.length); } - @Override - protected void afterTest() throws Exception { + @Override protected void afterTest() throws Exception { stopAllGrids(); } } From 4d174c287dc4c137615b1ccad2db36780f775251 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Wed, 19 Dec 2018 14:34:43 +0300 Subject: [PATCH 12/21] IGNITE-10671 Fixed license, review comments. --- .../wal/FileWriteAheadLogManager.java | 7 ++-- .../db/wal/WalCompactionSwitchOnTest.java | 36 ++++++++++++++++--- 2 files changed, 36 insertions(+), 7 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 86e0eb27d9e28..b480a09dd5880 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 @@ -461,8 +461,6 @@ public void setFileIOFactory(FileIOFactory ioFactory) { segmentRouter = new SegmentRouter(walWorkDir, walArchiveDir, segmentAware, dsCfg); - walDisableContext = cctx.walState().walDisableContext(); - fileHandleManager = fileHandleManagerFactory.build( cctx, metrics, mmap, lastWALPtr::get, serializer, this::currentHandle ); @@ -634,6 +632,11 @@ private void checkWalConfiguration() throws IgniteCheckedException { log.debug("File write ahead log manager resuming logging [nodeId=" + cctx.localNodeId() + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + /* + walDisableContext is started of FileWriteAheadLogManager, so we obtain actual walDisableContext here. + */ + walDisableContext = cctx.walState().walDisableContext(); + assert currHnd == null; assert lastPtr == null || lastPtr instanceof FileWALPointer; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index 15f228cdf030a..045d9600b7c21 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.apache.ignite.internal.processors.cache.persistence.db.wal; import java.io.File; @@ -31,11 +32,19 @@ import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; +/** + * Load without compaction -> Stop -> Enable WAL Compaction -> Start. + */ public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { + /** + * + */ private boolean compactionEnabled; - @Override - protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { + /** + * @{inheritDoc} + */ + @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); cfg.setDataStorageConfiguration(new DataStorageConfiguration() @@ -50,6 +59,9 @@ protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws return cfg; } + /** + * @{inheritDoc} + */ @Override protected void beforeTest() throws Exception { cleanPersistenceDir(); } @@ -83,8 +95,11 @@ public void testWalCompactionSwitch() throws Exception { forceCheckpoint(); GridTestUtils.waitForCondition(new GridAbsPredicate() { - @Override - public boolean apply() { + + /** + * @{inheritDoc} + */ + @Override public boolean apply() { File[] archivedFiles = walDir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".wal"); @@ -103,7 +118,7 @@ public boolean apply() { ex = startGrid(0); ex.cluster().active(true); - + File archiveDir = U.resolveWorkDirectory( ex.configuration().getWorkDirectory(), "db/wal/archive/node00-" + ex.localNode().consistentId(), @@ -111,6 +126,10 @@ public boolean apply() { ); GridTestUtils.waitForCondition(new GridAbsPredicate() { + + /** + * @{inheritDoc} + */ @Override public boolean apply() { File[] archivedFiles = archiveDir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { @@ -124,6 +143,10 @@ public boolean apply() { }, 5000); File[] tmpFiles = archiveDir.listFiles(new FileFilter() { + + /** + * @{inheritDoc} + */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.TMP_SUFFIX); } @@ -132,6 +155,9 @@ public boolean apply() { assertEquals(0, tmpFiles.length); } + /** + * @{inheritDoc} + */ @Override protected void afterTest() throws Exception { stopAllGrids(); } From 44ec124b44c9df314295a5c0d5e6c177cb0121de Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Wed, 19 Dec 2018 19:01:55 +0300 Subject: [PATCH 13/21] IGNITE-10671 Fixed codestyle. --- .../persistence/db/wal/WalCompactionSwitchOnTest.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index 045d9600b7c21..a156d61f62689 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -101,12 +101,15 @@ public void testWalCompactionSwitch() throws Exception { */ @Override public boolean apply() { File[] archivedFiles = walDir.listFiles(new FileFilter() { + + /** + * @{inheritDoc} + */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".wal"); } }); - return archivedFiles.length == 39; } }, 5000); @@ -132,12 +135,15 @@ public void testWalCompactionSwitch() throws Exception { */ @Override public boolean apply() { File[] archivedFiles = archiveDir.listFiles(new FileFilter() { + + /** + * @{inheritDoc} + */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.ZIP_SUFFIX); } }); - return archivedFiles.length == 20; } }, 5000); From f2c9a517253f3e4e8ca1e2f80716280b60b568ad Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Wed, 19 Dec 2018 19:13:13 +0300 Subject: [PATCH 14/21] IGNITE-10671 Fixed javadoc. --- .../db/wal/WalCompactionSwitchOnTest.java | 39 ++++--------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index a156d61f62689..610111275cc98 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -36,14 +36,10 @@ * Load without compaction -> Stop -> Enable WAL Compaction -> Start. */ public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { - /** - * - */ + /** Compaction enabled. */ private boolean compactionEnabled; - /** - * @{inheritDoc} - */ + /** @{inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); @@ -59,9 +55,7 @@ public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { return cfg; } - /** - * @{inheritDoc} - */ + /** @{inheritDoc} */ @Override protected void beforeTest() throws Exception { cleanPersistenceDir(); } @@ -95,16 +89,9 @@ public void testWalCompactionSwitch() throws Exception { forceCheckpoint(); GridTestUtils.waitForCondition(new GridAbsPredicate() { - - /** - * @{inheritDoc} - */ @Override public boolean apply() { File[] archivedFiles = walDir.listFiles(new FileFilter() { - - /** - * @{inheritDoc} - */ + /** @{inheritDoc} */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".wal"); } @@ -129,16 +116,9 @@ public void testWalCompactionSwitch() throws Exception { ); GridTestUtils.waitForCondition(new GridAbsPredicate() { - - /** - * @{inheritDoc} - */ + /** @{inheritDoc} */ @Override public boolean apply() { File[] archivedFiles = archiveDir.listFiles(new FileFilter() { - - /** - * @{inheritDoc} - */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.ZIP_SUFFIX); } @@ -149,10 +129,7 @@ public void testWalCompactionSwitch() throws Exception { }, 5000); File[] tmpFiles = archiveDir.listFiles(new FileFilter() { - - /** - * @{inheritDoc} - */ + /** {@inheritDoc} */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.TMP_SUFFIX); } @@ -161,9 +138,7 @@ public void testWalCompactionSwitch() throws Exception { assertEquals(0, tmpFiles.length); } - /** - * @{inheritDoc} - */ + /** {@inheritDoc} */ @Override protected void afterTest() throws Exception { stopAllGrids(); } From cd0efeaf4311f8baba616211eef3829abc399379 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Wed, 19 Dec 2018 19:14:15 +0300 Subject: [PATCH 15/21] IGNITE-10671 Fixed javadoc. --- .../cache/persistence/db/wal/WalCompactionSwitchOnTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index 610111275cc98..0c4bf4949aa69 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -89,6 +89,7 @@ public void testWalCompactionSwitch() throws Exception { forceCheckpoint(); GridTestUtils.waitForCondition(new GridAbsPredicate() { + /** @{inheritDoc} */ @Override public boolean apply() { File[] archivedFiles = walDir.listFiles(new FileFilter() { /** @{inheritDoc} */ From 7fa6dcf8cd24fc405e803d0ac22608018f1abb5b Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Tue, 13 Nov 2018 16:59:56 +0300 Subject: [PATCH 16/21] IGNITE-10671 Codestyle fixes. --- .../persistence/db/wal/WalCompactionSwitchOnTest.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java index 0c4bf4949aa69..64a937cbe3a9c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java @@ -39,7 +39,7 @@ public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { /** Compaction enabled. */ private boolean compactionEnabled; - /** @{inheritDoc} */ + /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); @@ -55,13 +55,13 @@ public class WalCompactionSwitchOnTest extends GridCommonAbstractTest { return cfg; } - /** @{inheritDoc} */ + /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { cleanPersistenceDir(); } /** - * Load without compaction -> Stop -> Enable WAL Compaction -> Start + * Load without compaction -> Stop -> Enable WAL Compaction -> Start. * * @throws Exception On exception. */ @@ -89,10 +89,8 @@ public void testWalCompactionSwitch() throws Exception { forceCheckpoint(); GridTestUtils.waitForCondition(new GridAbsPredicate() { - /** @{inheritDoc} */ @Override public boolean apply() { File[] archivedFiles = walDir.listFiles(new FileFilter() { - /** @{inheritDoc} */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".wal"); } @@ -117,7 +115,6 @@ public void testWalCompactionSwitch() throws Exception { ); GridTestUtils.waitForCondition(new GridAbsPredicate() { - /** @{inheritDoc} */ @Override public boolean apply() { File[] archivedFiles = archiveDir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { @@ -130,7 +127,6 @@ public void testWalCompactionSwitch() throws Exception { }, 5000); File[] tmpFiles = archiveDir.listFiles(new FileFilter() { - /** {@inheritDoc} */ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(FilePageStoreManager.TMP_SUFFIX); } From 516ecd05ba35c89bb80bd54befd709ad2ca6ddf6 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Thu, 20 Dec 2018 17:22:19 +0300 Subject: [PATCH 17/21] IGNITE-10671 Review comments. --- .../persistence/wal/FileWriteAheadLogManager.java | 8 ++------ .../wal/aware/SegmentCurrentStateStorage.java | 2 ++ .../persistence/wal/filehandle/FileHandleManager.java | 10 ---------- .../wal/filehandle/FileHandleManagerImpl.java | 10 ---------- .../wal/filehandle/FsyncFileHandleManagerImpl.java | 10 ---------- 5 files changed, 4 insertions(+), 36 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 b480a09dd5880..5a0af0f5d2d1b 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 @@ -465,8 +465,6 @@ public void setFileIOFactory(FileIOFactory ioFactory) { cctx, metrics, mmap, lastWALPtr::get, serializer, this::currentHandle ); - fileHandleManager.init(); - lockedSegmentFileInputFactory = new LockedSegmentFileInputFactory( segmentAware, segmentRouter, @@ -486,8 +484,6 @@ private void startArchiverAndCompressor() { archiver.restart(); } - fileHandleManager.onActivate(); - if (dsCfg.isWalCompactionEnabled()) { assert compressor != null : "Compressor should be initialized."; @@ -603,6 +599,7 @@ private void checkWalConfiguration() throws IgniteCheckedException { if (log.isDebugEnabled()) log.debug("Activated file write ahead log manager [nodeId=" + cctx.localNodeId() + " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); + //NOOP implementation, we need to override it. } /** {@inheritDoc} */ @@ -666,9 +663,8 @@ private void checkWalConfiguration() throws IgniteCheckedException { currHnd.finishResumeLogging(); - if (mode == WALMode.BACKGROUND) { + if (mode == WALMode.BACKGROUND) backgroundFlushSchedule = cctx.time().schedule(this::doFlush, flushFreq, flushFreq); - } if (walAutoArchiveAfterInactivity > 0) scheduleNextInactivityPeriodElapsedCheck(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java index e45627d7110ab..d08a9b8bdeaae 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/aware/SegmentCurrentStateStorage.java @@ -174,5 +174,7 @@ private void checkInterrupted() throws IgniteInterruptedCheckedException { */ public void reset() { interrupted = false; + + forceInterrupted = false; } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java index 08a500041b923..72e53ad04606b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManager.java @@ -49,16 +49,6 @@ public interface FileHandleManager { */ FileWriteHandle nextHandle(SegmentIO fileIO, RecordSerializer serializer) throws IOException; - /** - * Initialize manager. - */ - void init(); - - /** - * On activate. - */ - void onActivate(); - /** * On deactivate. * diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java index 48451d5c7d7c9..66e84257ef449 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FileHandleManagerImpl.java @@ -195,16 +195,6 @@ private FileWriteHandleImpl currentHandle() { return (FileWriteHandleImpl)currentHandleSupplier.get(); } - /** {@inheritDoc} */ - @Override public void init() { - //NOOP - } - - /** {@inheritDoc} */ - @Override public void onActivate() { - //NOOP - } - /** {@inheritDoc} */ @Override public void onDeactivate() throws IgniteCheckedException { FileWriteHandleImpl currHnd = currentHandle(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java index 6d6ce13761081..9b219b7e41f3b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/filehandle/FsyncFileHandleManagerImpl.java @@ -107,16 +107,6 @@ private FsyncFileWriteHandle currentHandle() { return (FsyncFileWriteHandle)currentHandleSupplier.get(); } - /** {@inheritDoc} */ - @Override public void init() { - //NOOP. - } - - /** {@inheritDoc} */ - @Override public void onActivate() { - //NOOP. - } - /** {@inheritDoc} */ @Override public void onDeactivate() throws IgniteCheckedException { FsyncFileWriteHandle currHnd = currentHandle(); From fbdf75bba0f3d1bd03e99451ac36fe8b9067b0bc Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Thu, 20 Dec 2018 17:24:02 +0300 Subject: [PATCH 18/21] IGNITE-10671 Review comments. --- .../cache/persistence/wal/FileWriteAheadLogManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5a0af0f5d2d1b..776e7aaa5bc83 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 @@ -630,7 +630,7 @@ private void checkWalConfiguration() throws IgniteCheckedException { " topVer=" + cctx.discovery().topologyVersionEx() + " ]"); /* - walDisableContext is started of FileWriteAheadLogManager, so we obtain actual walDisableContext here. + walDisableContext is started after FileWriteAheadLogManager, so we obtain actual walDisableContext ref here. */ walDisableContext = cctx.walState().walDisableContext(); From 8bfa7ea445400ceaf8dd4444259929c0e319dc46 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Fri, 21 Dec 2018 13:29:19 +0300 Subject: [PATCH 19/21] IGNITE-10671 Added test to the suite. --- .../org/apache/ignite/testsuites/IgnitePdsMvccTestSuite2.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite2.java index 35928ce338e84..6a724795eb295 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite2.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite2.java @@ -36,6 +36,7 @@ import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalIteratorExceptionDuringReadTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalIteratorSwitchSegmentTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalSerializerVersionTest; +import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalCompactionSwitchOnTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalCompactionTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalRolloverTypesTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.crc.IgniteDataIntegrityTests; @@ -83,6 +84,7 @@ public static TestSuite suite() { ignoredTests.add(IgniteUidAsConsistentIdMigrationTest.class); ignoredTests.add(IgniteWalSerializerVersionTest.class); ignoredTests.add(WalCompactionTest.class); + ignoredTests.add(WalCompactionSwitchOnTest.class); ignoredTests.add(IgniteWalIteratorSwitchSegmentTest.class); ignoredTests.add(IgniteWalIteratorExceptionDuringReadTest.class); ignoredTests.add(StandaloneWalRecordsIteratorTest.class); From 0c5bc01d3eb0b704e7c17d9df26eb124ec0416e2 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Fri, 21 Dec 2018 13:31:21 +0300 Subject: [PATCH 20/21] IGNITE-10671 Javadoc fixes. --- .../cache/persistence/wal/FileWriteAheadLogManager.java | 2 ++ 1 file changed, 2 insertions(+) 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 776e7aaa5bc83..8d01ad10ed338 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 @@ -347,6 +347,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl /** Segment factory with ability locked segment during reading. */ private volatile SegmentFileInputFactory lockedSegmentFileInputFactory; + /** FileHandleManagerFactory. */ private final FileHandleManagerFactory fileHandleManagerFactory; /** @@ -2262,6 +2263,7 @@ private void shutdown() { U.join(this, log); } + /** Restart worker. */ void restart() { assert runner() == null : "FileDecompressor is still running."; From e9acb7470ea88f8f2c11984d57ee81eda4857912 Mon Sep 17 00:00:00 2001 From: Pavel Voronkin Date: Fri, 16 Nov 2018 18:56:28 +0300 Subject: [PATCH 21/21] IGNITE-10671 Added test to PDS suite. --- .../java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java index 73a237e0337e4..47bb11d260377 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite2.java @@ -58,6 +58,7 @@ import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalIteratorExceptionDuringReadTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalIteratorSwitchSegmentTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalSerializerVersionTest; +import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalCompactionSwitchOnTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalCompactionTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalDeletionArchiveFsyncTest; import org.apache.ignite.internal.processors.cache.persistence.db.wal.WalDeletionArchiveLogOnlyTest; @@ -185,6 +186,7 @@ public static void addRealPageStoreTests(TestSuite suite, Collection igno GridTestUtils.addTestIfNeeded(suite, IgniteWalSerializerVersionTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, WalCompactionTest.class, ignoredTests); + GridTestUtils.addTestIfNeeded(suite, WalCompactionSwitchOnTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, WalDeletionArchiveFsyncTest.class, ignoredTests); GridTestUtils.addTestIfNeeded(suite, WalDeletionArchiveLogOnlyTest.class, ignoredTests);