You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tk...@apache.org on 2022/10/12 15:37:06 UTC
[ignite-3] branch main updated: IGNITE-17878 Added bounds to the sorted index scan (#1192)
This is an automated email from the ASF dual-hosted git repository.
tkalkirill 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 21649593ee IGNITE-17878 Added bounds to the sorted index scan (#1192)
21649593ee is described below
commit 21649593eec6dbdc95b6ca52b7525abcef9feaa2
Author: Ivan Bessonov <be...@gmail.com>
AuthorDate: Wed Oct 12 18:37:02 2022 +0300
IGNITE-17878 Added bounds to the sorted index scan (#1192)
---
.../internal/storage/index/AbstractSortedIndexStorageTest.java | 2 +-
.../internal/storage/rocksdb/RocksDbMvPartitionStorage.java | 4 ++--
.../storage/rocksdb/index/RocksDbBinaryTupleComparator.java | 9 +++++++++
.../storage/rocksdb/index/RocksDbSortedIndexStorage.java | 4 ++--
4 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
index 6f241dd086..fde893d544 100644
--- a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
+++ b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
@@ -202,7 +202,7 @@ public abstract class AbstractSortedIndexStorageTest {
TableIndexView indexConfig = tablesCfg.indexes().get(indexDefinition.name()).value();
- return tableStorage.getOrCreateSortedIndex(0, indexConfig.id());
+ return tableStorage.getOrCreateSortedIndex(TEST_PARTITION, indexConfig.id());
}
/**
diff --git a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorage.java b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorage.java
index 865f125430..4352a306aa 100644
--- a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorage.java
+++ b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorage.java
@@ -1246,14 +1246,14 @@ public class RocksDbMvPartitionStorage implements MvPartitionStorage {
/**
* Creates a prefix of all keys in the given partition.
*/
- private byte[] partitionStartPrefix() {
+ public byte[] partitionStartPrefix() {
return unsignedShortAsBytes(partitionId);
}
/**
* Creates a prefix of all keys in the next partition, used as an exclusive bound.
*/
- private byte[] partitionEndPrefix() {
+ public byte[] partitionEndPrefix() {
return unsignedShortAsBytes(partitionId + 1);
}
diff --git a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbBinaryTupleComparator.java b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbBinaryTupleComparator.java
index 6a97f22ddd..541138600c 100644
--- a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbBinaryTupleComparator.java
+++ b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbBinaryTupleComparator.java
@@ -65,6 +65,15 @@ public class RocksDbBinaryTupleComparator extends AbstractComparator {
ByteBuffer firstBinaryTupleBuffer = a.slice().order(ByteOrder.LITTLE_ENDIAN);
ByteBuffer secondBinaryTupleBuffer = b.slice().order(ByteOrder.LITTLE_ENDIAN);
+ // Handle partition bounds.
+ if (!firstBinaryTupleBuffer.hasRemaining()) {
+ return -1;
+ }
+
+ if (!secondBinaryTupleBuffer.hasRemaining()) {
+ return 1;
+ }
+
int compareTuples = comparator.compare(firstBinaryTupleBuffer, secondBinaryTupleBuffer);
return compareTuples == 0 ? compareRowIds(a, b) : compareTuples;
diff --git a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorage.java b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorage.java
index 99539633a6..7fbedcc63c 100644
--- a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorage.java
+++ b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorage.java
@@ -161,14 +161,14 @@ public class RocksDbSortedIndexStorage implements SortedIndexStorage {
}
private Cursor<ByteBuffer> createScanCursor(byte @Nullable [] lowerBound, byte @Nullable [] upperBound) {
- Slice upperBoundSlice = upperBound == null ? null : new Slice(upperBound);
+ Slice upperBoundSlice = upperBound == null ? new Slice(partitionStorage.partitionEndPrefix()) : new Slice(upperBound);
ReadOptions options = new ReadOptions().setIterateUpperBound(upperBoundSlice);
RocksIterator it = indexCf.newIterator(options);
if (lowerBound == null) {
- it.seekToFirst();
+ it.seek(partitionStorage.partitionStartPrefix());
} else {
it.seek(lowerBound);
}