diff --git a/solr/core/src/java/org/apache/solr/handler/ClusterAPI.java b/solr/core/src/java/org/apache/solr/handler/ClusterAPI.java index 7bc49e85f2a1..e8c36f4e8cce 100644 --- a/solr/core/src/java/org/apache/solr/handler/ClusterAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/ClusterAPI.java @@ -51,6 +51,7 @@ import org.apache.solr.common.params.DefaultSolrParams; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.ReflectMapWriter; +import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.common.util.Utils; import org.apache.solr.core.CoreContainer; import org.apache.solr.core.NodeRoles; @@ -259,7 +260,7 @@ public class Commands { @Command(name = "add-role") public void addRole(PayloadObj obj) throws Exception { RoleInfo info = obj.get(); - Map m = info.toMap(new HashMap<>()); + Map m = new SimpleOrderedMap<>(info); m.put("action", ADDROLE.toString()); collectionsHandler.handleRequestBody(wrapParams(obj.getRequest(), m), obj.getResponse()); } @@ -267,7 +268,7 @@ public void addRole(PayloadObj obj) throws Exception { @Command(name = "remove-role") public void removeRole(PayloadObj obj) throws Exception { RoleInfo info = obj.get(); - Map m = info.toMap(new HashMap<>()); + Map m = new SimpleOrderedMap<>(info); m.put("action", REMOVEROLE.toString()); collectionsHandler.handleRequestBody(wrapParams(obj.getRequest(), m), obj.getResponse()); } diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java index e27bfc0e3178..7018e3e4a66c 100644 --- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java @@ -60,7 +60,7 @@ import org.apache.solr.client.solrj.response.SimpleSolrResponse; import org.apache.solr.cloud.ZkController; import org.apache.solr.cloud.ZkSolrResourceLoader; -import org.apache.solr.common.MapSerializable; +import org.apache.solr.common.MapWriter; import org.apache.solr.common.SolrErrorWrappingException; import org.apache.solr.common.SolrException; import org.apache.solr.common.cloud.ClusterState; @@ -75,6 +75,7 @@ import org.apache.solr.common.util.EnvUtils; import org.apache.solr.common.util.ExecutorUtil; import org.apache.solr.common.util.NamedList; +import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.common.util.SolrNamedThreadFactory; import org.apache.solr.common.util.StrUtils; import org.apache.solr.common.util.Utils; @@ -204,7 +205,7 @@ private void handleGET() { Map m = new LinkedHashMap<>(); m.put(ZNODEVER, params.getZnodeVersion()); if (p != null) { - m.put(RequestParams.NAME, Map.of(parts.get(2), p.toMap(new LinkedHashMap<>()))); + m.put(RequestParams.NAME, Map.of(parts.get(2), new SimpleOrderedMap<>(p))); } resp.add(SolrQueryResponse.NAME, m); } else { @@ -283,16 +284,16 @@ private void handleGET() { Map pluginNameVsPluginInfo = (Map) val.get(parts.get(1)); if (pluginNameVsPluginInfo != null) { Object o = - pluginNameVsPluginInfo instanceof MapSerializable + pluginNameVsPluginInfo instanceof MapWriter ? pluginNameVsPluginInfo : pluginNameVsPluginInfo.get(componentName); Map pluginInfo = - o instanceof MapSerializable - ? ((MapSerializable) o).toMap(new LinkedHashMap<>()) + o instanceof MapWriter + ? new SimpleOrderedMap<>((MapWriter) o) : (Map) o; val.put( parts.get(1), - pluginNameVsPluginInfo instanceof PluginInfo + pluginNameVsPluginInfo instanceof MapWriter ? pluginInfo : Map.of(componentName, pluginInfo)); if (req.getParams().getBool("meta", false)) { @@ -306,8 +307,10 @@ private void handleGET() { if (infos == null || infos.isEmpty()) continue; infos.forEach( (s, mapWriter) -> { - if (s.equals(pluginInfo.get("class"))) { - (pluginInfo).put("_packageinfo_", mapWriter); + Map componentInfo = + getComponentInfo(pluginInfo, componentName); + if (s.equals(componentInfo.get("class"))) { + (componentInfo).put("_packageinfo_", mapWriter); } }); } @@ -320,10 +323,20 @@ private void handleGET() { } } + @SuppressWarnings({"unchecked"}) + private Map getComponentInfo( + Map pluginInfo, String componentName) { + if (pluginInfo.containsKey("class")) { + return pluginInfo; + } + return (Map) + pluginInfo.computeIfAbsent(componentName, k -> new LinkedHashMap<>()); + } + private Map getConfigDetails(String componentType, SolrQueryRequest req) { String componentName = componentType == null ? null : req.getParams().get("componentName"); boolean showParams = req.getParams().getBool("expandParams", false); - Map map = this.req.getCore().getSolrConfig().toMap(new LinkedHashMap<>()); + Map map = new SimpleOrderedMap<>(this.req.getCore().getSolrConfig()); if (componentType != null && !SolrRequestHandler.TYPE.equals(componentType)) return map; @SuppressWarnings({"unchecked"}) @@ -356,7 +369,7 @@ private Map expandUseParams(SolrQueryRequest req, Object plugin) if (plugin instanceof Map) { pluginInfo = (Map) plugin; } else if (plugin instanceof PluginInfo) { - pluginInfo = ((PluginInfo) plugin).toMap(new LinkedHashMap<>()); + pluginInfo = new SimpleOrderedMap<>((PluginInfo) plugin); } String useParams = (String) pluginInfo.get(USEPARAM); String useParamsInReq = req.getOriginalParams().get(USEPARAM); @@ -510,9 +523,7 @@ private void handleParams(ArrayList ops, RequestParams params) ZkController.touchConfDir(zkLoader); } else { if (log.isDebugEnabled()) { - log.debug( - "persisting params data : {}", - Utils.toJSONString(params.toMap(new LinkedHashMap<>()))); + log.debug("persisting params data : {}", Utils.toJSONString(params)); } int latestVersion = ZkController.persistConfigResourceToZooKeeper( diff --git a/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java b/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java index 0244726235b2..f9d8234d7f05 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java @@ -21,6 +21,7 @@ import static org.apache.solr.common.SolrException.ErrorCode.BAD_REQUEST; import static org.apache.solr.common.util.StrUtils.splitSmart; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -185,7 +186,7 @@ public Iterator getParameterNamesIterator() { } @Override - public Map toMap(Map suppliedMap) { + public void writeMap(EntryWriter ew) throws IOException { for (Iterator it = getParameterNamesIterator(); it.hasNext(); ) { final String param = it.next(); String key = cmd.meta().getParamSubstitute(param); @@ -195,6 +196,10 @@ public Map toMap(Map suppliedMap) { : map.get(key); if (o == null) o = pathValues.get(key); if (o == null && useRequestParams) o = origParams.getParams(key); + if (o == null) { + ew.put(param, null); + continue; + } // make strings out of as many things as we can now to minimize differences from // the standard impls that pass through a NamedList/SimpleOrderedMap... Class oClass = o.getClass(); @@ -202,19 +207,21 @@ public Map toMap(Map suppliedMap) { || Number.class.isAssignableFrom(oClass) || Character.class.isAssignableFrom(oClass) || Boolean.class.isAssignableFrom(oClass)) { - suppliedMap.put(param, String.valueOf(o)); - } else if (List.class.isAssignableFrom(oClass) - && ((List) o).get(0) instanceof String) { + ew.put(param, String.valueOf(o)); + } else if (List.class.isAssignableFrom(oClass)) { @SuppressWarnings({"unchecked"}) - List l = (List) o; - suppliedMap.put(param, l.toArray(new String[0])); + List l = (List) o; + if (l.isEmpty() || l.get(0) instanceof String) { + ew.put(param, l.toArray(new String[0])); + } else { + ew.put(param, o); + } } else { // Lists pass through but will require special handling downstream // if they contain non-string elements. - suppliedMap.put(param, o); + ew.put(param, o); } } - return suppliedMap; } }); } diff --git a/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java b/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java index b88ae352e527..38eb8a464cfd 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java @@ -59,6 +59,7 @@ import org.apache.lucene.util.SuppressForbidden; import org.apache.lucene.util.UnicodeUtil; import org.apache.solr.common.MapWriter; +import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.common.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -277,12 +278,10 @@ private void convert(Map result) { for (Map.Entry entry : result.entrySet()) { Object value = entry.getValue(); if (value instanceof ItemPriorityQueue queue) { - Map map = new LinkedHashMap<>(); - queue.toMap(map); + Map map = new SimpleOrderedMap<>(queue); entry.setValue(map); } else if (value instanceof MapWriterSummaryStatistics stats) { - Map map = new LinkedHashMap<>(); - stats.toMap(map); + Map map = new SimpleOrderedMap<>(stats); entry.setValue(map); } else if (value instanceof AtomicLong) { entry.setValue(((AtomicLong) value).longValue()); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java index c2e6d29ac5c4..967c153071f6 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java @@ -53,6 +53,7 @@ import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.common.util.SuppressForbidden; +import org.apache.solr.common.util.Utils; import org.apache.solr.core.CoreContainer; import org.apache.solr.handler.RequestHandlerBase; import org.apache.solr.request.SolrQueryRequest; @@ -758,7 +759,7 @@ public void build() throws IOException { for (String collection : page.selected) { DocCollection dc = cs.getCollectionOrNull(collection); if (dc != null) { - Map collectionState = dc.toMap(new LinkedHashMap<>()); + Map collectionState = Utils.convertToMap(dc, new LinkedHashMap<>()); if (applyStatusFilter) { // verify this collection matches the filtered state if (page.matchesStatusFilter(collectionState, liveNodes)) { diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/CreateCore.java b/solr/core/src/java/org/apache/solr/handler/admin/api/CreateCore.java index 289d51d68c4c..99602b9e5980 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/CreateCore.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/CreateCore.java @@ -158,7 +158,7 @@ private Map buildCoreParams(CreateCoreParams createParams) { } public static CreateCoreParams createRequestBodyFromV1Params(SolrParams solrParams) { - final var v1ParamMap = solrParams.toMap(new HashMap<>()); + final var v1ParamMap = Utils.convertToMap(solrParams, new HashMap<>()); v1ParamMap.remove(ACTION); v1ParamMap.remove(ASYNC); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/InstallShardData.java b/solr/core/src/java/org/apache/solr/handler/admin/api/InstallShardData.java index 4033fa6f0975..ef609956772f 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/InstallShardData.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/InstallShardData.java @@ -32,6 +32,7 @@ import org.apache.solr.common.cloud.ZkNodeProps; import org.apache.solr.common.params.CollectionParams; import org.apache.solr.common.util.StrUtils; +import org.apache.solr.common.util.Utils; import org.apache.solr.core.CoreContainer; import org.apache.solr.jersey.PermissionName; import org.apache.solr.request.SolrQueryRequest; @@ -117,6 +118,6 @@ public static ZkNodeProps createRemoteMessage( } messageTyped.validate(); - return new ZkNodeProps(messageTyped.toMap(new HashMap<>())); + return new ZkNodeProps(Utils.convertToMap(messageTyped, new HashMap<>())); } } diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocsAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocsAPI.java index 7e3898c8a899..ddb25d3d8aa8 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocsAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocsAPI.java @@ -29,6 +29,7 @@ import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.MigrateDocsPayload; import org.apache.solr.common.params.CollectionParams; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CollectionsHandler; /** @@ -55,7 +56,7 @@ public MigrateDocsAPI(CollectionsHandler collectionsHandler) { @Command(name = V2_MIGRATE_DOCS_CMD) public void migrateDocs(PayloadObj obj) throws Exception { final MigrateDocsPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, CollectionParams.CollectionAction.MIGRATE.toLower()); v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION)); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/ModifyCollectionAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/ModifyCollectionAPI.java index 93d11d0c4283..0c5f717f6ef5 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/ModifyCollectionAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/ModifyCollectionAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.ModifyCollectionPayload; import org.apache.solr.common.params.CollectionParams; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CollectionsHandler; /** @@ -58,7 +59,7 @@ public ModifyCollectionAPI(CollectionsHandler collectionsHandler) { public void modifyCollection(PayloadObj obj) throws Exception { final ModifyCollectionPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, CollectionParams.CollectionAction.MODIFYCOLLECTION.toLower()); v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION)); if (v2Body.config != null) { diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/MoveReplicaAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/MoveReplicaAPI.java index 3c0d701de302..54bc62310b8e 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/MoveReplicaAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/MoveReplicaAPI.java @@ -29,6 +29,7 @@ import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.MoveReplicaPayload; import org.apache.solr.common.params.CollectionParams; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CollectionsHandler; /** @@ -55,7 +56,7 @@ public MoveReplicaAPI(CollectionsHandler collectionsHandler) { @Command(name = V2_MOVE_REPLICA_CMD) public void moveReplica(PayloadObj obj) throws Exception { final MoveReplicaPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, CollectionParams.CollectionAction.MOVEREPLICA.toLower()); v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION)); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/OverseerOperationAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/OverseerOperationAPI.java index 1c566a8c610a..69b633799045 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/OverseerOperationAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/OverseerOperationAPI.java @@ -22,7 +22,6 @@ import static org.apache.solr.handler.ClusterAPI.wrapParams; import static org.apache.solr.security.PermissionNameProvider.Name.CORE_EDIT_PERM; -import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.apache.solr.api.Command; @@ -30,6 +29,7 @@ import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.OverseerOperationPayload; import org.apache.solr.common.params.CoreAdminParams; +import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -59,7 +59,7 @@ public OverseerOperationAPI(CoreAdminHandler coreAdminHandler) { @Command(name = OVERSEER_OP_CMD) public void joinOverseerLeaderElection(PayloadObj payload) throws Exception { - final Map v1Params = payload.get().toMap(new HashMap<>()); + final Map v1Params = new SimpleOrderedMap<>(payload.get()); v1Params.put( ACTION, CoreAdminParams.CoreAdminAction.OVERSEEROP.name().toLowerCase(Locale.ROOT)); coreAdminHandler.handleRequestBody( diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/PrepareCoreRecoveryAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/PrepareCoreRecoveryAPI.java index c5b830498158..dac4e632656d 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/PrepareCoreRecoveryAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/PrepareCoreRecoveryAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.EndPoint; import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.PrepareCoreRecoveryPayload; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -57,7 +58,7 @@ public PrepareCoreRecoveryAPI(CoreAdminHandler coreAdminHandler) { @Command(name = V2_PREP_RECOVERY_CMD) public void prepareCoreForRecovery(PayloadObj obj) throws Exception { final PrepareCoreRecoveryPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, PREPRECOVERY.name().toLowerCase(Locale.ROOT)); v1Params.put(CORE, obj.getRequest().getPathTemplateValues().get("core")); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/RebalanceLeadersAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/RebalanceLeadersAPI.java index e9127817732f..ace2822bee8b 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/RebalanceLeadersAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/RebalanceLeadersAPI.java @@ -29,6 +29,7 @@ import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.RebalanceLeadersPayload; import org.apache.solr.common.params.CollectionParams; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CollectionsHandler; /** @@ -55,7 +56,7 @@ public RebalanceLeadersAPI(CollectionsHandler collectionsHandler) { @Command(name = V2_REBALANCE_LEADERS_CMD) public void rebalanceLeaders(PayloadObj obj) throws Exception { final RebalanceLeadersPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, CollectionParams.CollectionAction.REBALANCELEADERS.toLower()); v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION)); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/RejoinLeaderElectionAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/RejoinLeaderElectionAPI.java index 7558ea822ec9..24ca19231df6 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/RejoinLeaderElectionAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/RejoinLeaderElectionAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.EndPoint; import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.RejoinLeaderElectionPayload; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -56,7 +57,7 @@ public RejoinLeaderElectionAPI(CoreAdminHandler coreAdminHandler) { public void rejoinLeaderElection(PayloadObj payload) throws Exception { final RejoinLeaderElectionPayload v2Body = payload.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, REJOINLEADERELECTION.name().toLowerCase(Locale.ROOT)); if (v2Body.coreNodeName != null) { v1Params.remove("coreNodeName"); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestApplyCoreUpdatesAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestApplyCoreUpdatesAPI.java index 51c20fb545f6..5118e149944e 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestApplyCoreUpdatesAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestApplyCoreUpdatesAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.EndPoint; import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.RequestApplyCoreUpdatesPayload; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -58,7 +59,7 @@ public RequestApplyCoreUpdatesAPI(CoreAdminHandler coreAdminHandler) { public void requestApplyCoreUpdates(PayloadObj obj) throws Exception { final RequestApplyCoreUpdatesPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, REQUESTAPPLYUPDATES.name().toLowerCase(Locale.ROOT)); v1Params.put(NAME, obj.getRequest().getPathTemplateValues().get("core")); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestBufferUpdatesAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestBufferUpdatesAPI.java index 8625bfc9b72d..0e34af986059 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestBufferUpdatesAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestBufferUpdatesAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.RequestBufferUpdatesPayload; import org.apache.solr.common.params.CoreAdminParams; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -57,7 +58,7 @@ public RequestBufferUpdatesAPI(CoreAdminHandler coreAdminHandler) { @Command(name = V2_REQUEST_BUFFER_UPDATES_CMD) public void requestBufferUpdates(PayloadObj obj) throws Exception { final RequestBufferUpdatesPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, REQUESTBUFFERUPDATES.name().toLowerCase(Locale.ROOT)); v1Params.put(CoreAdminParams.NAME, obj.getRequest().getPathTemplateValues().get("core")); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestCoreRecoveryAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestCoreRecoveryAPI.java index a259c6084306..e367821be457 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestCoreRecoveryAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestCoreRecoveryAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.EndPoint; import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.RequestCoreRecoveryPayload; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -57,7 +58,7 @@ public RequestCoreRecoveryAPI(CoreAdminHandler coreAdminHandler) { @Command(name = V2_REQUEST_RECOVERY_CMD) public void requestCoreRecovery(PayloadObj obj) throws Exception { final RequestCoreRecoveryPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, REQUESTRECOVERY.name().toLowerCase(Locale.ROOT)); v1Params.put(CORE, obj.getRequest().getPathTemplateValues().get("core")); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestSyncShardAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestSyncShardAPI.java index c36a99ce5450..54e73c493500 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/RequestSyncShardAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/RequestSyncShardAPI.java @@ -31,6 +31,7 @@ import org.apache.solr.api.EndPoint; import org.apache.solr.api.PayloadObj; import org.apache.solr.client.solrj.request.beans.RequestSyncShardPayload; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -57,7 +58,7 @@ public RequestSyncShardAPI(CoreAdminHandler coreAdminHandler) { @Command(name = V2_REQUEST_SYNC_SHARD_CMD) public void requestSyncShard(PayloadObj obj) throws Exception { final RequestSyncShardPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, REQUESTSYNCSHARD.name().toLowerCase(Locale.ROOT)); v1Params.put(CORE, obj.getRequest().getPathTemplateValues().get("core")); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/SplitCoreAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/SplitCoreAPI.java index d846caea34bd..e12fc60f1827 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/SplitCoreAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/SplitCoreAPI.java @@ -34,6 +34,7 @@ import org.apache.solr.common.annotation.JsonProperty; import org.apache.solr.common.params.CoreAdminParams; import org.apache.solr.common.util.ReflectMapWriter; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CoreAdminHandler; /** @@ -58,7 +59,7 @@ public SplitCoreAPI(CoreAdminHandler coreHandler) { @Command(name = V2_SPLIT_CORE_CMD) public void splitCore(PayloadObj obj) throws Exception { final SplitCorePayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put( CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.SPLIT.name().toLowerCase(Locale.ROOT)); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/api/SplitShardAPI.java b/solr/core/src/java/org/apache/solr/handler/admin/api/SplitShardAPI.java index 0c75f053cae8..873bfe3393ae 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/api/SplitShardAPI.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/api/SplitShardAPI.java @@ -34,6 +34,7 @@ import org.apache.solr.common.params.CollectionParams; import org.apache.solr.common.params.CommonAdminParams; import org.apache.solr.common.util.StrUtils; +import org.apache.solr.common.util.Utils; import org.apache.solr.handler.admin.CollectionsHandler; /** @@ -60,7 +61,7 @@ public SplitShardAPI(CollectionsHandler collectionsHandler) { @Command(name = V2_SPLIT_CMD) public void splitShard(PayloadObj obj) throws Exception { final SplitShardPayload v2Body = obj.get(); - final Map v1Params = v2Body.toMap(new HashMap<>()); + final Map v1Params = Utils.convertToMap(v2Body, new HashMap<>()); v1Params.put(ACTION, CollectionParams.CollectionAction.SPLITSHARD.toLower()); v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION)); diff --git a/solr/core/src/java/org/apache/solr/handler/designer/ManagedSchemaDiff.java b/solr/core/src/java/org/apache/solr/handler/designer/ManagedSchemaDiff.java index 3d064ce7286f..89112231e082 100644 --- a/solr/core/src/java/org/apache/solr/handler/designer/ManagedSchemaDiff.java +++ b/solr/core/src/java/org/apache/solr/handler/designer/ManagedSchemaDiff.java @@ -28,6 +28,7 @@ import java.util.stream.Stream; import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.common.util.SuppressForbidden; +import org.apache.solr.common.util.Utils; import org.apache.solr.schema.FieldType; import org.apache.solr.schema.IndexSchema; import org.apache.solr.schema.ManagedIndexSchema; @@ -218,8 +219,8 @@ protected static Map diff( @SuppressForbidden(reason = "Maps.difference") private static List> getMapDifference( SimpleOrderedMap simpleOrderedMap1, SimpleOrderedMap simpleOrderedMap2) { - Map map1 = simpleOrderedMap1.toMap(new HashMap<>()); - Map map2 = simpleOrderedMap2.toMap(new HashMap<>()); + Map map1 = Utils.convertToMap(simpleOrderedMap1, new HashMap<>()); + Map map2 = Utils.convertToMap(simpleOrderedMap2, new HashMap<>()); Map> mapDiff = Maps.difference(map1, map2).entriesDiffering(); if (mapDiff.isEmpty()) { diff --git a/solr/core/src/java/org/apache/solr/handler/export/ExportWriterStream.java b/solr/core/src/java/org/apache/solr/handler/export/ExportWriterStream.java index 8700064bba70..86bbefb8e37d 100644 --- a/solr/core/src/java/org/apache/solr/handler/export/ExportWriterStream.java +++ b/solr/core/src/java/org/apache/solr/handler/export/ExportWriterStream.java @@ -19,9 +19,7 @@ import java.io.IOException; import java.lang.invoke.MethodHandles; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.TimeoutException; import org.apache.solr.client.solrj.io.Tuple; @@ -39,6 +37,7 @@ import org.apache.solr.client.solrj.io.stream.expr.StreamFactory; import org.apache.solr.common.IteratorWriter; import org.apache.solr.common.MapWriter; +import org.apache.solr.common.util.SimpleOrderedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,9 +70,7 @@ public EntryWriter put(CharSequence k, Object v) throws IOException { ((IteratorWriter) v).toList(lst); v = lst; } else if (v instanceof MapWriter) { - Map map = new HashMap<>(); - ((MapWriter) v).toMap(map); - v = map; + v = new SimpleOrderedMap<>((MapWriter) v); } tuple.put(k.toString(), v); return this; diff --git a/solr/core/src/test/org/apache/solr/handler/designer/TestSchemaDesignerAPI.java b/solr/core/src/test/org/apache/solr/handler/designer/TestSchemaDesignerAPI.java index ed1aba6ceb58..6eb157e914ce 100644 --- a/solr/core/src/test/org/apache/solr/handler/designer/TestSchemaDesignerAPI.java +++ b/solr/core/src/test/org/apache/solr/handler/designer/TestSchemaDesignerAPI.java @@ -28,7 +28,6 @@ import java.nio.file.Path; import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -845,7 +844,7 @@ public void testSchemaDiffEndpoint() throws Exception { idFieldMapUpdated.indexOf("omitTermFreqAndPositions", 0), Boolean.FALSE); SolrParams solrParams = idFieldMapUpdated.toSolrParams(); - Map mapParams = solrParams.toMap(new HashMap<>()); + Map mapParams = new SimpleOrderedMap<>(solrParams); mapParams.put("termVectors", Boolean.FALSE); reqParams.set( SCHEMA_VERSION_PARAM, rsp.getValues().toSolrParams().getInt(SCHEMA_VERSION_PARAM));