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

rpuch 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 6ba472e3068 IGNITE-27140 Add tests for MvPartitionStorage 
implementations (#7041)
6ba472e3068 is described below

commit 6ba472e3068bc6c49c2145048b0a9031e7f5b77d
Author: Roman Puchkovskiy <[email protected]>
AuthorDate: Mon Nov 24 12:09:28 2025 +0400

    IGNITE-27140 Add tests for MvPartitionStorage implementations (#7041)
---
 .../storage/AbstractMvPartitionStorageGcTest.java  | 17 ++++++
 .../storage/AbstractMvPartitionStorageTest.java    | 61 ++++++++++++++++++++++
 ...PersistentPageMemoryMvPartitionStorageTest.java |  2 +-
 3 files changed, 79 insertions(+), 1 deletion(-)

diff --git 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageGcTest.java
 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageGcTest.java
index 913e60f5c07..42ec3f92945 100644
--- 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageGcTest.java
+++ 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageGcTest.java
@@ -19,9 +19,11 @@ package org.apache.ignite.internal.storage;
 
 import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+import java.util.UUID;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.junit.jupiter.api.Test;
 
@@ -161,4 +163,19 @@ public abstract class AbstractMvPartitionStorageGcTest 
extends BaseMvPartitionSt
         assertNotNull(row);
         assertThat(row.binaryRow(), isRow(TABLE_ROW));
     }
+
+    @Test
+    void testTombstoneAndAbortWriteAndGcAndAddWriteAndCommit() {
+        UUID txId = newTransactionId();
+
+        addAndCommit(TABLE_ROW);
+        addAndCommit(null);
+
+        addWrite(ROW_ID, TABLE_ROW2, txId);
+        abortWrite(ROW_ID, txId);
+
+        pollForVacuum(HybridTimestamp.MAX_VALUE);
+
+        assertDoesNotThrow(() -> addAndCommit(TABLE_ROW));
+    }
 }
diff --git 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageTest.java
 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageTest.java
index 812c390282a..6773e022206 100644
--- 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageTest.java
+++ 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageTest.java
@@ -327,6 +327,17 @@ public abstract class AbstractMvPartitionStorageTest 
extends BaseMvPartitionStor
         assertNull(read(rowId, beforeAbortTimestamp.addPhysicalTime(1)));
     }
 
+    @Test
+    void testRepeatedAddWriteAndAbortWriteForSameKey() {
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        abortWrite(ROW_ID, txId);
+
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        abortWrite(ROW_ID, txId);
+
+        assertNull(read(ROW_ID, clock.now()));
+    }
+
     @Test
     void testAbortWriteForNotExistingVersionChain() {
         HybridTimestamp beforeAbortTimestamp = clock.now();
@@ -475,6 +486,56 @@ public abstract class AbstractMvPartitionStorageTest 
extends BaseMvPartitionStor
         assertThat(read(rowId, commitTimestamp.addPhysicalTime(1)), 
isRow(binaryRow));
     }
 
+    @Test
+    void testRepeatedAddWriteAndCommitWriteForSameKey() {
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        commitWrite(ROW_ID, clock.now(), txId);
+
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        commitWrite(ROW_ID, clock.now(), txId);
+
+        assertNotNull(read(ROW_ID, clock.now()));
+    }
+
+    @Test
+    void testTripleAddWriteFollowedByCommitWrite() {
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        addWrite(ROW_ID, TABLE_ROW2, txId);
+        addWrite(ROW_ID, TABLE_ROW, txId);
+
+        commitWrite(ROW_ID, clock.now(), txId);
+
+        assertNotNull(read(ROW_ID, clock.now()));
+    }
+
+    @Test
+    void testQuadrupleAddWriteFollowedByCommitWrite() {
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        addWrite(ROW_ID, TABLE_ROW2, txId);
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        addWrite(ROW_ID, TABLE_ROW2, txId);
+
+        commitWrite(ROW_ID, clock.now(), txId);
+
+        assertNotNull(read(ROW_ID, clock.now()));
+    }
+
+    @Test
+    void testReplaceWithAddWriteInNotTheMostRecentWrite() {
+        UUID txId2 = newTransactionId();
+        RowId rowId2 = new RowId(PARTITION_ID);
+
+        addWrite(ROW_ID, TABLE_ROW, txId);
+        addWrite(rowId2, TABLE_ROW, txId2);
+        addWrite(ROW_ID, TABLE_ROW2, txId);
+
+        commitWrite(ROW_ID, clock.now(), txId);
+        commitWrite(rowId2, clock.now(), txId2);
+
+        assertNotNull(read(ROW_ID, clock.now()));
+        assertNotNull(read(rowId2, clock.now()));
+    }
+
     @Test
     void testCommitWriteForNotExistingVersionChain() {
         HybridTimestamp commitTimestamp = clock.now();
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
index a9472607573..bd9b80ad52b 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
@@ -63,7 +63,7 @@ class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPar
     private StorageConfiguration storageConfig;
 
     @InjectExecutorService
-    ExecutorService executorService;
+    private ExecutorService executorService;
 
     @WorkDirectory
     private Path workDir;

Reply via email to