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;