This is an automated email from the ASF dual-hosted git repository.
apolovtsev 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 86b8dcbe3d IGNITE-22764 Increase readability in MvPartitionStorage
tests (#4101)
86b8dcbe3d is described below
commit 86b8dcbe3d3bd10385a8747b25cb704d7250ad47
Author: Stanislav Markin <[email protected]>
AuthorDate: Wed Jul 17 11:26:43 2024 -0300
IGNITE-22764 Increase readability in MvPartitionStorage tests (#4101)
---
.../ignite/internal/table/ItInternalTableTest.java | 10 +-
.../ignite/internal/schema/BinaryRowMatcher.java | 44 +++--
.../internal/storage/MvPartitionStorage.java | 1 -
.../AbstractMvPartitionStorageConcurrencyTest.java | 15 +-
.../storage/AbstractMvPartitionStorageGcTest.java | 19 +-
.../storage/AbstractMvPartitionStorageTest.java | 202 +++++++++++----------
.../storage/impl/TestMvPartitionStorage.java | 9 +-
.../mv/AbstractPageMemoryMvPartitionStorage.java | 2 +-
.../AbstractPageMemoryMvPartitionStorageTest.java | 11 +-
...PersistentPageMemoryMvPartitionStorageTest.java | 4 +-
10 files changed, 170 insertions(+), 147 deletions(-)
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItInternalTableTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItInternalTableTest.java
index 34a65fab00..eb9931cf31 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItInternalTableTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItInternalTableTest.java
@@ -21,12 +21,12 @@ import static
org.apache.ignite.internal.TestWrappers.unwrapTableViewInternal;
import static
org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
import static
org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_REPLICA_COUNT;
import static org.apache.ignite.internal.schema.BinaryRowMatcher.equalToRow;
+import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
import static
org.apache.ignite.internal.testframework.IgniteTestUtils.testNodeName;
import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
import static org.apache.ignite.internal.util.IgniteUtils.closeAll;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -185,7 +185,7 @@ public class ItInternalTableTest extends
BaseIgniteAbstractTest {
res = internalTable.get(keyRow, node.clock().now(), node.node()).get();
- assertThat(res, is(equalToRow(keyValueRow)));
+ assertThat(res, isRow(keyValueRow));
}
@Test
@@ -217,7 +217,7 @@ public class ItInternalTableTest extends
BaseIgniteAbstractTest {
BinaryRow res = internalTable.get(keyRow, node.clock().now(),
node.node()).get();
- assertThat(res, is(equalToRow(keyValueRow2)));
+ assertThat(res, isRow(keyValueRow2));
}
@Test
@@ -278,13 +278,13 @@ public class ItInternalTableTest extends
BaseIgniteAbstractTest {
BinaryRow res = internalTable.get(keyRow, node.clock().now(),
node.node()).get();
- assertThat(res, is(equalToRow(keyValueRow)));
+ assertThat(res, isRow(keyValueRow));
tx2.commit();
res = internalTable.get(keyRow, node.clock().now(), node.node()).get();
- assertThat(res, is(equalToRow(keyValueRow2)));
+ assertThat(res, isRow(keyValueRow2));
}
@Test
diff --git
a/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/BinaryRowMatcher.java
b/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/BinaryRowMatcher.java
index f2d33f10ca..db4f9c21f7 100644
---
a/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/BinaryRowMatcher.java
+++
b/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/BinaryRowMatcher.java
@@ -17,39 +17,51 @@
package org.apache.ignite.internal.schema;
+import static org.hamcrest.Matchers.is;
+
import java.nio.ByteBuffer;
import java.util.Arrays;
-import org.hamcrest.Description;
-import org.hamcrest.TypeSafeMatcher;
+import org.hamcrest.CustomMatcher;
+import org.hamcrest.Matcher;
+import org.jetbrains.annotations.Nullable;
/** Matcher for comparing {@link BinaryRow}s. */
-public class BinaryRowMatcher extends TypeSafeMatcher<BinaryRow> {
- private final BinaryRow row;
+public class BinaryRowMatcher extends CustomMatcher<BinaryRow> {
+ private final @Nullable BinaryRow row;
- private BinaryRowMatcher(BinaryRow row) {
+ private BinaryRowMatcher(@Nullable BinaryRow row) {
+ super("Expected row to be equal to " + rowToString(row));
this.row = row;
}
- public static BinaryRowMatcher equalToRow(BinaryRow row) {
+ public static BinaryRowMatcher equalToRow(@Nullable BinaryRow row) {
return new BinaryRowMatcher(row);
}
- @Override
- protected boolean matchesSafely(BinaryRow item) {
- return row.schemaVersion() == item.schemaVersion() &&
row.tupleSlice().equals(item.tupleSlice());
+ public static Matcher<BinaryRow> isRow(@Nullable BinaryRow expectedRow) {
+ return is(equalToRow(expectedRow));
}
@Override
- public void describeTo(Description description) {
- description.appendValue(rowToString(row));
- }
+ public boolean matches(@Nullable Object o) {
+ if (row == null || o == null) {
+ return row == o; // Both are null.
+ }
- @Override
- protected void describeMismatchSafely(BinaryRow item, Description
mismatchDescription) {
- mismatchDescription.appendText("was ").appendValue(rowToString(item));
+ if (!(o instanceof BinaryRow)) {
+ return false;
+ }
+
+ BinaryRow item = (BinaryRow) o;
+
+ return row.schemaVersion() == item.schemaVersion() &&
row.tupleSlice().equals(item.tupleSlice());
}
- private static String rowToString(BinaryRow row) {
+ private static String rowToString(@Nullable BinaryRow row) {
+ if (row == null) {
+ return "{null row}";
+ }
+
ByteBuffer tupleSlice = row.tupleSlice();
byte[] array = new byte[tupleSlice.remaining()];
diff --git
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/MvPartitionStorage.java
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/MvPartitionStorage.java
index 1b33131d23..e9602b32fb 100644
---
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/MvPartitionStorage.java
+++
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/MvPartitionStorage.java
@@ -228,7 +228,6 @@ public interface MvPartitionStorage extends
ManuallyCloseable {
*
* @param timestamp Timestamp. Can't be {@code null}.
* @return Cursor.
- * @throws TxIdMismatchException If there's another pending update
associated with different transaction id.
* @throws StorageException If failed to read data from the storage.
*/
PartitionTimestampCursor scan(HybridTimestamp timestamp) throws
StorageException;
diff --git
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageConcurrencyTest.java
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageConcurrencyTest.java
index 3059a08ffd..966a8b2426 100644
---
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageConcurrencyTest.java
+++
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvPartitionStorageConcurrencyTest.java
@@ -18,11 +18,13 @@
package org.apache.ignite.internal.storage;
import static org.apache.ignite.internal.schema.BinaryRowMatcher.equalToRow;
+import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
import static org.apache.ignite.internal.testframework.IgniteTestUtils.runRace;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -73,7 +75,7 @@ public abstract class
AbstractMvPartitionStorageConcurrencyTest extends BaseMvPa
() -> scanFirstEntry(HybridTimestamp.MAX_VALUE)
);
- assertThat(read(ROW_ID, clock.now()), is(equalToRow(TABLE_ROW)));
+ assertThat(read(ROW_ID, clock.now()), isRow(TABLE_ROW));
}
}
@@ -89,7 +91,7 @@ public abstract class
AbstractMvPartitionStorageConcurrencyTest extends BaseMvPa
() -> scanFirstEntry(HybridTimestamp.MAX_VALUE)
);
- assertThat(read(ROW_ID, clock.now()), is(equalToRow(TABLE_ROW2)));
+ assertThat(read(ROW_ID, clock.now()), isRow(TABLE_ROW2));
}
}
@@ -144,7 +146,7 @@ public abstract class
AbstractMvPartitionStorageConcurrencyTest extends BaseMvPa
() -> addWrite(ROW_ID, TABLE_ROW2, TX_ID)
);
- assertThat(read(ROW_ID, HybridTimestamp.MAX_VALUE),
is(equalToRow(TABLE_ROW2)));
+ assertThat(read(ROW_ID, HybridTimestamp.MAX_VALUE),
isRow(TABLE_ROW2));
abortWrite(ROW_ID);
@@ -167,7 +169,7 @@ public abstract class
AbstractMvPartitionStorageConcurrencyTest extends BaseMvPa
() -> commitWrite(ROW_ID, clock.now())
);
- assertThat(read(ROW_ID, HybridTimestamp.MAX_VALUE),
is(equalToRow(TABLE_ROW2)));
+ assertThat(read(ROW_ID, HybridTimestamp.MAX_VALUE),
isRow(TABLE_ROW2));
assertNull(pollForVacuum(HybridTimestamp.MAX_VALUE));
@@ -270,10 +272,9 @@ public abstract class
AbstractMvPartitionStorageConcurrencyTest extends BaseMvPa
rows.removeIf(matcher::matches);
}
- @SuppressWarnings("ResultOfMethodCallIgnored")
private void scanFirstEntry(HybridTimestamp firstCommitTs) {
- try (var cursor = scan(firstCommitTs)) {
- cursor.hasNext();
+ try (PartitionTimestampCursor cursor = scan(firstCommitTs)) {
+ assertDoesNotThrow(cursor::hasNext);
}
}
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 75062ea410..96a960afe7 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
@@ -17,9 +17,8 @@
package org.apache.ignite.internal.storage;
-import static org.apache.ignite.internal.schema.BinaryRowMatcher.equalToRow;
+import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -61,13 +60,13 @@ public abstract class AbstractMvPartitionStorageGcTest
extends BaseMvPartitionSt
assertNotNull(gcedRow);
- assertThat(gcedRow.binaryRow(), is(equalToRow(TABLE_ROW)));
+ assertThat(gcedRow.binaryRow(), isRow(TABLE_ROW));
// Read from the old timestamp should return null.
assertNull(read(ROW_ID, firstCommitTs));
// Read from the newer timestamp should return last value.
- assertThat(read(ROW_ID, secondCommitTs), is(equalToRow(TABLE_ROW2)));
+ assertThat(read(ROW_ID, secondCommitTs), isRow(TABLE_ROW2));
}
@Test
@@ -78,7 +77,7 @@ public abstract class AbstractMvPartitionStorageGcTest
extends BaseMvPartitionSt
BinaryRowAndRowId row = pollForVacuum(secondCommitTs);
assertNotNull(row);
- assertThat(row.binaryRow(), is(equalToRow(TABLE_ROW)));
+ assertThat(row.binaryRow(), isRow(TABLE_ROW));
assertNull(read(ROW_ID, secondCommitTs));
@@ -98,7 +97,7 @@ public abstract class AbstractMvPartitionStorageGcTest
extends BaseMvPartitionSt
BinaryRowAndRowId row = pollForVacuum(lastCommitTs);
assertNotNull(row);
- assertThat(row.binaryRow(), is(equalToRow(TABLE_ROW)));
+ assertThat(row.binaryRow(), isRow(TABLE_ROW));
assertNull(read(ROW_ID, lastCommitTs));
@@ -121,13 +120,13 @@ public abstract class AbstractMvPartitionStorageGcTest
extends BaseMvPartitionSt
BinaryRowAndRowId row = pollForVacuum(lowWatermark);
assertNotNull(row);
- assertThat(row.binaryRow(), is(equalToRow(TABLE_ROW)));
+ assertThat(row.binaryRow(), isRow(TABLE_ROW));
// Poll the next oldest row.
row = pollForVacuum(lowWatermark);
assertNotNull(row);
- assertThat(row.binaryRow(), is(equalToRow(TABLE_ROW2)));
+ assertThat(row.binaryRow(), isRow(TABLE_ROW2));
// Nothing else to poll.
assertNull(pollForVacuum(lowWatermark));
@@ -144,7 +143,7 @@ public abstract class AbstractMvPartitionStorageGcTest
extends BaseMvPartitionSt
BinaryRowAndRowId row = pollForVacuum(HybridTimestamp.MAX_VALUE);
assertNotNull(row);
- assertThat(row.binaryRow(), is(equalToRow(TABLE_ROW)));
+ assertThat(row.binaryRow(), isRow(TABLE_ROW));
}
@Test
@@ -158,6 +157,6 @@ public abstract class AbstractMvPartitionStorageGcTest
extends BaseMvPartitionSt
BinaryRowAndRowId row = pollForVacuum(HybridTimestamp.MAX_VALUE);
assertNotNull(row);
- assertThat(row.binaryRow(), is(equalToRow(TABLE_ROW)));
+ assertThat(row.binaryRow(), isRow(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 513df2c142..e859083cdb 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
@@ -18,7 +18,7 @@
package org.apache.ignite.internal.storage;
import static java.util.stream.Collectors.toList;
-import static org.apache.ignite.internal.schema.BinaryRowMatcher.equalToRow;
+import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.allOf;
@@ -29,6 +29,7 @@ import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -97,7 +98,7 @@ public abstract class AbstractMvPartitionStorageTest extends
BaseMvPartitionStor
addWrite(rowId, binaryRow, txId);
// Read with timestamp returns write-intent.
- assertThat(read(rowId, clock.now()), is(equalToRow(binaryRow)));
+ assertThat(read(rowId, clock.now()), isRow(binaryRow));
// Remove write.
addWrite(rowId, null, txId);
@@ -143,8 +144,8 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertNull(read(rowId, tsBefore));
// Row is valid at the time during and after writing.
- assertThat(read(rowId, tsExact), is(equalToRow(binaryRow)));
- assertThat(read(rowId, tsAfter), is(equalToRow(binaryRow)));
+ assertThat(read(rowId, tsExact), isRow(binaryRow));
+ assertThat(read(rowId, tsAfter), isRow(binaryRow));
TestValue newValue = new TestValue(30, "duh");
@@ -156,22 +157,22 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
// Same checks, but now there are two different versions.
assertNull(read(rowId, tsBefore));
- assertThat(read(rowId, HybridTimestamp.MAX_VALUE),
is(equalToRow(newRow)));
+ assertThat(read(rowId, HybridTimestamp.MAX_VALUE), isRow(newRow));
- assertThat(read(rowId, tsExact), is(equalToRow(binaryRow)));
- assertThat(read(rowId, tsAfter), is(equalToRow(newRow)));
- assertThat(read(rowId, clock.now()), is(equalToRow(newRow)));
+ assertThat(read(rowId, tsExact), isRow(binaryRow));
+ assertThat(read(rowId, tsAfter), isRow(newRow));
+ assertThat(read(rowId, clock.now()), isRow(newRow));
// Only latest time behavior changes after commit.
HybridTimestamp newRowCommitTs = clock.now();
commitWrite(rowId, newRowCommitTs);
- assertThat(read(rowId, HybridTimestamp.MAX_VALUE),
is(equalToRow(newRow)));
+ assertThat(read(rowId, HybridTimestamp.MAX_VALUE), isRow(newRow));
- assertThat(read(rowId, tsExact), is(equalToRow(binaryRow)));
- assertThat(read(rowId, tsAfter), is(equalToRow(binaryRow)));
+ assertThat(read(rowId, tsExact), isRow(binaryRow));
+ assertThat(read(rowId, tsAfter), isRow(binaryRow));
- assertThat(read(rowId, clock.now()), is(equalToRow(newRow)));
+ assertThat(read(rowId, clock.now()), isRow(newRow));
// Remove.
UUID removeTxId = newTransactionId();
@@ -182,9 +183,9 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertNull(read(rowId, HybridTimestamp.MAX_VALUE));
- assertThat(read(rowId, tsExact), is(equalToRow(binaryRow)));
- assertThat(read(rowId, tsAfter), is(equalToRow(binaryRow)));
- assertThat(read(rowId, newRowCommitTs), is(equalToRow(newRow)));
+ assertThat(read(rowId, tsExact), isRow(binaryRow));
+ assertThat(read(rowId, tsAfter), isRow(binaryRow));
+ assertThat(read(rowId, newRowCommitTs), isRow(newRow));
assertNull(read(rowId, clock.now()));
@@ -198,8 +199,8 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertNull(read(rowId, removeTs));
assertNull(read(rowId, clock.now()));
- assertThat(read(rowId, tsExact), is(equalToRow(binaryRow)));
- assertThat(read(rowId, tsAfter), is(equalToRow(binaryRow)));
+ assertThat(read(rowId, tsExact), isRow(binaryRow));
+ assertThat(read(rowId, tsAfter), isRow(binaryRow));
}
/**
@@ -289,62 +290,73 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
RowId rowId2 = new RowId(PARTITION_ID, 10, 20);
TestKey key1 = new TestKey(1, "1");
- BinaryRow binaryRow11 = binaryRow(key1, value11);
- BinaryRow binaryRow12 = binaryRow(key1, value12);
+ BinaryRow binaryRow1Commited = binaryRow(key1, value11);
+ BinaryRow binaryRow1WriteIntent = binaryRow(key1, value12);
- addWrite(rowId1, binaryRow11, txId);
+ addWrite(rowId1, binaryRow1Commited, txId);
HybridTimestamp commitTs1 = clock.now();
commitWrite(rowId1, commitTs1);
- addWrite(rowId1, binaryRow12, newTransactionId());
+ addWrite(rowId1, binaryRow1WriteIntent, newTransactionId());
TestKey key2 = new TestKey(2, "2");
- BinaryRow binaryRow21 = binaryRow(key2, value21);
- BinaryRow binaryRow22 = binaryRow(key2, value22);
+ BinaryRow binaryRow2Commited = binaryRow(key2, value21);
+ BinaryRow binaryRow2WriteIntent = binaryRow(key2, value22);
- addWrite(rowId2, binaryRow21, txId);
+ addWrite(rowId2, binaryRow2Commited, txId);
HybridTimestamp commitTs2 = clock.now();
commitWrite(rowId2, commitTs2);
- addWrite(rowId2, binaryRow22, newTransactionId());
+ addWrite(rowId2, binaryRow2WriteIntent, newTransactionId());
try (PartitionTimestampCursor cursor = scan(clock.now())) {
assertThrows(IllegalStateException.class, () ->
cursor.committed(commitTs1));
- assertTrue(cursor.hasNext());
- while (cursor.hasNext()) {
+ {
+ // First row
assertTrue(cursor.hasNext());
-
ReadResult res = cursor.next();
assertNotNull(res);
assertTrue(res.isWriteIntent());
assertFalse(res.isEmpty());
- BinaryRow expectedRow1;
- BinaryRow expectedRow2;
- HybridTimestamp commitTs;
+ // Since scan doesn't ends exactly on the commit timestamp,
write-intent row is returned.
+ assertThat(res.binaryRow(), isRow(binaryRow1WriteIntent));
+
+ // Committed row is visible for exact commit timestamp.
+ assertThat(cursor.committed(commitTs1),
isRow(binaryRow1Commited));
+
+ // No row because there is a commited row after given cursor
timestamp.
+ assertThat(cursor.committed(before(commitTs1)), isRow(null));
+
+ // Write-intent row because a given cursor timestamp is after
the most recent commit.
+ assertThat(cursor.committed(after(commitTs1)),
isRow(binaryRow1WriteIntent));
+ }
+
+ {
+ // Second row
+ assertTrue(cursor.hasNext());
+ ReadResult res = cursor.next();
- TestKey readKey = key(res.binaryRow());
+ assertNotNull(res);
+ assertTrue(res.isWriteIntent());
+ assertFalse(res.isEmpty());
- if (readKey.equals(key1)) {
- expectedRow1 = binaryRow11;
- expectedRow2 = binaryRow12;
- commitTs = commitTs1;
- } else {
- expectedRow1 = binaryRow21;
- expectedRow2 = binaryRow22;
- commitTs = commitTs2;
- }
+ // Since scan doesn't ends exactly on the commit timestamp,
write-intent row is returned.
+ assertThat(res.binaryRow(), isRow(binaryRow2WriteIntent));
- assertThat(res.binaryRow(), is(equalToRow(expectedRow2)));
+ // Committed row is visible for exact commit timestamp.
+ assertThat(cursor.committed(commitTs2),
isRow(binaryRow2Commited));
- BinaryRow previousRow = cursor.committed(commitTs);
+ // No row because there is a commited row after given cursor
timestamp.
+ assertThat(cursor.committed(before(commitTs2)), isRow(null));
- assertNotNull(previousRow);
- assertThat(previousRow, is(equalToRow(expectedRow1)));
+ // Write-intent row because a given cursor timestamp is after
the most recent commit.
+ assertThat(cursor.committed(after(commitTs2)),
isRow(binaryRow2WriteIntent));
}
+ // Cursor is exhausted.
assertFalse(cursor.hasNext());
assertFalse(cursor.hasNext());
@@ -354,6 +366,14 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
}
}
+ private static HybridTimestamp before(HybridTimestamp ts) {
+ return ts.subtractPhysicalTime(1);
+ }
+
+ private static HybridTimestamp after(HybridTimestamp ts) {
+ return ts.addPhysicalTime(1);
+ }
+
private static List<TestValue> convert(PartitionTimestampCursor cursor) {
try (cursor) {
return cursor.stream()
@@ -370,7 +390,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
ReadResult foundResult = storage.read(rowId,
HybridTimestamp.MAX_VALUE);
assertThat(foundResult.rowId(), is(rowId));
- assertThat(foundResult.binaryRow(), is(equalToRow(binaryRow)));
+ assertThat(foundResult.binaryRow(), isRow(binaryRow));
}
@Test
@@ -381,7 +401,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
ReadResult foundResult = storage.read(rowId,
HybridTimestamp.MAX_VALUE);
assertThat(foundResult.rowId(), is(rowId));
- assertThat(foundResult.binaryRow(), is(equalToRow(binaryRow)));
+ assertThat(foundResult.binaryRow(), isRow(binaryRow));
}
@Test
@@ -394,7 +414,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
ReadResult foundResult = storage.read(rowId2,
HybridTimestamp.MAX_VALUE);
assertThat(foundResult.rowId(), is(rowId2));
- assertThat(foundResult.binaryRow(), is(equalToRow(binaryRow2)));
+ assertThat(foundResult.binaryRow(), isRow(binaryRow2));
}
@Test
@@ -408,7 +428,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
ReadResult foundResult = storage.read(rowId2,
HybridTimestamp.MAX_VALUE);
assertThat(foundResult.rowId(), is(rowId2));
- assertThat(foundResult.binaryRow(), is(equalToRow(binaryRow2)));
+ assertThat(foundResult.binaryRow(), isRow(binaryRow2));
}
@Test
@@ -419,7 +439,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, commitTimestamp);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -431,7 +451,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
HybridTimestamp afterCommit = clock.now();
BinaryRow foundRow = read(rowId, afterCommit);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -444,7 +464,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, beforeCommit);
- assertThat(foundRow, is(nullValue()));
+ assertThat(foundRow, isRow(null));
}
@Test
@@ -459,7 +479,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, secondVersionTs);
- assertThat(foundRow, is(equalToRow(binaryRow2)));
+ assertThat(foundRow, isRow(binaryRow2));
}
@Test
@@ -473,7 +493,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, firstVersionTs);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -489,7 +509,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, tsInBetween);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -501,7 +521,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
HybridTimestamp latestTs = clock.now();
BinaryRow foundRow = read(rowId, latestTs);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -514,7 +534,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
HybridTimestamp latestTs = clock.now();
BinaryRow foundRow = read(rowId, latestTs);
- assertThat(foundRow, is(equalToRow(binaryRow2)));
+ assertThat(foundRow, isRow(binaryRow2));
}
@Test
@@ -532,7 +552,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, HybridTimestamp.MAX_VALUE);
- assertThat(foundRow, is(equalToRow(binaryRow2)));
+ assertThat(foundRow, isRow(binaryRow2));
}
@Test
@@ -541,7 +561,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow returnedRow = addWrite(rowId, binaryRow2, txId);
- assertThat(returnedRow, is(equalToRow(binaryRow)));
+ assertThat(returnedRow, isRow(binaryRow));
}
@Test
@@ -551,13 +571,13 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow returnedRow = addWrite(rowId, binaryRow2, txId);
- assertThat(returnedRow, is(nullValue()));
+ assertThat(returnedRow, isRow(null));
}
@Test
void addWriteCommittedTombstone() {
addWriteCommitted(ROW_ID, binaryRow, clock.now());
- assertThat(read(ROW_ID, HybridTimestamp.MAX_VALUE),
is(equalToRow(binaryRow)));
+ assertThat(read(ROW_ID, HybridTimestamp.MAX_VALUE), isRow(binaryRow));
addWriteCommitted(ROW_ID, null, clock.now());
assertNull(read(ROW_ID, HybridTimestamp.MAX_VALUE));
@@ -581,7 +601,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, HybridTimestamp.MAX_VALUE);
- assertThat(foundRow, is(nullValue()));
+ assertThat(foundRow, isRow(null));
}
@Test
@@ -594,7 +614,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, clock.now());
- assertThat(foundRow, is(nullValue()));
+ assertThat(foundRow, isRow(null));
}
@Test
@@ -608,7 +628,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, firstTimestamp);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -617,7 +637,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow rowFromRemoval = addWrite(rowId, null, txId);
- assertThat(rowFromRemoval, is(equalToRow(binaryRow)));
+ assertThat(rowFromRemoval, isRow(binaryRow));
}
@Test
@@ -627,7 +647,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow rowFromRemoval = addWrite(rowId, null, newTransactionId());
- assertThat(rowFromRemoval, is(nullValue()));
+ assertThat(rowFromRemoval, isRow(null));
}
@Test
@@ -648,7 +668,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, clock.now());
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -658,11 +678,11 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
abortWrite(rowId);
- assertThat(read(rowId, HybridTimestamp.MAX_VALUE),
is(equalToRow(binaryRow)));
+ assertThat(read(rowId, HybridTimestamp.MAX_VALUE), isRow(binaryRow));
commitWrite(rowId, clock.now());
- assertThat(read(rowId, HybridTimestamp.MAX_VALUE),
is(equalToRow(binaryRow)));
+ assertThat(read(rowId, HybridTimestamp.MAX_VALUE), isRow(binaryRow));
}
@Test
@@ -676,7 +696,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, HybridTimestamp.MAX_VALUE);
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
@Test
@@ -687,7 +707,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, clock.now());
- assertThat(foundRow, is(nullValue()));
+ assertThat(foundRow, isRow(null));
}
@Test
@@ -696,7 +716,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, HybridTimestamp.MAX_VALUE);
- assertThat(foundRow, is(nullValue()));
+ assertThat(foundRow, isRow(null));
}
@Test
@@ -705,7 +725,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow returnedRow = abortWrite(rowId);
- assertThat(returnedRow, is(equalToRow(binaryRow)));
+ assertThat(returnedRow, isRow(binaryRow));
}
@Test
@@ -716,7 +736,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
// We see the uncommitted row.
assertThat(foundResult.rowId(), is(rowId));
- assertThat(foundResult.binaryRow(), is(equalToRow(binaryRow3)));
+ assertThat(foundResult.binaryRow(), isRow(binaryRow3));
}
@Test
@@ -748,7 +768,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertNull(res.transactionId());
assertNull(res.commitTableId());
assertEquals(ReadResult.UNDEFINED_COMMIT_PARTITION_ID,
res.commitPartitionId());
- assertThat(res.binaryRow(), is(equalToRow(binaryRow)));
+ assertThat(res.binaryRow(), isRow(binaryRow));
res = storage.read(rowId, clock.now());
@@ -757,7 +777,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertEquals(txId2, res.transactionId());
assertEquals(COMMIT_TABLE_ID, res.commitTableId());
assertEquals(PARTITION_ID, res.commitPartitionId());
- assertThat(res.binaryRow(), is(equalToRow(binaryRow2)));
+ assertThat(res.binaryRow(), isRow(binaryRow2));
}
private RowId commitAbortAndAddUncommitted() {
@@ -787,7 +807,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
ReadResult result = cursor.next();
assertThat(result.rowId(), is(rowId));
- assertThat(result.binaryRow(), is(equalToRow(binaryRow3)));
+ assertThat(result.binaryRow(), isRow(binaryRow3));
assertFalse(cursor.hasNext());
}
@@ -799,7 +819,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
BinaryRow foundRow = read(rowId, clock.now());
- assertThat(foundRow, is(equalToRow(binaryRow)));
+ assertThat(foundRow, isRow(binaryRow));
}
/**
@@ -867,21 +887,21 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertNotNull(res);
assertNull(res.newestCommitTimestamp());
- assertThat(res.binaryRow(), is(equalToRow(binaryRow)));
+ assertThat(res.binaryRow(), isRow(binaryRow));
// Read between two commits.
res = storage.read(rowId, betweenCommits);
assertNotNull(res);
assertNull(res.newestCommitTimestamp());
- assertThat(res.binaryRow(), is(equalToRow(binaryRow)));
+ assertThat(res.binaryRow(), isRow(binaryRow));
// Read at exact time of second commit.
res = storage.read(rowId, second);
assertNotNull(res);
assertNull(res.newestCommitTimestamp());
- assertThat(res.binaryRow(), is(equalToRow(binaryRow2)));
+ assertThat(res.binaryRow(), isRow(binaryRow2));
// Read after second commit (write intent).
res = storage.read(rowId, after);
@@ -889,7 +909,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertNotNull(res);
assertNotNull(res.newestCommitTimestamp());
assertEquals(second, res.newestCommitTimestamp());
- assertThat(res.binaryRow(), is(equalToRow(binaryRow3)));
+ assertThat(res.binaryRow(), isRow(binaryRow3));
}
@Test
@@ -940,7 +960,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
return null;
});
- assertThat(read(higherRowId, clock.now()), is(equalToRow(binaryRow)));
+ assertThat(read(higherRowId, clock.now()), isRow(binaryRow));
}
@Test
@@ -955,7 +975,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
return null;
});
- assertThat(read(lowerRowId, clock.now()), is(equalToRow(binaryRow)));
+ assertThat(read(lowerRowId, clock.now()), isRow(binaryRow));
}
@Test
@@ -1072,11 +1092,11 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
assertTrue(next.isWriteIntent());
assertThat(next.rowId(), is(rowIdAndCommitTs.get1()));
- assertThat(next.binaryRow(), is(equalToRow(binaryRow2)));
+ assertThat(next.binaryRow(), isRow(binaryRow2));
BinaryRow committedRow = cursor.committed(rowIdAndCommitTs.get2());
- assertThat(committedRow, is(equalToRow(binaryRow)));
+ assertThat(committedRow, isRow(binaryRow));
}
}
@@ -1161,7 +1181,7 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
addWriteCommitted(rowId, binaryRow, clock.now());
// Read with timestamp returns write-intent.
- assertThat(storage.read(rowId, clock.now()).binaryRow(),
is(equalToRow(binaryRow)));
+ assertThat(storage.read(rowId, clock.now()).binaryRow(),
isRow(binaryRow));
}
@Test
@@ -1173,8 +1193,8 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
addWriteCommitted(rowId, binaryRow, ts1);
addWriteCommitted(rowId, binaryRow2, clock.now());
- assertThat(storage.read(rowId, clock.now()).binaryRow(),
is(equalToRow(binaryRow2)));
- assertThat(storage.read(rowId, ts1).binaryRow(),
is(equalToRow(binaryRow)));
+ assertThat(storage.read(rowId, clock.now()).binaryRow(),
isRow(binaryRow2));
+ assertThat(storage.read(rowId, ts1).binaryRow(), isRow(binaryRow));
}
@Test
@@ -1299,10 +1319,10 @@ public abstract class AbstractMvPartitionStorageTest
extends BaseMvPartitionStor
try (PartitionTimestampCursor cursor =
scan(scanTsProvider.scanTimestamp(clock))) {
cursor.next();
- cursor.committed(commitTs1);
+ assertDoesNotThrow(() -> cursor.committed(commitTs1));
ReadResult result2 = cursor.next();
- assertThat(result2.binaryRow(), is(equalToRow(binaryRow2)));
+ assertThat(result2.binaryRow(), isRow(binaryRow2));
assertFalse(cursor.hasNext());
}
diff --git
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/impl/TestMvPartitionStorage.java
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/impl/TestMvPartitionStorage.java
index 9393b857a7..058b8574b3 100644
---
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/impl/TestMvPartitionStorage.java
+++
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/impl/TestMvPartitionStorage.java
@@ -502,14 +502,7 @@ public class TestMvPartitionStorage implements
MvPartitionStorage {
throw new IllegalStateException();
}
- // We don't check if row conforms the key filter here, because
we've already checked it.
- ReadResult read = read(currentChain, timestamp, null);
-
- if (read.transactionId() == null) {
- return read.binaryRow();
- }
-
- return null;
+ return read(currentChain, timestamp, null).binaryRow();
}
@Override
diff --git
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
index 3f66000c20..71dbad0a29 100644
---
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
+++
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
@@ -253,7 +253,7 @@ public abstract class AbstractPageMemoryMvPartitionStorage
implements MvPartitio
}
private static boolean lookingForLatestVersion(HybridTimestamp timestamp) {
- return timestamp == HybridTimestamp.MAX_VALUE;
+ return HybridTimestamp.MAX_VALUE.equals(timestamp);
}
ReadResult findLatestRowVersion(VersionChain versionChain) {
diff --git
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
index 353fc2d350..3607ed7a1c 100644
---
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
+++
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
@@ -18,9 +18,8 @@
package org.apache.ignite.internal.storage.pagememory.mv;
import static java.util.stream.Collectors.joining;
-import static org.apache.ignite.internal.schema.BinaryRowMatcher.equalToRow;
+import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
import java.util.stream.IntStream;
import org.apache.ignite.internal.hlc.HybridTimestamp;
@@ -55,7 +54,7 @@ abstract class AbstractPageMemoryMvPartitionStorageTest
extends AbstractMvPartit
BinaryRow foundRow = read(rowId, HybridTimestamp.MAX_VALUE);
- assertThat(foundRow, is(equalToRow(longRow)));
+ assertThat(foundRow, isRow(longRow));
}
private BinaryRow rowStoredInFragments() {
@@ -81,7 +80,7 @@ abstract class AbstractPageMemoryMvPartitionStorageTest
extends AbstractMvPartit
BinaryRow foundRow = read(rowId, clock.now());
- assertThat(foundRow, is(equalToRow(longRow)));
+ assertThat(foundRow, isRow(longRow));
}
@Test
@@ -93,7 +92,7 @@ abstract class AbstractPageMemoryMvPartitionStorageTest
extends AbstractMvPartit
try (PartitionTimestampCursor cursor =
storage.scan(HybridTimestamp.MAX_VALUE)) {
BinaryRow foundRow = cursor.next().binaryRow();
- assertThat(foundRow, is(equalToRow(longRow)));
+ assertThat(foundRow, isRow(longRow));
}
}
@@ -108,7 +107,7 @@ abstract class AbstractPageMemoryMvPartitionStorageTest
extends AbstractMvPartit
try (PartitionTimestampCursor cursor =
storage.scan(HybridTimestamp.MAX_VALUE)) {
BinaryRow foundRow = cursor.next().binaryRow();
- assertThat(foundRow, is(equalToRow(longRow)));
+ assertThat(foundRow, isRow(longRow));
}
}
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 f6a590e5d6..e9045da568 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
@@ -20,7 +20,7 @@ package org.apache.ignite.internal.storage.pagememory.mv;
import static
org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
import static
org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_PARTITION_COUNT;
import static
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.FINISHED;
-import static org.apache.ignite.internal.schema.BinaryRowMatcher.equalToRow;
+import static org.apache.ignite.internal.schema.BinaryRowMatcher.isRow;
import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
@@ -113,7 +113,7 @@ class PersistentPageMemoryMvPartitionStorageTest extends
AbstractPageMemoryMvPar
restartStorage();
- assertThat(read(rowId, HybridTimestamp.MAX_VALUE),
is(equalToRow(binaryRow)));
+ assertThat(read(rowId, HybridTimestamp.MAX_VALUE), isRow(binaryRow));
}
private void restartStorage() throws Exception {