You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2022/09/27 12:02:37 UTC
[ignite] branch master updated: IGNITE-17764 Fix performance drop on index find operation - Fixes #10269.
This is an automated email from the ASF dual-hosted git repository.
alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 3b0b5ed9a41 IGNITE-17764 Fix performance drop on index find operation - Fixes #10269.
3b0b5ed9a41 is described below
commit 3b0b5ed9a41fd9f3249f8c42bb59ba0e3ceb55d1
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Tue Sep 27 14:58:17 2022 +0300
IGNITE-17764 Fix performance drop on index find operation - Fixes #10269.
Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
---
.../benchmarks/jmh/tree/IndexFindBenchmark.java | 209 +++++++++++++++++++++
.../cache/query/index/sorted/IndexKeyType.java | 5 +-
...partorImpl.java => IndexRowComparatorImpl.java} | 14 +-
.../query/index/sorted/QueryIndexDefinition.java | 2 +-
.../query/index/sorted/QueryIndexRowHandler.java | 5 +-
.../query/index/sorted/inline/InlineIndexTree.java | 7 +-
.../inline/types/BooleanInlineIndexKeyType.java | 7 +-
.../inline/types/ByteInlineIndexKeyType.java | 7 +-
.../inline/types/DoubleInlineIndexKeyType.java | 7 +-
.../inline/types/FloatInlineIndexKeyType.java | 7 +-
.../inline/types/IntegerInlineIndexKeyType.java | 7 +-
.../inline/types/LongInlineIndexKeyType.java | 7 +-
.../inline/types/NumericInlineIndexKeyType.java | 8 -
.../inline/types/ShortInlineIndexKeyType.java | 7 +-
.../query/index/sorted/keys/BooleanIndexKey.java | 2 +-
.../query/index/sorted/keys/ByteIndexKey.java | 3 +-
.../query/index/sorted/keys/DateIndexKey.java | 3 +-
.../query/index/sorted/keys/DecimalIndexKey.java | 2 +-
.../query/index/sorted/keys/DoubleIndexKey.java | 2 +-
.../query/index/sorted/keys/FloatIndexKey.java | 2 +-
.../cache/query/index/sorted/keys/IndexKey.java | 4 +-
.../query/index/sorted/keys/IntegerIndexKey.java | 12 +-
.../index/sorted/keys/JavaObjectIndexKey.java | 5 -
.../query/index/sorted/keys/LongIndexKey.java | 13 +-
.../query/index/sorted/keys/NullIndexKey.java | 10 -
.../query/index/sorted/keys/ShortIndexKey.java | 13 +-
.../query/index/sorted/keys/StringIndexKey.java | 11 --
.../query/index/sorted/keys/TimeIndexKey.java | 10 -
.../query/index/sorted/keys/TimestampIndexKey.java | 11 --
.../query/index/sorted/keys/UuidIndexKey.java | 10 -
.../cache/query/reducer/IndexQueryReducer.java | 4 +-
31 files changed, 264 insertions(+), 152 deletions(-)
diff --git a/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/IndexFindBenchmark.java b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/IndexFindBenchmark.java
new file mode 100644
index 00000000000..0b215f945a0
--- /dev/null
+++ b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/IndexFindBenchmark.java
@@ -0,0 +1,209 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.benchmarks.jmh.tree;
+
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexRow;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexSearchRowImpl;
+import org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndex;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKeyFactory;
+import org.apache.ignite.internal.util.lang.GridCursor;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Level;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+/**
+ * Index find benchmark.
+ */
+@State(Scope.Benchmark)
+@Fork(1)
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3, time = 3)
+@Measurement(iterations = 5, time = 10)
+public class IndexFindBenchmark {
+ /** Items count. */
+ private static final int CNT = 1_000_000;
+
+ /** Items in each range. */
+ private static final int RANGE = 1;
+
+ /** Cache name. */
+ private static final String CACHE_NAME = "cache";
+
+ /** Ignite. */
+ private IgniteEx ignite;
+
+ /** */
+ InlineIndex idxId;
+
+ /** */
+ InlineIndex idxName;
+
+ /** */
+ InlineIndex idxSalary;
+
+ /** */
+ @Benchmark
+ public void findOneIndex() {
+ int key = ThreadLocalRandom.current().nextInt(CNT - RANGE);
+
+ find(idxSalary, searchRowSalary(key), searchRowSalary(key + RANGE));
+ }
+
+ /** */
+ @Benchmark
+ public void findThreeIndexes() {
+ int key = ThreadLocalRandom.current().nextInt(CNT);
+
+ find(idxId, searchRowId(key), searchRowId(key + RANGE));
+ find(idxName, searchRowName(key), searchRowName(key + RANGE));
+ find(idxSalary, searchRowSalary(key), searchRowSalary(key + RANGE));
+ }
+
+ /** */
+ private static void find(InlineIndex idx, IndexRow lower, IndexRow upper) {
+ try {
+ GridCursor<IndexRow> cur = idx.find(lower, upper, true, false, 0, null);
+
+ int cnt = 0;
+
+ while (cur.next())
+ cnt++;
+
+ assert cnt == RANGE;
+ }
+ catch (IgniteCheckedException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ /** */
+ private static IndexRow searchRow(Object key, IndexKeyType type) {
+ IndexKey[] keys = new IndexKey[] { IndexKeyFactory.wrap(key, type, null, null), null };
+ return new IndexSearchRowImpl(keys, null);
+ }
+
+ /** */
+ private static IndexRow searchRowId(int key) {
+ return searchRow(key, IndexKeyType.INT);
+ }
+
+ /** */
+ private static IndexRow searchRowName(int key) {
+ return searchRow("name" + String.format("%07d", key), IndexKeyType.STRING);
+ }
+
+ /** */
+ private static IndexRow searchRowSalary(int key) {
+ return searchRow(key * 1_000d, IndexKeyType.DOUBLE);
+ }
+
+ /**
+ * Initiate Ignite and caches.
+ */
+ @Setup(Level.Trial)
+ public void setup() {
+ ignite = (IgniteEx)Ignition.start(new IgniteConfiguration().setIgniteInstanceName("test"));
+
+ CacheConfiguration<Integer, Person> cfg = new CacheConfiguration<>(CACHE_NAME);
+ cfg.setIndexedTypes(Integer.class, Person.class);
+
+ ignite.getOrCreateCache(cfg);
+
+ try (IgniteDataStreamer<Integer, Person> dataLdr = ignite.dataStreamer(CACHE_NAME)) {
+ for (int i = 0; i < CNT; i++)
+ dataLdr.addData(i, new Person(i, "name" + String.format("%07d", i), i * 1_000d));
+ }
+
+ for (InlineIndex idx : ignite.context().indexProcessor().treeIndexes(CACHE_NAME, true)) {
+ if (idx.name().contains("_ID_"))
+ idxId = idx;
+ else if (idx.name().contains("_NAME_"))
+ idxName = idx;
+ else if (idx.name().contains("_SALARY_"))
+ idxSalary = idx;
+ }
+ }
+
+ /**
+ * Stop Ignite instance.
+ */
+ @TearDown
+ public void tearDown() {
+ ignite.close();
+ }
+
+ /**
+ * Run benchmarks.
+ *
+ * @param args Args.
+ * @throws Exception Exception.
+ */
+ public static void main(String[] args) throws Exception {
+ final Options options = new OptionsBuilder()
+ .include(IndexFindBenchmark.class.getSimpleName())
+ .build();
+
+ new Runner(options).run();
+ }
+
+ /** */
+ private static class Person {
+ /** */
+ @QuerySqlField(index = true)
+ private final int id;
+
+ /** */
+ @QuerySqlField(index = true)
+ private final String name;
+
+ /** */
+ @QuerySqlField(index = true)
+ private final double salary;
+
+ /** */
+ private Person(int id, String name, double salary) {
+ this.id = id;
+ this.name = name;
+ this.salary = salary;
+ }
+ }
+}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java
index ef84f7748eb..838acace5d0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java
@@ -32,7 +32,6 @@ import java.util.Collections;
import java.util.Comparator;
import org.apache.ignite.IgniteException;
import org.apache.ignite.internal.processors.query.QueryUtils;
-import org.apache.ignite.internal.util.typedef.internal.A;
import org.apache.ignite.internal.util.typedef.internal.U;
/**
@@ -187,8 +186,8 @@ public enum IndexKeyType {
if (code == UNKNOWN.code)
return UNKNOWN;
- A.ensure(code >= 0 && code < keyTypesByCode.length,
- "code >= 0 && code < keyTypesByCode.length [code=" + code + ']');
+ if (code < 0 || code >= keyTypesByCode.length)
+ throw new IllegalArgumentException("Argument is invalid: " + code);
return keyTypesByCode[code];
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparatorImpl.java
similarity index 88%
rename from modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java
rename to modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparatorImpl.java
index c750d0d0bbf..859ad842974 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparatorImpl.java
@@ -33,24 +33,26 @@ import static org.apache.ignite.internal.cache.query.index.sorted.inline.types.N
* 1. NULL is the least value.
* 2. Comparison of different types is not supported.
*/
-public class IndexRowCompartorImpl implements IndexRowComparator {
+public class IndexRowComparatorImpl implements IndexRowComparator {
/** Key type settings for this index. */
protected final IndexKeyTypeSettings keyTypeSettings;
/** */
- public IndexRowCompartorImpl(IndexKeyTypeSettings settings) {
+ public IndexRowComparatorImpl(IndexKeyTypeSettings settings) {
keyTypeSettings = settings;
}
/** {@inheritDoc} */
@Override public int compareKey(long pageAddr, int off, int maxSize, IndexKey key, InlineIndexKeyType type) {
- if (type.type() == IndexKeyType.UNKNOWN)
+ IndexKeyType inlineKeyType = type.type();
+
+ if (inlineKeyType == IndexKeyType.UNKNOWN)
return CANT_BE_COMPARE;
// Value can be set up by user in query with different data type. Don't compare uncomparable types in this comparator.
- if (isInlineComparable(type, key)) {
+ if (inlineKeyType == key.type() || isInlineComparable(type, key)) {
// If inlining of POJO is not supported then don't compare it here.
- if (type.type() != IndexKeyType.JAVA_OBJECT || keyTypeSettings.inlineObjSupported())
+ if (inlineKeyType != IndexKeyType.JAVA_OBJECT || keyTypeSettings.inlineObjSupported())
return type.compare(pageAddr, off, maxSize, key);
else
return CANT_BE_COMPARE;
@@ -88,7 +90,7 @@ public class IndexRowCompartorImpl implements IndexRowComparator {
else if (rkey == NullIndexKey.INSTANCE)
return 1;
- if (lkey.isComparableTo(rkey))
+ if (lkey.type() == rkey.type() || lkey.isComparableTo(rkey))
return lkey.compare(rkey);
else if (rkey.isComparableTo(lkey))
return -rkey.compare(lkey);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java
index 626727acb84..933ebf16c4f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java
@@ -89,7 +89,7 @@ public class QueryIndexDefinition implements SortedIndexDefinition {
this.isAffinity = isAffinity;
this.keyDefs = keyDefs;
this.keyTypeSettings = keyTypeSettings;
- this.rowComparator = new IndexRowCompartorImpl(keyTypeSettings);
+ this.rowComparator = new IndexRowComparatorImpl(keyTypeSettings);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java
index 7a7d4e69dbe..58ba2dfdcdb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java
@@ -18,7 +18,6 @@
package org.apache.ignite.internal.cache.query.index.sorted;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import org.apache.ignite.IgniteCheckedException;
@@ -60,8 +59,8 @@ public class QueryIndexRowHandler implements InlineIndexRowHandler {
List<InlineIndexKeyType> keyTypes,
IndexKeyTypeSettings keyTypeSettings
) {
- this.keyTypes = Collections.unmodifiableList(keyTypes);
- this.keyDefs = Collections.unmodifiableList(new ArrayList<>(keyDefs.values()));
+ this.keyTypes = new ArrayList<>(keyTypes);
+ this.keyDefs = new ArrayList<>(keyDefs.values());
props = new GridQueryProperty[keyDefs.size()];
int propIdx = 0;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
index 8f24a4a5c0e..b2641fa93ed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
@@ -271,8 +271,7 @@ public class InlineIndexTree extends BPlusTree<IndexRow, IndexRow> {
int off = io.offset(idx);
List<IndexKeyDefinition> keyDefs = rowHnd.indexKeyDefinitions();
-
- List<InlineIndexKeyType> keyTypes = rowHandler().inlineIndexKeyTypes();
+ List<InlineIndexKeyType> keyTypes = rowHnd.inlineIndexKeyTypes();
for (keyIdx = 0; keyIdx < keyTypes.size(); keyIdx++) {
try {
@@ -281,10 +280,6 @@ public class InlineIndexTree extends BPlusTree<IndexRow, IndexRow> {
if (row.key(keyIdx) == null)
return 0;
- // Other keys are not inlined. Should compare as rows.
- if (keyIdx >= keyTypes.size())
- break;
-
int maxSize = inlineSize - fieldOff;
InlineIndexKeyType keyType = keyTypes.get(keyIdx);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
index 8dd4b211249..ab96937a376 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
import org.apache.ignite.internal.cache.query.index.sorted.keys.BooleanIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -47,9 +48,9 @@ public class BooleanInlineIndexKeyType extends NumericInlineIndexKeyType<Boolean
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- boolean bool1 = PageUtils.getByte(pageAddr, off + 1) != 0;
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ boolean val = PageUtils.getByte(pageAddr, off + 1) != 0;
- return key.compareTo(bool1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
index 3290925f457..3163b09f70d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
import org.apache.ignite.internal.cache.query.index.sorted.keys.ByteIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -32,10 +33,10 @@ public class ByteInlineIndexKeyType extends NumericInlineIndexKeyType<ByteIndexK
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- byte byte1 = PageUtils.getByte(pageAddr, off + 1);
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ byte val = PageUtils.getByte(pageAddr, off + 1);
- return key.compareTo(byte1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
index 1fedcd7b43c..d8889b84492 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
import org.apache.ignite.internal.cache.query.index.sorted.keys.DoubleIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -32,10 +33,10 @@ public class DoubleInlineIndexKeyType extends NumericInlineIndexKeyType<DoubleIn
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- double val1 = Double.longBitsToDouble(PageUtils.getLong(pageAddr, off + 1));
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ double val = Double.longBitsToDouble(PageUtils.getLong(pageAddr, off + 1));
- return key.compareTo(val1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
index 5d1bc4912a4..243e2fddf18 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
import org.apache.ignite.internal.cache.query.index.sorted.keys.FloatIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -32,10 +33,10 @@ public class FloatInlineIndexKeyType extends NumericInlineIndexKeyType<FloatInde
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- float val1 = Float.intBitsToFloat(PageUtils.getInt(pageAddr, off + 1));
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ float val = Float.intBitsToFloat(PageUtils.getInt(pageAddr, off + 1));
- return key.compareTo(val1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
index b7df5ea9a21..01e8edf4031 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.IntegerIndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -49,9 +50,9 @@ public class IntegerInlineIndexKeyType extends NumericInlineIndexKeyType<Integer
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- int val1 = PageUtils.getInt(pageAddr, off + 1);
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ int val = PageUtils.getInt(pageAddr, off + 1);
- return key.compareTo(val1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
index c0e05b29421..bb40f51c3cf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.LongIndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -49,9 +50,9 @@ public class LongInlineIndexKeyType extends NumericInlineIndexKeyType<LongIndexK
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- long val1 = PageUtils.getLong(pageAddr, off + 1);
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ long val = PageUtils.getLong(pageAddr, off + 1);
- return key.compareTo(val1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java
index 52aa5e5f259..9164065a8e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java
@@ -35,14 +35,6 @@ public abstract class NumericInlineIndexKeyType<T extends IndexKey> extends Null
return key instanceof NumericIndexKey;
}
- /** {@inheritDoc} */
- @Override public int compare0(long pageAddr, int off, IndexKey key) {
- return -Integer.signum(compareNumeric((NumericIndexKey)key, pageAddr, off));
- }
-
- /** Compare numeric index key with inlined value. */
- public abstract int compareNumeric(NumericIndexKey key, long pageAddr, int off);
-
/** {@inheritDoc} */
@Override protected int inlineSize0(T key) {
return keySize + 1;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
index 7aa72dbcd6d..630347d1e1a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.ShortIndexKey;
import org.apache.ignite.internal.pagemem.PageUtils;
@@ -32,10 +33,10 @@ public class ShortInlineIndexKeyType extends NumericInlineIndexKeyType<ShortInde
}
/** {@inheritDoc} */
- @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
- short val1 = PageUtils.getShort(pageAddr, off + 1);
+ @Override public int compare0(long pageAddr, int off, IndexKey key) {
+ short val = PageUtils.getShort(pageAddr, off + 1);
- return key.compareTo(val1);
+ return -Integer.signum(((NumericIndexKey)key).compareTo(val));
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
index 202dea0905d..833ed63d1ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
@@ -82,7 +82,7 @@ public class BooleanIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Boolean.compare(key, ((BooleanIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
index 1e02ab367e5..8643e067383 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
@@ -82,8 +82,7 @@ public class ByteIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Integer.signum(Byte.compare(key, ((ByteIndexKey)o).key))
- : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java
index 196c9b49018..c7bdd3f620e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java
@@ -74,8 +74,7 @@ public class DateIndexKey extends DateTimeIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return type() == o.type() ? Long.compare(dateVal, ((DateIndexKey)o).dateVal)
- : -((DateTimeIndexKey)o).compareTo(dateVal, 0);
+ return -((DateTimeIndexKey)o).compareTo(dateVal, 0);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
index 84e0973cd2f..9a997cd6c32 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
@@ -82,7 +82,7 @@ public class DecimalIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? key.compareTo((BigDecimal)o.key()) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
index 669c4e759b8..8f585a5d294 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
@@ -82,7 +82,7 @@ public class DoubleIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Double.compare(key, ((DoubleIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
index c73f1edd103..a4db3ee780d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
@@ -82,7 +82,7 @@ public class FloatIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Float.compare(key, ((FloatIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
index 9c230ab119b..fa42cb95ab3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
@@ -40,9 +40,9 @@ public interface IndexKey {
public int compare(IndexKey o) throws IgniteCheckedException;
/**
- * @return {@code True} if index key can be compared to another index key.
+ * @return {@code True} if index key can be compared to another index key (in case keys have different types).
*/
public default boolean isComparableTo(IndexKey k) {
- return type() == k.type();
+ return false;
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
index b5170566106..744f65e8642 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
@@ -82,21 +82,11 @@ public class IntegerIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Integer.compare(key, ((IntegerIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
@Override public String toString() {
return String.valueOf(key);
}
-//
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return Integer.hashCode(key);
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof IntegerIndexKey && key == ((IntegerIndexKey)o).key;
-// }
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
index 150401f1de7..3256faf6f7c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
@@ -117,9 +117,4 @@ public abstract class JavaObjectIndexKey implements IndexKey {
@Override public String toString() {
return key().toString();
}
-
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof JavaObjectIndexKey && compare((IndexKey)o) == 0;
-// }
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
index 04ce8f014b7..80999bdac5e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
@@ -82,22 +82,11 @@ public class LongIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Long.compare(key, ((LongIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
@Override public String toString() {
return String.valueOf(key);
}
-
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return Long.hashCode(key);
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof LongIndexKey && key == ((LongIndexKey)o).key;
-// }
-
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
index 1da2125390d..a8aaa095ec6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
@@ -48,14 +48,4 @@ public class NullIndexKey implements IndexKey {
@Override public String toString() {
return "null";
}
-
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return 0;
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof NullIndexKey;
-// }
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
index a1db4935036..606ab73f310 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
@@ -82,22 +82,11 @@ public class ShortIndexKey extends NumericIndexKey {
/** {@inheritDoc} */
@Override public int compare(IndexKey o) {
- return o.type() == type() ? Integer.compare(key, ((ShortIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+ return -((NumericIndexKey)o).compareTo(key);
}
/** {@inheritDoc} */
@Override public String toString() {
return String.valueOf(key);
}
-
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return key;
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof ShortIndexKey && key == ((ShortIndexKey)o).key;
-// }
-
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
index c5368ba898f..3b136e14492 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
@@ -50,16 +50,5 @@ public class StringIndexKey implements IndexKey {
@Override public String toString() {
return key;
}
-
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return key.hashCode();
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof StringIndexKey && compare((IndexKey)o) == 0;
-// }
-
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java
index 7e2c31b0bb2..c0dd841f3c8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java
@@ -83,14 +83,4 @@ public class TimeIndexKey implements IndexKey {
@Override public String toString() {
return String.valueOf(nanos);
}
-
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return Long.hashCode(nanos);
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof TimeIndexKey && compare((IndexKey)o) == 0;
-// }
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java
index 8488f02764d..9bc2bb40407 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java
@@ -107,15 +107,4 @@ public class TimestampIndexKey extends DateTimeIndexKey {
@Override public String toString() {
return dateVal + " " + nanos;
}
-//
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return (int)(dateVal ^ dateVal >>> 32 ^ nanos ^ nanos >>> 32);
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof TimestampIndexKey && dateVal == ((TimestampIndexKey)o).dateVal && nanos == ((TimestampIndexKey)o).nanos;
-// }
-
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
index 8f17c5a5533..ecb694c8ac5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
@@ -55,14 +55,4 @@ public class UuidIndexKey implements IndexKey {
@Override public String toString() {
return String.valueOf(key);
}
-
-// /** {@inheritDoc} */
-// @Override public int hashCode() {
-// return key.hashCode();
-// }
-//
-// /** {@inheritDoc} */
-// @Override public boolean equals(Object o) {
-// return o instanceof UuidIndexKey && compare((IndexKey)o) == 0;
-// }
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java
index 724f69940b4..1a4d3c3a7c7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java
@@ -30,7 +30,7 @@ import org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
import org.apache.ignite.internal.cache.query.index.sorted.IndexRowComparator;
-import org.apache.ignite.internal.cache.query.index.sorted.IndexRowCompartorImpl;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexRowComparatorImpl;
import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKeyFactory;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -97,7 +97,7 @@ public class IndexQueryReducer<R> extends MergeSortCacheQueryReducer<R> {
private final IndexQueryResultMeta meta;
/** Every node will return the same key types for the same index, then it's possible to use simple comparator. */
- private final IndexRowComparator idxRowComp = new IndexRowCompartorImpl(null);
+ private final IndexRowComparator idxRowComp = new IndexRowComparatorImpl(null);
/** */
IndexedNodePageComparator(