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

Reply via email to