This is an automated email from the ASF dual-hosted git repository.
shishkovilja 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 c8fbf3592ef IGNITE-27399 Keep order in IndexQueryResultMeta message
(#12591)
c8fbf3592ef is described below
commit c8fbf3592ef66cb66fd1f7278e518adb968da8bb
Author: Vladimir Steshin <[email protected]>
AuthorDate: Mon Jan 19 10:36:14 2026 +0300
IGNITE-27399 Keep order in IndexQueryResultMeta message (#12591)
---
.../cache/query/index/IndexQueryResultMeta.java | 67 ++++++++++++++++------
1 file changed, 51 insertions(+), 16 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java
b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java
index 1516611d842..453f73bdd0a 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.cache.query.index;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -25,8 +26,10 @@ import
org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
import
org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings;
import org.apache.ignite.internal.cache.query.index.sorted.MetaPageInfo;
import
org.apache.ignite.internal.cache.query.index.sorted.SortedIndexDefinition;
+import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.plugin.extensions.communication.Message;
+import org.jetbrains.annotations.Nullable;
/**
* Metadata for IndexQuery response. This information is required to be sent
to a node that initiated a query.
@@ -37,9 +40,13 @@ public class IndexQueryResultMeta implements Message {
@Order(0)
private IndexKeyTypeSettings keyTypeSettings;
- /** Index key definitions. */
- @Order(value = 1, method = "keyDefinitions")
- private LinkedHashMap<String, IndexKeyDefinition> keyDefs;
+ /** Index names order holder. Should be serialized together with the
definitions. */
+ @Order(value = 1, method = "orderedIndexNames")
+ private @Nullable String[] idxNames;
+
+ /** Index definitions serialization holder. Should be serialized together
with the names. */
+ @Order(value = 2, method = "orderedIndexDefinitions")
+ private @Nullable IndexKeyDefinition[] idxDefs;
/** */
public IndexQueryResultMeta() {
@@ -50,14 +57,18 @@ public class IndexQueryResultMeta implements Message {
public IndexQueryResultMeta(SortedIndexDefinition def, int critSize) {
keyTypeSettings = def.keyTypeSettings();
- keyDefs = U.newLinkedHashMap(critSize);
-
Iterator<Map.Entry<String, IndexKeyDefinition>> keys =
def.indexKeyDefinitions().entrySet().iterator();
- for (int i = 0; i < critSize; i++) {
- Map.Entry<String, IndexKeyDefinition> key = keys.next();
+ if (critSize > 0) {
+ idxNames = new String[critSize];
+ idxDefs = new IndexKeyDefinition[critSize];
- keyDefs.put(key.getKey(), key.getValue());
+ for (int i = 0; i < critSize; i++) {
+ Map.Entry<String, IndexKeyDefinition> key = keys.next();
+
+ idxNames[i] = key.getKey();
+ idxDefs[i] = key.getValue();
+ }
}
}
@@ -76,15 +87,39 @@ public class IndexQueryResultMeta implements Message {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ if (F.isEmpty(idxNames) && F.isEmpty(idxDefs))
+ return U.newLinkedHashMap(0);
+
+ assert idxNames.length == idxDefs.length : "Number of index names and
index definitions must be equal " +
+ "[idxNames=" + Arrays.toString(idxNames) + ", idxDefs=" +
Arrays.toString(idxDefs) + "]";
+
+ LinkedHashMap<String, IndexKeyDefinition> idxDefsMap =
U.newLinkedHashMap(idxNames.length);
+
+ for (int i = 0; i < idxNames.length; i++)
+ idxDefsMap.put(idxNames[i], idxDefs[i]);
+
+ return idxDefsMap;
}
- /** */
- public void keyDefinitions(Map<String, IndexKeyDefinition> keyDefs) {
- this.keyDefs = keyDefs == null
- ? null
- : keyDefs instanceof LinkedHashMap ? (LinkedHashMap)keyDefs : new
LinkedHashMap<>(keyDefs);
+ /** @return Index names with proper order. */
+ public @Nullable String[] orderedIndexNames() {
+ return idxNames;
+ }
+
+ /** Stores index names with proper order to build the linked map later. */
+ public void orderedIndexNames(@Nullable String[] idxNames) {
+ this.idxNames = idxNames;
+ }
+
+ /** @return Index definitions with proper order. */
+ public @Nullable IndexKeyDefinition[] orderedIndexDefinitions() {
+ return idxDefs;
+ }
+
+ /** Process the index definitions with proper order and buils the linked
map. */
+ public void orderedIndexDefinitions(@Nullable IndexKeyDefinition[]
idxDefs) {
+ this.idxDefs = idxDefs;
}
}