shishkovilja commented on code in PR #12591:
URL: https://github.com/apache/ignite/pull/12591#discussion_r2682301271
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
Review Comment:
As I see, method has no duplicated calls, so I suggest to construct map in
it:
```
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;
}
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -37,9 +41,16 @@ 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 before the definitions.
*/
Review Comment:
```suggestion
/** Index names order holder. Should be serialized together with the
definitions. */
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ 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 Collection<String> orderedIndexNames() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.keySet();
+ }
+
+ /**
+ * Stores index names with proper order to build the linked map later.
+ * Should be called once and before the setting of the definitions and the
map.
+ */
+ public void orderedIndexNames(@Nullable List<String> idxNames) {
+ idxDefsMap = null;
Review Comment:
```suggestion
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ 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 Collection<String> orderedIndexNames() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.keySet();
Review Comment:
```suggestion
return idxNames;
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ 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 Collection<String> orderedIndexNames() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.keySet();
+ }
+
+ /**
+ * Stores index names with proper order to build the linked map later.
+ * Should be called once and before the setting of the definitions and the
map.
+ */
+ public void orderedIndexNames(@Nullable List<String> idxNames) {
+ idxDefsMap = null;
+
+ this.idxNames = idxNames;
+ }
+
+ /** @return Index definitions with proper order. */
+ public Collection<IndexKeyDefinition> orderedIndexDefinitions() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.values();
+ }
+
+ /**
+ * Process the index definitions with proper order and buils the linked
map.
+ * Should be called once and after the setting of the index names.
Review Comment:
```suggestion
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ 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 Collection<String> orderedIndexNames() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.keySet();
+ }
+
+ /**
+ * Stores index names with proper order to build the linked map later.
+ * Should be called once and before the setting of the definitions and the
map.
Review Comment:
```suggestion
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ 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 Collection<String> orderedIndexNames() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.keySet();
+ }
+
+ /**
+ * Stores index names with proper order to build the linked map later.
+ * Should be called once and before the setting of the definitions and the
map.
+ */
+ public void orderedIndexNames(@Nullable List<String> idxNames) {
+ idxDefsMap = null;
+
+ this.idxNames = idxNames;
+ }
+
+ /** @return Index definitions with proper order. */
+ public Collection<IndexKeyDefinition> orderedIndexDefinitions() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.values();
+ }
+
+ /**
+ * Process the index definitions with proper order and buils the linked
map.
+ * Should be called once and after the setting of the index names.
+ */
+ public void orderedIndexDefinitions(@Nullable List<IndexKeyDefinition>
idxDefs) {
+ assert idxNames != null || idxDefs == null : "The index names should
be initialized already.";
Review Comment:
Just replace entire body by simple `this.idxDefs = idxDefs;`
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -37,9 +41,16 @@ 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 before the definitions.
*/
+ @Order(value = 1, method = "orderedIndexNames")
+ private List<String> idxNames;
Review Comment:
```suggestion
private @Nullable String[] idxNames;
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -76,15 +87,47 @@ public void keyTypeSettings(IndexKeyTypeSettings
keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}
- /** */
- public Map<String, IndexKeyDefinition> keyDefinitions() {
- return keyDefs;
+ /** @return Map of index definitions with proper order. */
+ public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
+ 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 Collection<String> orderedIndexNames() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.keySet();
+ }
+
+ /**
+ * Stores index names with proper order to build the linked map later.
+ * Should be called once and before the setting of the definitions and the
map.
+ */
+ public void orderedIndexNames(@Nullable List<String> idxNames) {
+ idxDefsMap = null;
+
+ this.idxNames = idxNames;
+ }
+
+ /** @return Index definitions with proper order. */
+ public Collection<IndexKeyDefinition> orderedIndexDefinitions() {
+ return idxDefsMap == null ? Collections.emptyList() :
idxDefsMap.values();
Review Comment:
```suggestion
return idxDefs;
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -37,9 +41,16 @@ 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 before the definitions.
*/
+ @Order(value = 1, method = "orderedIndexNames")
+ private List<String> idxNames;
+
+ /** Index definitions serialization holder. Should be serialized after the
names. */
Review Comment:
```suggestion
/** Index definitions serialization holder. Should be serialized
together with the names. */
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -37,9 +41,16 @@ 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 before the definitions.
*/
+ @Order(value = 1, method = "orderedIndexNames")
+ private List<String> idxNames;
+
+ /** Index definitions serialization holder. Should be serialized after the
names. */
+ @Order(value = 2, method = "orderedIndexDefinitions")
+ private List<IndexKeyDefinition> idxDefs;
+
+ /** Map of index definitions with proper order. */
+ private LinkedHashMap<String, IndexKeyDefinition> idxDefsMap;
Review Comment:
```suggestion
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -50,14 +61,14 @@ public IndexQueryResultMeta() {
public IndexQueryResultMeta(SortedIndexDefinition def, int critSize) {
keyTypeSettings = def.keyTypeSettings();
- keyDefs = U.newLinkedHashMap(critSize);
+ idxDefsMap = 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();
- keyDefs.put(key.getKey(), key.getValue());
+ idxDefsMap.put(key.getKey(), key.getValue());
}
}
Review Comment:
Suggested constructor body:
```
public IndexQueryResultMeta(SortedIndexDefinition def, int critSize) {
keyTypeSettings = def.keyTypeSettings();
Iterator<Map.Entry<String, IndexKeyDefinition>> keys =
def.indexKeyDefinitions().entrySet().iterator();
if (critSize > 0) {
idxNames = new String[critSize];
idxDefs = new IndexKeyDefinition[critSize];
for (int i = 0; i < critSize; i++) {
Map.Entry<String, IndexKeyDefinition> key = keys.next();
idxNames[i] = key.getKey();
idxDefs[i] = key.getValue();
}
}
}
```
##########
modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java:
##########
@@ -37,9 +41,16 @@ 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 before the definitions.
*/
+ @Order(value = 1, method = "orderedIndexNames")
+ private List<String> idxNames;
+
+ /** Index definitions serialization holder. Should be serialized after the
names. */
+ @Order(value = 2, method = "orderedIndexDefinitions")
+ private List<IndexKeyDefinition> idxDefs;
Review Comment:
```suggestion
private @Nullable IndexKeyDefinition[] idxDefs;
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]