diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java index 40497bf4f3f..131f8c8eb7f 100644 --- a/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java +++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java @@ -260,8 +260,18 @@ public class ClusterState implements JSONWriter.Writable { objs.remove(DocCollection.SHARDS); } - Map map = (Map) props.get(DocCollection.DOC_ROUTER); - DocRouter router = map == null ? DocRouter.DEFAULT : DocRouter.getDocRouter(map.get("name")); + Object routerObj = props.get(DocCollection.DOC_ROUTER); + DocRouter router; + if (routerObj == null) { + router = DocRouter.DEFAULT; + } else if (routerObj instanceof String) { + // back compat with Solr4.4 + router = DocRouter.getDocRouter((String)routerObj); + } else { + Map routerProps = (Map)routerObj; + router = DocRouter.getDocRouter(routerProps.get("name")); + } + return new DocCollection(name, slices, props, router); } diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/DocRouter.java b/solr/solrj/src/java/org/apache/solr/common/cloud/DocRouter.java index 50decd8499f..e7212eff813 100644 --- a/solr/solrj/src/java/org/apache/solr/common/cloud/DocRouter.java +++ b/solr/solrj/src/java/org/apache/solr/common/cloud/DocRouter.java @@ -64,9 +64,13 @@ public abstract class DocRouter { map.put(s.substring(7), props.get(s)); } } - if(map.get("name") == null) map.put("name", DEFAULT_NAME); + Object o = props.get("router"); + if (o instanceof String) { + map.put("name", o); + } else if (map.get("name") == null) { + map.put("name", DEFAULT_NAME); + } return map; - } // currently just an implementation detail...