Skip to content

Commit ddb1923

Browse files
authored
SOLR-17600 MapSerializable p1: Migrate V2 API Payloads (#4463)
MapSerializable is deprecated; stop using it in some places.
1 parent 9b9ecbf commit ddb1923

23 files changed

Lines changed: 77 additions & 50 deletions

solr/core/src/java/org/apache/solr/handler/ClusterAPI.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.apache.solr.common.params.DefaultSolrParams;
5252
import org.apache.solr.common.params.ModifiableSolrParams;
5353
import org.apache.solr.common.util.ReflectMapWriter;
54+
import org.apache.solr.common.util.SimpleOrderedMap;
5455
import org.apache.solr.common.util.Utils;
5556
import org.apache.solr.core.CoreContainer;
5657
import org.apache.solr.core.NodeRoles;
@@ -259,15 +260,15 @@ public class Commands {
259260
@Command(name = "add-role")
260261
public void addRole(PayloadObj<RoleInfo> obj) throws Exception {
261262
RoleInfo info = obj.get();
262-
Map<String, Object> m = info.toMap(new HashMap<>());
263+
Map<String, Object> m = new SimpleOrderedMap<>(info);
263264
m.put("action", ADDROLE.toString());
264265
collectionsHandler.handleRequestBody(wrapParams(obj.getRequest(), m), obj.getResponse());
265266
}
266267

267268
@Command(name = "remove-role")
268269
public void removeRole(PayloadObj<RoleInfo> obj) throws Exception {
269270
RoleInfo info = obj.get();
270-
Map<String, Object> m = info.toMap(new HashMap<>());
271+
Map<String, Object> m = new SimpleOrderedMap<>(info);
271272
m.put("action", REMOVEROLE.toString());
272273
collectionsHandler.handleRequestBody(wrapParams(obj.getRequest(), m), obj.getResponse());
273274
}

solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
import org.apache.solr.client.solrj.response.SimpleSolrResponse;
6161
import org.apache.solr.cloud.ZkController;
6262
import org.apache.solr.cloud.ZkSolrResourceLoader;
63-
import org.apache.solr.common.MapSerializable;
63+
import org.apache.solr.common.MapWriter;
6464
import org.apache.solr.common.SolrErrorWrappingException;
6565
import org.apache.solr.common.SolrException;
6666
import org.apache.solr.common.cloud.ClusterState;
@@ -75,6 +75,7 @@
7575
import org.apache.solr.common.util.EnvUtils;
7676
import org.apache.solr.common.util.ExecutorUtil;
7777
import org.apache.solr.common.util.NamedList;
78+
import org.apache.solr.common.util.SimpleOrderedMap;
7879
import org.apache.solr.common.util.SolrNamedThreadFactory;
7980
import org.apache.solr.common.util.StrUtils;
8081
import org.apache.solr.common.util.Utils;
@@ -204,7 +205,7 @@ private void handleGET() {
204205
Map<String, Object> m = new LinkedHashMap<>();
205206
m.put(ZNODEVER, params.getZnodeVersion());
206207
if (p != null) {
207-
m.put(RequestParams.NAME, Map.of(parts.get(2), p.toMap(new LinkedHashMap<>())));
208+
m.put(RequestParams.NAME, Map.of(parts.get(2), p));
208209
}
209210
resp.add(SolrQueryResponse.NAME, m);
210211
} else {
@@ -283,16 +284,16 @@ private void handleGET() {
283284
Map pluginNameVsPluginInfo = (Map) val.get(parts.get(1));
284285
if (pluginNameVsPluginInfo != null) {
285286
Object o =
286-
pluginNameVsPluginInfo instanceof MapSerializable
287+
pluginNameVsPluginInfo instanceof MapWriter
287288
? pluginNameVsPluginInfo
288289
: pluginNameVsPluginInfo.get(componentName);
289290
Map<String, Object> pluginInfo =
290-
o instanceof MapSerializable
291-
? ((MapSerializable) o).toMap(new LinkedHashMap<>())
291+
o instanceof MapWriter
292+
? new SimpleOrderedMap<>((MapWriter) o)
292293
: (Map<String, Object>) o;
293294
val.put(
294295
parts.get(1),
295-
pluginNameVsPluginInfo instanceof PluginInfo
296+
pluginNameVsPluginInfo instanceof MapWriter
296297
? pluginInfo
297298
: Map.of(componentName, pluginInfo));
298299
if (req.getParams().getBool("meta", false)) {
@@ -306,8 +307,10 @@ private void handleGET() {
306307
if (infos == null || infos.isEmpty()) continue;
307308
infos.forEach(
308309
(s, mapWriter) -> {
309-
if (s.equals(pluginInfo.get("class"))) {
310-
(pluginInfo).put("_packageinfo_", mapWriter);
310+
Map<String, Object> componentInfo =
311+
getComponentInfo(pluginInfo, componentName);
312+
if (s.equals(componentInfo.get("class"))) {
313+
(componentInfo).put("_packageinfo_", mapWriter);
311314
}
312315
});
313316
}
@@ -320,6 +323,16 @@ private void handleGET() {
320323
}
321324
}
322325

326+
@SuppressWarnings({"unchecked"})
327+
private Map<String, Object> getComponentInfo(
328+
Map<String, Object> pluginInfo, String componentName) {
329+
if (pluginInfo.containsKey("class")) {
330+
return pluginInfo;
331+
}
332+
return (Map<String, Object>)
333+
pluginInfo.computeIfAbsent(componentName, k -> new LinkedHashMap<>());
334+
}
335+
323336
private Map<String, Object> getConfigDetails(String componentType, SolrQueryRequest req) {
324337
String componentName = componentType == null ? null : req.getParams().get("componentName");
325338
boolean showParams = req.getParams().getBool("expandParams", false);
@@ -510,9 +523,7 @@ private void handleParams(ArrayList<CommandOperation> ops, RequestParams params)
510523
ZkController.touchConfDir(zkLoader);
511524
} else {
512525
if (log.isDebugEnabled()) {
513-
log.debug(
514-
"persisting params data : {}",
515-
Utils.toJSONString(params.toMap(new LinkedHashMap<>())));
526+
log.debug("persisting params data : {}", Utils.toJSONString(params));
516527
}
517528
int latestVersion =
518529
ZkController.persistConfigResourceToZooKeeper(

solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.apache.solr.common.SolrException.ErrorCode.BAD_REQUEST;
2222
import static org.apache.solr.common.util.StrUtils.splitSmart;
2323

24+
import java.io.IOException;
2425
import java.util.ArrayList;
2526
import java.util.Collection;
2627
import java.util.Collections;
@@ -185,7 +186,7 @@ public Iterator<String> getParameterNamesIterator() {
185186
}
186187

187188
@Override
188-
public Map<String, Object> toMap(Map<String, Object> suppliedMap) {
189+
public void writeMap(EntryWriter ew) throws IOException {
189190
for (Iterator<String> it = getParameterNamesIterator(); it.hasNext(); ) {
190191
final String param = it.next();
191192
String key = cmd.meta().getParamSubstitute(param);
@@ -195,26 +196,29 @@ public Map<String, Object> toMap(Map<String, Object> suppliedMap) {
195196
: map.get(key);
196197
if (o == null) o = pathValues.get(key);
197198
if (o == null && useRequestParams) o = origParams.getParams(key);
199+
if (o == null) continue;
198200
// make strings out of as many things as we can now to minimize differences from
199201
// the standard impls that pass through a NamedList/SimpleOrderedMap...
200202
Class<?> oClass = o.getClass();
201203
if (oClass.isPrimitive()
202204
|| Number.class.isAssignableFrom(oClass)
203205
|| Character.class.isAssignableFrom(oClass)
204206
|| Boolean.class.isAssignableFrom(oClass)) {
205-
suppliedMap.put(param, String.valueOf(o));
206-
} else if (List.class.isAssignableFrom(oClass)
207-
&& ((List) o).get(0) instanceof String) {
207+
ew.put(param, String.valueOf(o));
208+
} else if (List.class.isAssignableFrom(oClass)) {
208209
@SuppressWarnings({"unchecked"})
209-
List<String> l = (List<String>) o;
210-
suppliedMap.put(param, l.toArray(new String[0]));
210+
List<?> l = (List<?>) o;
211+
if (l.isEmpty() || l.get(0) instanceof String) {
212+
ew.put(param, l.toArray(new String[0]));
213+
} else {
214+
ew.put(param, o);
215+
}
211216
} else {
212217
// Lists pass through but will require special handling downstream
213218
// if they contain non-string elements.
214-
suppliedMap.put(param, o);
219+
ew.put(param, o);
215220
}
216221
}
217-
return suppliedMap;
218222
}
219223
});
220224
}

solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.apache.lucene.util.SuppressForbidden;
6060
import org.apache.lucene.util.UnicodeUtil;
6161
import org.apache.solr.common.MapWriter;
62+
import org.apache.solr.common.util.SimpleOrderedMap;
6263
import org.apache.solr.common.util.Utils;
6364
import org.slf4j.Logger;
6465
import org.slf4j.LoggerFactory;
@@ -277,12 +278,10 @@ private void convert(Map<String, Object> result) {
277278
for (Map.Entry<String, Object> entry : result.entrySet()) {
278279
Object value = entry.getValue();
279280
if (value instanceof ItemPriorityQueue queue) {
280-
Map<String, Object> map = new LinkedHashMap<>();
281-
queue.toMap(map);
281+
Map<String, Object> map = new SimpleOrderedMap<>(queue);
282282
entry.setValue(map);
283283
} else if (value instanceof MapWriterSummaryStatistics stats) {
284-
Map<String, Object> map = new LinkedHashMap<>();
285-
stats.toMap(map);
284+
Map<String, Object> map = new SimpleOrderedMap<>(stats);
286285
entry.setValue(map);
287286
} else if (value instanceof AtomicLong) {
288287
entry.setValue(((AtomicLong) value).longValue());

solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.apache.solr.common.params.SolrParams;
5454
import org.apache.solr.common.util.SimpleOrderedMap;
5555
import org.apache.solr.common.util.SuppressForbidden;
56+
import org.apache.solr.common.util.Utils;
5657
import org.apache.solr.core.CoreContainer;
5758
import org.apache.solr.handler.RequestHandlerBase;
5859
import org.apache.solr.request.SolrQueryRequest;
@@ -758,7 +759,7 @@ public void build() throws IOException {
758759
for (String collection : page.selected) {
759760
DocCollection dc = cs.getCollectionOrNull(collection);
760761
if (dc != null) {
761-
Map<String, Object> collectionState = dc.toMap(new LinkedHashMap<>());
762+
Map<String, Object> collectionState = Utils.convertToMap(dc, new LinkedHashMap<>());
762763
if (applyStatusFilter) {
763764
// verify this collection matches the filtered state
764765
if (page.matchesStatusFilter(collectionState, liveNodes)) {

solr/core/src/java/org/apache/solr/handler/admin/api/CreateCore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ private Map<String, String> buildCoreParams(CreateCoreParams createParams) {
158158
}
159159

160160
public static CreateCoreParams createRequestBodyFromV1Params(SolrParams solrParams) {
161-
final var v1ParamMap = solrParams.toMap(new HashMap<>());
161+
final var v1ParamMap = Utils.convertToMap(solrParams, new HashMap<>());
162162
v1ParamMap.remove(ACTION);
163163
v1ParamMap.remove(ASYNC);
164164

solr/core/src/java/org/apache/solr/handler/admin/api/InstallShardData.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.solr.common.cloud.ZkNodeProps;
3333
import org.apache.solr.common.params.CollectionParams;
3434
import org.apache.solr.common.util.StrUtils;
35+
import org.apache.solr.common.util.Utils;
3536
import org.apache.solr.core.CoreContainer;
3637
import org.apache.solr.jersey.PermissionName;
3738
import org.apache.solr.request.SolrQueryRequest;
@@ -117,6 +118,6 @@ public static ZkNodeProps createRemoteMessage(
117118
}
118119

119120
messageTyped.validate();
120-
return new ZkNodeProps(messageTyped.toMap(new HashMap<>()));
121+
return new ZkNodeProps(Utils.convertToMap(messageTyped, new HashMap<>()));
121122
}
122123
}

solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocsAPI.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.solr.api.PayloadObj;
3030
import org.apache.solr.client.solrj.request.beans.MigrateDocsPayload;
3131
import org.apache.solr.common.params.CollectionParams;
32+
import org.apache.solr.common.util.Utils;
3233
import org.apache.solr.handler.admin.CollectionsHandler;
3334

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

solr/core/src/java/org/apache/solr/handler/admin/api/ModifyCollectionAPI.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.solr.api.PayloadObj;
3232
import org.apache.solr.client.solrj.request.beans.ModifyCollectionPayload;
3333
import org.apache.solr.common.params.CollectionParams;
34+
import org.apache.solr.common.util.Utils;
3435
import org.apache.solr.handler.admin.CollectionsHandler;
3536

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

61-
final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
62+
final Map<String, Object> v1Params = Utils.convertToMap(v2Body, new HashMap<>());
6263
v1Params.put(ACTION, CollectionParams.CollectionAction.MODIFYCOLLECTION.toLower());
6364
v1Params.put(COLLECTION, obj.getRequest().getPathTemplateValues().get(COLLECTION));
6465
if (v2Body.config != null) {

solr/core/src/java/org/apache/solr/handler/admin/api/MoveReplicaAPI.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.solr.api.PayloadObj;
3030
import org.apache.solr.client.solrj.request.beans.MoveReplicaPayload;
3131
import org.apache.solr.common.params.CollectionParams;
32+
import org.apache.solr.common.util.Utils;
3233
import org.apache.solr.handler.admin.CollectionsHandler;
3334

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

0 commit comments

Comments
 (0)