You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ib...@apache.org on 2021/02/11 13:23:46 UTC

[ignite] branch master updated: IGNITE-14139 Incorrect initialize checkpoint-runner-cpu thread pool (#8770)

This is an automated email from the ASF dual-hosted git repository.

ibessonov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new a125b53  IGNITE-14139 Incorrect initialize checkpoint-runner-cpu thread pool (#8770)
a125b53 is described below

commit a125b5359c66433220ecc07a1569bc47980b0feb
Author: Vladislav Pyatkov <vl...@gmail.com>
AuthorDate: Thu Feb 11 16:23:18 2021 +0300

    IGNITE-14139 Incorrect initialize checkpoint-runner-cpu thread pool (#8770)
---
 .../persistence/checkpoint/CheckpointWorkflow.java |  4 +-
 .../db/file/IgnitePdsCheckpointSimpleTest.java     | 87 +++++++++++++++++++---
 .../ignite/testsuites/IgnitePdsMvccTestSuite.java  |  2 +
 3 files changed, 79 insertions(+), 14 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
index 93b7fed..21fcc00 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
@@ -192,12 +192,12 @@ public class CheckpointWorkflow {
         this.checkpointReadWriteLock = checkpointReadWriteLock;
         this.dataRegions = dataRegions;
         this.cacheGroupsContexts = cacheGroupContexts;
-        this.checkpointCollectPagesInfoPool = initializeCheckpointPool();
+        this.checkpointCollectInfoThreads = checkpointCollectInfoThreads;
         this.log = logger.apply(getClass());
         this.checkpointMarkersStorage = checkpointMarkersStorage;
         this.checkpointWriteOrder = checkpointWriteOrder;
         this.igniteInstanceName = igniteInstanceName;
-        this.checkpointCollectInfoThreads = checkpointCollectInfoThreads;
+        this.checkpointCollectPagesInfoPool = initializeCheckpointPool();
     }
 
     /**
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsCheckpointSimpleTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsCheckpointSimpleTest.java
index 678296b..c452a4e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsCheckpointSimpleTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsCheckpointSimpleTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.cache.persistence.db.file;
 import java.util.concurrent.TimeUnit;
 import com.google.common.base.Strings;
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cluster.ClusterState;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
@@ -28,22 +29,30 @@ import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
+import static org.apache.ignite.configuration.DataStorageConfiguration.DFLT_CHECKPOINT_THREADS;
+
 /**
  * Puts data into grid, waits for checkpoint to start and then verifies data
  */
 public class IgnitePdsCheckpointSimpleTest extends GridCommonAbstractTest {
+    /** Checkpoint threads. */
+    public int cpThreads = DFLT_CHECKPOINT_THREADS;
+
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        DataRegionConfiguration regCfg = new DataRegionConfiguration().setPersistenceEnabled(true);
-
-        DataStorageConfiguration dsCfg = new DataStorageConfiguration()
-            .setPageSize(4 * 1024)
-            .setDefaultDataRegionConfiguration(regCfg)
-            .setCheckpointFrequency(TimeUnit.SECONDS.toMillis(10));
-
-        return cfg.setDataStorageConfiguration(dsCfg);
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName)
+            .setDataStorageConfiguration(new DataStorageConfiguration()
+                .setPageSize(4 * 1024)
+                .setDefaultDataRegionConfiguration(new DataRegionConfiguration()
+                    .setPersistenceEnabled(true))
+                .setCheckpointFrequency(TimeUnit.SECONDS.toMillis(10)));
+
+        if (cpThreads != DFLT_CHECKPOINT_THREADS) {
+            cfg.getDataStorageConfiguration()
+                .setCheckpointThreads(cpThreads);
+        }
+
+        return cfg;
     }
 
     /** {@inheritDoc} */
@@ -61,14 +70,67 @@ public class IgnitePdsCheckpointSimpleTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testStartNodeWithDefaultCpThreads() throws Exception {
+        checkCheckpointThreads();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testStartNodeWithNonDefaultCpThreads() throws Exception {
+        cpThreads = 10;
+
+        checkCheckpointThreads();
+    }
+
+    /**
+     * Checks that all checkpoint threads are present in JVM.
+     *
+     * @throws Exception If failed.
+     */
+    public void checkCheckpointThreads() throws Exception {
+        IgniteEx ignite = startGrid(0);
+
+        ignite.cluster().state(ClusterState.ACTIVE);
+
+        IgniteCache<Object, Object> cache = ignite.getOrCreateCache("cache");
+
+        cache.put(1, 1);
+
+        forceCheckpoint();
+
+        int dbCpThread = 0, ioCpRunner = 0, cpuCpRunner = 0;
+
+        for (Thread t : Thread.getAllStackTraces().keySet()) {
+            if (t.getName().contains("db-checkpoint-thread"))
+                dbCpThread++;
+
+            else if (t.getName().contains("checkpoint-runner-IO"))
+                ioCpRunner++;
+
+            else if (t.getName().contains("checkpoint-runner-cpu"))
+                cpuCpRunner++;
+        }
+
+        assertEquals(1, dbCpThread);
+        assertEquals(cpThreads, ioCpRunner);
+        assertEquals(cpThreads, cpuCpRunner);
+    }
+
+    /**
      * Checks if same data can be loaded after checkpoint.
+     *
      * @throws Exception if failed.
      */
     @Test
     public void testRecoveryAfterCpEnd() throws Exception {
         IgniteEx ignite = startGrid(0);
 
-        ignite.active(true);
+        ignite.cluster().state(ClusterState.ACTIVE);
 
         IgniteCache<Object, Object> cache = ignite.getOrCreateCache("cache");
 
@@ -80,7 +142,8 @@ public class IgnitePdsCheckpointSimpleTest extends GridCommonAbstractTest {
         stopAllGrids();
 
         IgniteEx igniteRestart = startGrid(0);
-        igniteRestart.active(true);
+
+        igniteRestart.cluster().state(ClusterState.ACTIVE);
 
         IgniteCache<Object, Object> cacheRestart = igniteRestart.getOrCreateCache("cache");
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite.java
index 220c41f..796547e 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsMvccTestSuite.java
@@ -28,6 +28,7 @@ import org.apache.ignite.internal.processors.cache.persistence.IgnitePdsDestroyC
 import org.apache.ignite.internal.processors.cache.persistence.IgnitePdsDestroyCacheWithoutCheckpointsTest;
 import org.apache.ignite.internal.processors.cache.persistence.db.IgnitePdsDataRegionMetricsTest;
 import org.apache.ignite.internal.processors.cache.persistence.db.file.DefaultPageSizeBackwardsCompatibilityTest;
+import org.apache.ignite.internal.processors.cache.persistence.db.file.IgnitePdsCheckpointSimpleTest;
 import org.apache.ignite.internal.processors.cache.persistence.db.file.IgnitePdsCheckpointSimulationWithRealCpDisabledTest;
 import org.apache.ignite.internal.processors.cache.persistence.db.file.IgnitePdsPageReplacementTest;
 import org.apache.ignite.internal.processors.cache.persistence.metastorage.IgniteMetaStorageBasicTest;
@@ -82,6 +83,7 @@ public class IgnitePdsMvccTestSuite {
 
         ignoredTests.add(IgnitePdsDestroyCacheTest.class);
         ignoredTests.add(IgnitePdsDestroyCacheWithoutCheckpointsTest.class);
+        ignoredTests.add(IgnitePdsCheckpointSimpleTest.class);
 
         return new ArrayList<>(IgnitePdsTestSuite.suite(ignoredTests));
     }