IGNITE-8111 Add extra validation for WAL segment size - Fixes #3768. Signed-off-by: dpavlov <dpav...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/97524668 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/97524668 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/97524668 Branch: refs/heads/ignite-6083 Commit: 975246687c9d143830501340e597a35d1a4c492a Parents: a4653b7 Author: denis.garus <d.ga...@isimplelab.com> Authored: Wed Apr 11 13:01:22 2018 +0300 Committer: dpavlov <dpav...@apache.org> Committed: Wed Apr 11 13:01:22 2018 +0300 ---------------------------------------------------------------------- .../configuration/DataStorageConfiguration.java | 6 ++-- .../DataStorageConfigurationValidationTest.java | 33 ++++++++++++++++++-- .../db/wal/IgniteWalFlushFailoverTest.java | 4 +-- ...lFlushMultiNodeFailoverAbstractSelfTest.java | 4 +-- 4 files changed, 39 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/97524668/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java index a433760..747efd8 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java @@ -533,12 +533,14 @@ public class DataStorageConfiguration implements Serializable { /** * Sets size of a WAL segment. + * If value is not set (or zero), {@link #DFLT_WAL_SEGMENT_SIZE} will be used. * - * @param walSegmentSize WAL segment size. 64 MB is used by default. Maximum value is 2Gb. + * @param walSegmentSize WAL segment size. Value must be between 512Kb and 2Gb. * @return {@code This} for chaining. */ public DataStorageConfiguration setWalSegmentSize(int walSegmentSize) { - A.ensure(walSegmentSize >= 0, "WAL segment size must be non-negative and less than 2 Gb."); + if (walSegmentSize != 0) + A.ensure(walSegmentSize >= 512 * 1024, "WAL segment size must be between 512Kb and 2Gb."); this.walSegmentSize = walSegmentSize; http://git-wip-us.apache.org/repos/asf/ignite/blob/97524668/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/DataStorageConfigurationValidationTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/DataStorageConfigurationValidationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/DataStorageConfigurationValidationTest.java index 7f667ee..9471a82 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/DataStorageConfigurationValidationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/DataStorageConfigurationValidationTest.java @@ -31,11 +31,10 @@ public class DataStorageConfigurationValidationTest extends TestCase { * * @throws Exception If failed. */ - public void testWalSegmentSizeOveflow() throws Exception { + public void testWalSegmentSizeOverflow() throws Exception { final DataStorageConfiguration cfg = new DataStorageConfiguration(); GridTestUtils.assertThrows(null, new Callable<Void>() { - /** {@inheritDoc} */ @Override public Void call() { cfg.setWalSegmentSize(1 << 31); @@ -43,4 +42,34 @@ public class DataStorageConfigurationValidationTest extends TestCase { } }, IllegalArgumentException.class, null); } + + /** + * @throws Exception If failed. + */ + public void testSetWalSegmentSizeShouldThrowExceptionWhenSizeLessThen512Kb() throws Exception { + final DataStorageConfiguration cfg = new DataStorageConfiguration(); + + GridTestUtils.assertThrows(null, new Callable<Void>() { + @Override public Void call() throws Exception { + cfg.setWalSegmentSize(512 * 1024 - 1); + + return null; + } + }, IllegalArgumentException.class, null); + } + + /** + * @throws Exception If failed. + */ + public void testSetWalSegmentSizeShouldBeOkWhenSizeBetween512KbAnd2Gb() throws Exception { + final DataStorageConfiguration cfg = new DataStorageConfiguration(); + + cfg.setWalSegmentSize(512 * 1024); + + assertEquals(512 * 1024, cfg.getWalSegmentSize()); + + cfg.setWalSegmentSize(Integer.MAX_VALUE); + + assertEquals(Integer.MAX_VALUE, cfg.getWalSegmentSize()); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/97524668/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushFailoverTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushFailoverTest.java index 042a447..351a42c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushFailoverTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushFailoverTest.java @@ -92,8 +92,8 @@ public class IgniteWalFlushFailoverTest extends GridCommonAbstractTest { .setDefaultDataRegionConfiguration( new DataRegionConfiguration().setMaxSize(2048L * 1024 * 1024).setPersistenceEnabled(true)) .setWalMode(WALMode.BACKGROUND) - .setWalBufferSize(128 * 1024)// Setting WAL Segment size to high values forces flushing by timeout. - .setWalSegmentSize(flushByTimeout ? 500_000 : 50_000); + .setWalBufferSize(1024 * 1024)// Setting WAL Segment size to high values forces flushing by timeout. + .setWalSegmentSize(flushByTimeout ? 2 * 1024 * 1024 : 512 * 1024); cfg.setDataStorageConfiguration(memCfg); http://git-wip-us.apache.org/repos/asf/ignite/blob/97524668/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java index fe16328..cc0986a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java @@ -106,8 +106,8 @@ public abstract class IgniteWalFlushMultiNodeFailoverAbstractSelfTest extends Gr .setDefaultDataRegionConfiguration( new DataRegionConfiguration().setMaxSize(2048L * 1024 * 1024).setPersistenceEnabled(true)) .setWalMode(this.walMode()) - .setWalSegmentSize(50_000) - .setWalBufferSize(50_000); + .setWalSegmentSize(512 * 1024) + .setWalBufferSize(512 * 1024); cfg.setDataStorageConfiguration(memCfg);