Chris M. Hostetter created SOLR-16751:
-----------------------------------------

             Summary: ClusterState.collectionFromObjects() stores copy of 
shards in DocCollection.getProperties()
                 Key: SOLR-16751
                 URL: https://issues.apache.org/jira/browse/SOLR-16751
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
            Reporter: Chris M. Hostetter


The way a {{DocCollection}} is created by 
{{ClusterState.collectionFromObjects()}} ( ie: {{ClusterState}} is read from a 
JSON payload – such as {{state.json}} ) a copy of the original {{"shards"}} 
mappings is left in the {{props}} argument (where it's carried around in 
{{DocCollection.getProperties()}} ) in addition to the (correct) {{slices}} 
argument (which is used to build {{DocCollection.getSlices()}} )

This is due to the following lines of code, which AFAICT should have been done 
in reverse order...
{code:java}
      props = new HashMap<>(objs);
      objs.remove(CollectionStateProps.SHARDS);
{code}
This bug seems to have existed for a while, but seems to have slipped under the 
radar since nothing has any reason to be looking for a {{"shards"}} key in 
{{DocCollection.getProperties()}} .

Recently however, noble committed 2ac7ed29563a33d9f9a31737996a1d4cfb0fca0d 
which changed the serialization logic for {{DocCollection}} to eliminate a 
temporary map...
{noformat}
-    LinkedHashMap<String, Object> all = 
CollectionUtil.newLinkedHashMap(slices.size() + 1);
-    all.putAll(propMap);
-    all.put(CollectionStateProps.SHARDS, slices);
-    jsonWriter.write(all);
+    jsonWriter.write(
+        (MapWriter)
+            ew -> {
+              propMap.forEach(ew.getBiConsumer());
+              ew.put(CollectionStateProps.SHARDS, slices);
+            });
{noformat}
... so now, instead of an {{all}} Map where the {{"shards"}} key from 
{{propMap}} being (correctly) overridden by {{slices}} and then serialized, now 
the JSON output contains two entries with the {{"shards"}} key.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to