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 2022/08/17 15:21:17 UTC

[ignite-3] branch main updated: IGNITE-17547 Fixed AssertionError in checkpointer (#1020)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new a9496f9cae IGNITE-17547 Fixed AssertionError in checkpointer (#1020)
a9496f9cae is described below

commit a9496f9cae96f42a858a40b6ac35b7a6b905a7b7
Author: Kirill Tkalenko <tk...@yandex.ru>
AuthorDate: Wed Aug 17 18:21:12 2022 +0300

    IGNITE-17547 Fixed AssertionError in checkpointer (#1020)
---
 .../persistence/checkpoint/Checkpointer.java       |  2 --
 .../persistence/checkpoint/CheckpointerTest.java   | 36 ++++++++++++++++++++--
 2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java
index aff2774e4f..ecf58077a0 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java
@@ -294,8 +294,6 @@ public class Checkpointer extends IgniteWorker {
                 throw new IgniteInternalCheckedException(e);
             }
 
-            assert currentCheckpointProgress.pagesToWrite() != null;
-
             updateHeartbeat();
 
             if (chp.hasDelta()) {
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java
index 3c4e6ebf22..466ec92408 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java
@@ -49,6 +49,7 @@ import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -387,6 +388,35 @@ public class CheckpointerTest {
         verify(checkpointer, times(1)).updateLastProgressAfterReleaseWriteLock();
     }
 
+    @Test
+    void testDoCheckpointNoDirtyPages() throws Exception {
+        CheckpointDirtyPages dirtyPages = spy(EMPTY);
+
+        Compactor compactor = mock(Compactor.class);
+
+        Checkpointer checkpointer = spy(new Checkpointer(
+                log,
+                "test",
+                null,
+                null,
+                createCheckpointWorkflow(dirtyPages),
+                createCheckpointPagesWriterFactory(new PartitionMetaManager(ioRegistry, PAGE_SIZE)),
+                createFilePageStoreManager(Map.of()),
+                compactor,
+                checkpointConfig
+        ));
+
+        assertDoesNotThrow(checkpointer::doCheckpoint);
+
+        verify(dirtyPages, never()).toDirtyPageIdQueue();
+        verify(checkpointer, times(1)).startCheckpointProgress();
+        verify(compactor, never()).addDeltaFiles(anyInt());
+
+        assertEquals(checkpointer.lastCheckpointProgress().currentCheckpointPagesCount(), 0);
+
+        verify(checkpointer, times(1)).updateLastProgressAfterReleaseWriteLock();
+    }
+
     @Test
     void testNextCheckpointInterval() throws Exception {
         Checkpointer checkpointer = new Checkpointer(
@@ -446,9 +476,11 @@ public class CheckpointerTest {
         )).then(answer -> {
             CheckpointProgressImpl progress = answer.getArgument(1);
 
-            progress.pagesToWrite(dirtyPages);
+            if (dirtyPages.dirtyPagesCount() > 0) {
+                progress.pagesToWrite(dirtyPages);
 
-            progress.initCounters(dirtyPages.dirtyPagesCount());
+                progress.initCounters(dirtyPages.dirtyPagesCount());
+            }
 
             ((Runnable) answer.getArgument(3)).run();
             ((Runnable) answer.getArgument(4)).run();