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/09/20 16:27:08 UTC
[ignite-3] branch main updated: IGNITE-17672 Support BinaryTuple comparator for sorted index B+Tree (#1107)
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 <tk...@yandex.ru>
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;