Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions solr/core/src/java/org/apache/solr/handler/ClusterAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -259,15 +260,15 @@ public class Commands {
@Command(name = "add-role")
public void addRole(PayloadObj<RoleInfo> obj) throws Exception {
RoleInfo info = obj.get();
Map<String, Object> m = info.toMap(new HashMap<>());
Map<String, Object> m = new SimpleOrderedMap<>(info);
m.put("action", ADDROLE.toString());
collectionsHandler.handleRequestBody(wrapParams(obj.getRequest(), m), obj.getResponse());
}

@Command(name = "remove-role")
public void removeRole(PayloadObj<RoleInfo> obj) throws Exception {
RoleInfo info = obj.get();
Map<String, Object> m = info.toMap(new HashMap<>());
Map<String, Object> m = new SimpleOrderedMap<>(info);
m.put("action", REMOVEROLE.toString());
collectionsHandler.handleRequestBody(wrapParams(obj.getRequest(), m), obj.getResponse());
}
Expand Down
37 changes: 24 additions & 13 deletions solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -204,7 +205,7 @@ private void handleGET() {
Map<String, Object> 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 {
Expand Down Expand Up @@ -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<String, Object> pluginInfo =
o instanceof MapSerializable
? ((MapSerializable) o).toMap(new LinkedHashMap<>())
o instanceof MapWriter
? new SimpleOrderedMap<>((MapWriter) o)
: (Map<String, Object>) o;
val.put(
parts.get(1),
pluginNameVsPluginInfo instanceof PluginInfo
pluginNameVsPluginInfo instanceof MapWriter
? pluginInfo
: Map.of(componentName, pluginInfo));
if (req.getParams().getBool("meta", false)) {
Expand All @@ -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<String, Object> componentInfo =
getComponentInfo(pluginInfo, componentName);
if (s.equals(componentInfo.get("class"))) {
(componentInfo).put("_packageinfo_", mapWriter);
}
});
}
Expand All @@ -320,10 +323,20 @@ private void handleGET() {
}
}

@SuppressWarnings({"unchecked"})
private Map<String, Object> getComponentInfo(
Map<String, Object> pluginInfo, String componentName) {
if (pluginInfo.containsKey("class")) {
return pluginInfo;
}
return (Map<String, Object>)
pluginInfo.computeIfAbsent(componentName, k -> new LinkedHashMap<>());
}

private Map<String, Object> getConfigDetails(String componentType, SolrQueryRequest req) {
String componentName = componentType == null ? null : req.getParams().get("componentName");
boolean showParams = req.getParams().getBool("expandParams", false);
Map<String, Object> map = this.req.getCore().getSolrConfig().toMap(new LinkedHashMap<>());
Map<String, Object> map = new SimpleOrderedMap<>(this.req.getCore().getSolrConfig());
if (componentType != null && !SolrRequestHandler.TYPE.equals(componentType)) return map;

@SuppressWarnings({"unchecked"})
Expand Down Expand Up @@ -356,7 +369,7 @@ private Map<String, Object> 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);
Expand Down Expand Up @@ -510,9 +523,7 @@ private void handleParams(ArrayList<CommandOperation> 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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -185,7 +186,7 @@ public Iterator<String> getParameterNamesIterator() {
}

@Override
public Map<String, Object> toMap(Map<String, Object> suppliedMap) {
public void writeMap(EntryWriter ew) throws IOException {
for (Iterator<String> it = getParameterNamesIterator(); it.hasNext(); ) {
final String param = it.next();
String key = cmd.meta().getParamSubstitute(param);
Expand All @@ -195,26 +196,32 @@ public Map<String, Object> toMap(Map<String, Object> 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();
if (oClass.isPrimitive()
|| 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<String> l = (List<String>) 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;
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -277,12 +278,10 @@ private void convert(Map<String, Object> result) {
for (Map.Entry<String, Object> entry : result.entrySet()) {
Object value = entry.getValue();
if (value instanceof ItemPriorityQueue queue) {
Map<String, Object> map = new LinkedHashMap<>();
queue.toMap(map);
Map<String, Object> map = new SimpleOrderedMap<>(queue);
entry.setValue(map);
} else if (value instanceof MapWriterSummaryStatistics stats) {
Map<String, Object> map = new LinkedHashMap<>();
stats.toMap(map);
Map<String, Object> map = new SimpleOrderedMap<>(stats);
Comment on lines +281 to +284
entry.setValue(map);
} else if (value instanceof AtomicLong) {
entry.setValue(((AtomicLong) value).longValue());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -758,7 +759,7 @@ public void build() throws IOException {
for (String collection : page.selected) {
DocCollection dc = cs.getCollectionOrNull(collection);
if (dc != null) {
Map<String, Object> collectionState = dc.toMap(new LinkedHashMap<>());
Map<String, Object> collectionState = Utils.convertToMap(dc, new LinkedHashMap<>());
if (applyStatusFilter) {
// verify this collection matches the filtered state
if (page.matchesStatusFilter(collectionState, liveNodes)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ private Map<String, String> 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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<>()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -55,7 +56,7 @@ public MigrateDocsAPI(CollectionsHandler collectionsHandler) {
@Command(name = V2_MIGRATE_DOCS_CMD)
public void migrateDocs(PayloadObj<MigrateDocsPayload> obj) throws Exception {
final MigrateDocsPayload v2Body = obj.get();
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
v1Params.put(ACTION, CollectionParams.CollectionAction.MIGRATE.toLower());
v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -58,7 +59,7 @@ public ModifyCollectionAPI(CollectionsHandler collectionsHandler) {
public void modifyCollection(PayloadObj<ModifyCollectionPayload> obj) throws Exception {
final ModifyCollectionPayload v2Body = obj.get();

final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> 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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -55,7 +56,7 @@ public MoveReplicaAPI(CollectionsHandler collectionsHandler) {
@Command(name = V2_MOVE_REPLICA_CMD)
public void moveReplica(PayloadObj<MoveReplicaPayload> obj) throws Exception {
final MoveReplicaPayload v2Body = obj.get();
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
v1Params.put(ACTION, CollectionParams.CollectionAction.MOVEREPLICA.toLower());
v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@
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;
import org.apache.solr.api.EndPoint;
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;

/**
Expand Down Expand Up @@ -59,7 +59,7 @@ public OverseerOperationAPI(CoreAdminHandler coreAdminHandler) {
@Command(name = OVERSEER_OP_CMD)
public void joinOverseerLeaderElection(PayloadObj<OverseerOperationPayload> payload)
throws Exception {
final Map<String, Object> v1Params = payload.get().toMap(new HashMap<>());
final Map<String, Object> v1Params = new SimpleOrderedMap<>(payload.get());
v1Params.put(
ACTION, CoreAdminParams.CoreAdminAction.OVERSEEROP.name().toLowerCase(Locale.ROOT));
coreAdminHandler.handleRequestBody(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -57,7 +58,7 @@ public PrepareCoreRecoveryAPI(CoreAdminHandler coreAdminHandler) {
@Command(name = V2_PREP_RECOVERY_CMD)
public void prepareCoreForRecovery(PayloadObj<PrepareCoreRecoveryPayload> obj) throws Exception {
final PrepareCoreRecoveryPayload v2Body = obj.get();
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
v1Params.put(ACTION, PREPRECOVERY.name().toLowerCase(Locale.ROOT));
v1Params.put(CORE, obj.getRequest().getPathTemplateValues().get("core"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -55,7 +56,7 @@ public RebalanceLeadersAPI(CollectionsHandler collectionsHandler) {
@Command(name = V2_REBALANCE_LEADERS_CMD)
public void rebalanceLeaders(PayloadObj<RebalanceLeadersPayload> obj) throws Exception {
final RebalanceLeadersPayload v2Body = obj.get();
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
v1Params.put(ACTION, CollectionParams.CollectionAction.REBALANCELEADERS.toLower());
v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -56,7 +57,7 @@ public RejoinLeaderElectionAPI(CoreAdminHandler coreAdminHandler) {
public void rejoinLeaderElection(PayloadObj<RejoinLeaderElectionPayload> payload)
throws Exception {
final RejoinLeaderElectionPayload v2Body = payload.get();
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
v1Params.put(ACTION, REJOINLEADERELECTION.name().toLowerCase(Locale.ROOT));
if (v2Body.coreNodeName != null) {
v1Params.remove("coreNodeName");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -58,7 +59,7 @@ public RequestApplyCoreUpdatesAPI(CoreAdminHandler coreAdminHandler) {
public void requestApplyCoreUpdates(PayloadObj<RequestApplyCoreUpdatesPayload> obj)
throws Exception {
final RequestApplyCoreUpdatesPayload v2Body = obj.get();
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
v1Params.put(ACTION, REQUESTAPPLYUPDATES.name().toLowerCase(Locale.ROOT));
v1Params.put(NAME, obj.getRequest().getPathTemplateValues().get("core"));

Expand Down
Loading