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);
         }