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 1be060af0a IGNITE-17672 Support BinaryTuple comparator for sorted
index B+Tree (#1107)
1be060af0a is described below
commit 1be060af0a4ef88bf14b272094f39a1f0fbbeb4d
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Tue Sep 20 19:27:03 2022 +0300
IGNITE-17672 Support BinaryTuple comparator for sorted index B+Tree (#1107)
---
.../pagememory/index/sorted/SortedIndexTree.java | 13 +++++++++++--
.../pagememory/index/sorted/io/SortedIndexTreeIo.java | 19 +++++++++++++++----
2 files changed, 26 insertions(+), 6 deletions(-)
diff --git
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
index d03afdffd5..4903c794e6 100644
---
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
+++
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
@@ -24,6 +24,8 @@ import org.apache.ignite.internal.pagememory.reuse.ReuseList;
import org.apache.ignite.internal.pagememory.tree.BplusTree;
import org.apache.ignite.internal.pagememory.tree.io.BplusIo;
import org.apache.ignite.internal.pagememory.util.PageLockListener;
+import org.apache.ignite.internal.schema.BinaryTuple;
+import org.apache.ignite.internal.storage.index.BinaryTupleComparator;
import
org.apache.ignite.internal.storage.pagememory.index.sorted.io.SortedIndexTreeInnerIo;
import
org.apache.ignite.internal.storage.pagememory.index.sorted.io.SortedIndexTreeIo;
import
org.apache.ignite.internal.storage.pagememory.index.sorted.io.SortedIndexTreeLeafIo;
@@ -38,6 +40,9 @@ public class SortedIndexTree extends
BplusTree<SortedIndexRowKey, SortedIndexRow
/** Data page reader instance to read payload from data pages. */
private final DataPageReader dataPageReader;
+ /** Comparator of index columns {@link BinaryTuple}s. */
+ private final BinaryTupleComparator binaryTupleComparator;
+
/**
* Constructor.
*
@@ -50,6 +55,7 @@ public class SortedIndexTree extends
BplusTree<SortedIndexRowKey, SortedIndexRow
* @param metaPageId Meta page ID.
* @param reuseList Reuse list.
* @param initNew {@code True} if new tree should be created.
+ * @param binaryTupleComparator Comparator of index columns {@link
BinaryTuple}s.
* @throws IgniteInternalCheckedException If failed.
*/
public SortedIndexTree(
@@ -61,7 +67,8 @@ public class SortedIndexTree extends
BplusTree<SortedIndexRowKey, SortedIndexRow
AtomicLong globalRmvId,
long metaPageId,
@Nullable ReuseList reuseList,
- boolean initNew
+ boolean initNew,
+ BinaryTupleComparator binaryTupleComparator
) throws IgniteInternalCheckedException {
super("SortedIndexTree_" + grpId, grpId, grpName, partId, pageMem,
lockLsnr, globalRmvId, metaPageId, reuseList);
@@ -69,6 +76,8 @@ public class SortedIndexTree extends
BplusTree<SortedIndexRowKey, SortedIndexRow
dataPageReader = new DataPageReader(pageMem, grpId,
statisticsHolder());
+ this.binaryTupleComparator = binaryTupleComparator;
+
initTree(initNew);
}
@@ -91,7 +100,7 @@ public class SortedIndexTree extends
BplusTree<SortedIndexRowKey, SortedIndexRow
throws IgniteInternalCheckedException {
SortedIndexTreeIo sortedIndexTreeIo = (SortedIndexTreeIo) io;
- return sortedIndexTreeIo.compare(dataPageReader, partId, pageAddr,
idx, row);
+ return sortedIndexTreeIo.compare(dataPageReader,
binaryTupleComparator, partId, pageAddr, idx, row);
}
@Override
diff --git
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
index c912aa23d1..8deac78c54 100644
---
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
+++
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
@@ -28,7 +28,9 @@ import java.util.UUID;
import org.apache.ignite.internal.pagememory.datapage.DataPageReader;
import org.apache.ignite.internal.pagememory.tree.io.BplusIo;
import org.apache.ignite.internal.pagememory.util.PageUtils;
+import org.apache.ignite.internal.schema.BinaryTuple;
import org.apache.ignite.internal.storage.RowId;
+import org.apache.ignite.internal.storage.index.BinaryTupleComparator;
import
org.apache.ignite.internal.storage.pagememory.index.freelist.IndexColumns;
import
org.apache.ignite.internal.storage.pagememory.index.freelist.ReadIndexColumnsValue;
import
org.apache.ignite.internal.storage.pagememory.index.sorted.SortedIndexRow;
@@ -97,13 +99,23 @@ public interface SortedIndexTreeIo {
/**
* Compare the {@link SortedIndexRowKey} from the page with passed {@link
SortedIndexRowKey}.
*
+ * @param dataPageReader Data page reader.
+ * @param binaryTupleComparator Comparator of index columns {@link
BinaryTuple}s.
+ * @param partitionId Partition ID.
* @param pageAddr Page address.
* @param idx Element's index.
* @param rowKey Lookup index row key.
* @return Comparison result.
+ * @throws IgniteInternalCheckedException If failed.
*/
- default int compare(DataPageReader dataPageReader, int partitionId, long
pageAddr, int idx, SortedIndexRowKey rowKey)
- throws IgniteInternalCheckedException {
+ default int compare(
+ DataPageReader dataPageReader,
+ BinaryTupleComparator binaryTupleComparator,
+ int partitionId,
+ long pageAddr,
+ int idx,
+ SortedIndexRowKey rowKey
+ ) throws IgniteInternalCheckedException {
assert rowKey instanceof SortedIndexRow;
SortedIndexRow sortedIndexRow = (SortedIndexRow) rowKey;
@@ -119,8 +131,7 @@ public interface SortedIndexTreeIo {
ByteBuffer indexColumnsBuffer =
ByteBuffer.wrap(indexColumnsTraversal.result());
- // TODO: IGNITE-17672 Compare by BinaryTuple
- int cmp =
indexColumnsBuffer.compareTo(sortedIndexRow.indexColumns().valueBuffer());
+ int cmp = binaryTupleComparator.compare(indexColumnsBuffer,
sortedIndexRow.indexColumns().valueBuffer());
if (cmp != 0) {
return cmp;