You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2026/06/22 20:50:55 UTC
(solr) branch branch_10x updated (9f71deb20a6 -> 8271b6c443c)
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a change to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
from 9f71deb20a6 Refactor CLI StreamTool SolrClientCache usage (#4513)
new 7e21d0aa21a SOLR-17600 MapSerializable p1: Migrate V2 API Payloads (#4463)
new bad113c950d SOLR-17600: MapSerializable p2: Migrate Core config classes (#4464)
new 5095a896b4d SOLR-17600: MapSerializable p3: Migrate SolrJ and Utilities from MapSerializable (#4465)
new 8271b6c443c SOLR-17600: MapSerializable p4: Delete MapSerializable (#4466)
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
changelog/unreleased/SOLR-17600.yml | 7 ++
.../solr/api/NodeConfigClusterPluginsSource.java | 3 +-
.../java/org/apache/solr/core/ConfigOverlay.java | 12 +-
.../src/java/org/apache/solr/core/PluginInfo.java | 50 +++++---
.../java/org/apache/solr/core/RequestParams.java | 26 ++--
.../src/java/org/apache/solr/core/SolrConfig.java | 134 +++++++++++----------
.../apache/solr/filestore/ClusterFileStore.java | 3 +-
.../java/org/apache/solr/handler/ClusterAPI.java | 5 +-
.../org/apache/solr/handler/SolrConfigHandler.java | 38 ++++--
.../solr/handler/admin/BaseHandlerApiSupport.java | 20 +--
.../solr/handler/admin/IndexSizeEstimator.java | 7 +-
.../solr/handler/admin/ZookeeperInfoHandler.java | 3 +-
.../apache/solr/handler/admin/api/CreateCore.java | 2 +-
.../solr/handler/admin/api/InstallShardData.java | 3 +-
.../solr/handler/admin/api/MigrateDocsAPI.java | 3 +-
.../handler/admin/api/ModifyCollectionAPI.java | 3 +-
.../solr/handler/admin/api/MoveReplicaAPI.java | 3 +-
.../handler/admin/api/OverseerOperationAPI.java | 3 +-
.../handler/admin/api/PrepareCoreRecoveryAPI.java | 3 +-
.../handler/admin/api/RebalanceLeadersAPI.java | 3 +-
.../handler/admin/api/RejoinLeaderElectionAPI.java | 3 +-
.../admin/api/RequestApplyCoreUpdatesAPI.java | 3 +-
.../handler/admin/api/RequestBufferUpdatesAPI.java | 3 +-
.../handler/admin/api/RequestCoreRecoveryAPI.java | 3 +-
.../handler/admin/api/RequestSyncShardAPI.java | 3 +-
.../solr/handler/admin/api/SplitCoreAPI.java | 3 +-
.../solr/handler/admin/api/SplitShardAPI.java | 3 +-
.../solr/handler/designer/ManagedSchemaDiff.java | 5 +-
.../solr/handler/export/ExportWriterStream.java | 7 +-
.../java/org/apache/solr/schema/IndexSchema.java | 23 ++--
.../java/org/apache/solr/search/CacheConfig.java | 12 +-
.../org/apache/solr/update/IndexFingerprint.java | 25 ++--
.../org/apache/solr/update/SolrIndexConfig.java | 39 +++---
.../api/NodeConfigClusterPluginsSourceTest.java | 5 +-
.../test/org/apache/solr/core/CacheConfigTest.java | 8 +-
.../src/test/org/apache/solr/core/TestConfig.java | 6 +-
.../handler/designer/TestSchemaDesignerAPI.java | 3 +-
.../apache/solr/update/SolrIndexConfigTest.java | 12 +-
.../extraction/TikaServerExtractionBackend.java | 2 +-
.../client/solrj/io/stream/expr/Explanation.java | 44 ++-----
.../solrj/io/stream/expr/StreamExplanation.java | 18 +--
.../org/apache/solr/common/IteratorWriter.java | 4 +-
.../org/apache/solr/common/MapSerializable.java | 33 -----
.../src/java/org/apache/solr/common/MapWriter.java | 9 +-
.../java/org/apache/solr/common/MapWriterMap.java | 5 -
.../org/apache/solr/common/cloud/ZkNodeProps.java | 2 +-
.../org/apache/solr/common/util/JavaBinCodec.java | 6 -
.../org/apache/solr/common/util/TextWriter.java | 5 -
.../java/org/apache/solr/common/util/Utils.java | 12 +-
.../solr/client/solrj/SolrExampleCborTest.java | 4 +-
.../apache/solr/common/cloud/ClusterStateUtil.java | 3 +-
51 files changed, 304 insertions(+), 340 deletions(-)
create mode 100644 changelog/unreleased/SOLR-17600.yml
delete mode 100644 solr/solrj/src/java/org/apache/solr/common/MapSerializable.java
(solr) 01/04: SOLR-17600 MapSerializable p1: Migrate V2 API Payloads (#4463)
Posted by ds...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
commit 7e21d0aa21ab6d16d90f886b6f248d0a9ee21e9f
Author: Ivan Šarić <in...@path-variable.com>
AuthorDate: Mon Jun 8 16:54:49 2026 +0200
SOLR-17600 MapSerializable p1: Migrate V2 API Payloads (#4463)
MapSerializable is deprecated; stop using it in some places.
(cherry picked from commit ddb1923d15e5a2448e1f82bef1909ff4b1f6d337)
---
.../java/org/apache/solr/handler/ClusterAPI.java | 5 ++--
.../org/apache/solr/handler/SolrConfigHandler.java | 33 ++++++++++++++--------
.../solr/handler/admin/BaseHandlerApiSupport.java | 20 +++++++------
.../solr/handler/admin/IndexSizeEstimator.java | 7 ++---
.../solr/handler/admin/ZookeeperInfoHandler.java | 3 +-
.../apache/solr/handler/admin/api/CreateCore.java | 2 +-
.../solr/handler/admin/api/InstallShardData.java | 3 +-
.../solr/handler/admin/api/MigrateDocsAPI.java | 3 +-
.../handler/admin/api/ModifyCollectionAPI.java | 3 +-
.../solr/handler/admin/api/MoveReplicaAPI.java | 3 +-
.../handler/admin/api/OverseerOperationAPI.java | 3 +-
.../handler/admin/api/PrepareCoreRecoveryAPI.java | 3 +-
.../handler/admin/api/RebalanceLeadersAPI.java | 3 +-
.../handler/admin/api/RejoinLeaderElectionAPI.java | 3 +-
.../admin/api/RequestApplyCoreUpdatesAPI.java | 3 +-
.../handler/admin/api/RequestBufferUpdatesAPI.java | 3 +-
.../handler/admin/api/RequestCoreRecoveryAPI.java | 3 +-
.../handler/admin/api/RequestSyncShardAPI.java | 3 +-
.../solr/handler/admin/api/SplitCoreAPI.java | 3 +-
.../solr/handler/admin/api/SplitShardAPI.java | 3 +-
.../solr/handler/designer/ManagedSchemaDiff.java | 5 ++--
.../solr/handler/export/ExportWriterStream.java | 7 ++---
.../handler/designer/TestSchemaDesignerAPI.java | 3 +-
23 files changed, 77 insertions(+), 50 deletions(-)
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 7bc49e85f2a..e8c36f4e8cc 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.CommonParams;
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 ClusterAPI {
@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());
}
@@ -267,7 +268,7 @@ public class ClusterAPI {
@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());
}
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 e27bfc0e317..975bd79d65b 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.request.CollectionRequiringSolrRequest;
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.CommandOperation;
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 @@ public class SolrConfigHandler extends RequestHandlerBase
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), p));
}
resp.add(SolrQueryResponse.NAME, m);
} else {
@@ -283,16 +284,16 @@ public class SolrConfigHandler extends RequestHandlerBase
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)) {
@@ -306,8 +307,10 @@ public class SolrConfigHandler extends RequestHandlerBase
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);
}
});
}
@@ -320,6 +323,16 @@ public class SolrConfigHandler extends RequestHandlerBase
}
}
+ @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);
@@ -510,9 +523,7 @@ public class SolrConfigHandler extends RequestHandlerBase
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 0244726235b..82d2e869aad 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.client.solrj.SolrRequest.METHOD.POST;
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 abstract class BaseHandlerApiSupport implements ApiSupport {
}
@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);
@@ -195,6 +196,7 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
: map.get(key);
if (o == null) o = pathValues.get(key);
if (o == null && useRequestParams) o = origParams.getParams(key);
+ if (o == 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 +204,21 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
|| 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;
}
});
}
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 b88ae352e52..38eb8a464cf 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.RamUsageEstimator;
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 @@ public class IndexSizeEstimator {
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);
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 c2e6d29ac5c..967c153071f 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.MapSolrParams;
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 final class ZookeeperInfoHandler extends RequestHandlerBase {
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)) {
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 289d51d68c4..99602b9e598 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 @@ public class CreateCore extends CoreAdminAPIBase implements CoreApis.Create {
}
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 4033fa6f097..ef609956772 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.Slice;
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 class InstallShardData extends AdminAPIBase implements InstallShardDataAp
}
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 7e3898c8a89..ddb25d3d8aa 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.EndPoint;
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 class MigrateDocsAPI {
@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));
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 93d11d0c428..0c5f717f6ef 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.EndPoint;
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 class ModifyCollectionAPI {
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) {
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 3c0d701de30..54bc62310b8 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.EndPoint;
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 class MoveReplicaAPI {
@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));
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 1c566a8c610..ffd3eb0f6dd 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
@@ -30,6 +30,7 @@ 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.Utils;
import org.apache.solr.handler.admin.CoreAdminHandler;
/**
@@ -59,7 +60,7 @@ public class OverseerOperationAPI {
@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 = Utils.convertToMap(payload.get(), new HashMap<>());
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 c5b83049815..dac4e632656 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.Command;
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 class PrepareCoreRecoveryAPI {
@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"));
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 e9127817732..ace2822bee8 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.EndPoint;
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 class RebalanceLeadersAPI {
@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));
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 7558ea822ec..24ca19231df 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.Command;
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 class RejoinLeaderElectionAPI {
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");
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 51c20fb545f..5118e149944 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.Command;
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 class RequestApplyCoreUpdatesAPI {
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"));
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 8625bfc9b72..0e34af98605 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.EndPoint;
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 class RequestBufferUpdatesAPI {
@Command(name = V2_REQUEST_BUFFER_UPDATES_CMD)
public void requestBufferUpdates(PayloadObj<RequestBufferUpdatesPayload> obj) throws Exception {
final RequestBufferUpdatesPayload 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, 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 a259c608430..e367821be45 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.Command;
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 class RequestCoreRecoveryAPI {
@Command(name = V2_REQUEST_RECOVERY_CMD)
public void requestCoreRecovery(PayloadObj<RequestCoreRecoveryPayload> obj) throws Exception {
final RequestCoreRecoveryPayload 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, 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 c36a99ce545..54e73c49350 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.Command;
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 class RequestSyncShardAPI {
@Command(name = V2_REQUEST_SYNC_SHARD_CMD)
public void requestSyncShard(PayloadObj<RequestSyncShardPayload> obj) throws Exception {
final RequestSyncShardPayload 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, 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 d846caea34b..e12fc60f182 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.api.PayloadObj;
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 class SplitCoreAPI {
@Command(name = V2_SPLIT_CORE_CMD)
public void splitCore(PayloadObj<SplitCorePayload> obj) throws Exception {
final SplitCorePayload v2Body = obj.get();
- final Map<String, Object> v1Params = v2Body.toMap(new HashMap<>());
+ final Map<String, Object> 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 0c75f053cae..873bfe3393a 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.client.solrj.request.beans.SplitShardPayload;
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 class SplitShardAPI {
@Command(name = V2_SPLIT_CMD)
public void splitShard(PayloadObj<SplitShardPayload> obj) throws Exception {
final SplitShardPayload 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.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 3d064ce7286..89112231e08 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.Collectors;
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 @@ public class ManagedSchemaDiff {
@SuppressForbidden(reason = "Maps.difference")
private static List<Map<String, Object>> getMapDifference(
SimpleOrderedMap<Object> simpleOrderedMap1, SimpleOrderedMap<Object> simpleOrderedMap2) {
- Map<String, Object> map1 = simpleOrderedMap1.toMap(new HashMap<>());
- Map<String, Object> map2 = simpleOrderedMap2.toMap(new HashMap<>());
+ Map<String, Object> map1 = Utils.convertToMap(simpleOrderedMap1, new HashMap<>());
+ Map<String, Object> map2 = Utils.convertToMap(simpleOrderedMap2, new HashMap<>());
Map<String, MapDifference.ValueDifference<Object>> 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 8700064bba7..86bbefb8e37 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 @@ package org.apache.solr.handler.export;
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.StreamExpressionParameter;
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 class ExportWriterStream extends TupleStream implements Expressible {
((IteratorWriter) v).toList(lst);
v = lst;
} else if (v instanceof MapWriter) {
- Map<String, Object> 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 ed1aba6ceb5..6eb157e914c 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.Files;
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 class TestSchemaDesignerAPI extends SolrCloudTestCase implements SchemaDe
idFieldMapUpdated.indexOf("omitTermFreqAndPositions", 0), Boolean.FALSE);
SolrParams solrParams = idFieldMapUpdated.toSolrParams();
- Map<String, Object> mapParams = solrParams.toMap(new HashMap<>());
+ Map<String, Object> mapParams = new SimpleOrderedMap<>(solrParams);
mapParams.put("termVectors", Boolean.FALSE);
reqParams.set(
SCHEMA_VERSION_PARAM, rsp.getValues().toSolrParams().getInt(SCHEMA_VERSION_PARAM));
(solr) 04/04: SOLR-17600: MapSerializable p4: Delete MapSerializable (#4466)
Posted by ds...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
commit 8271b6c443c6eec7365a8ed8197fdf74f0d1c151
Author: Ivan Šarić <iv...@path-variable.com>
AuthorDate: Sun Jun 21 06:23:27 2026 +0200
SOLR-17600: MapSerializable p4: Delete MapSerializable (#4466)
MapSerializable is deprecated; stop using it in some places.
(cherry picked from commit f9f5abf21e972afc67121af36640eec7ac5c63b4)
---
changelog/unreleased/SOLR-17600.yml | 7 +++++
.../org/apache/solr/common/MapSerializable.java | 33 ----------------------
.../org/apache/solr/common/util/JavaBinCodec.java | 6 ----
.../org/apache/solr/common/util/TextWriter.java | 5 ----
4 files changed, 7 insertions(+), 44 deletions(-)
diff --git a/changelog/unreleased/SOLR-17600.yml b/changelog/unreleased/SOLR-17600.yml
new file mode 100644
index 00000000000..e89a7090742
--- /dev/null
+++ b/changelog/unreleased/SOLR-17600.yml
@@ -0,0 +1,7 @@
+title: Replace MapSerializable with MapWriter
+type: other
+authors:
+ - name: Ivan Šarić
+links:
+ - name: SOLR-17600
+ url: https://issues.apache.org/jira/browse/SOLR-17600
diff --git a/solr/solrj/src/java/org/apache/solr/common/MapSerializable.java b/solr/solrj/src/java/org/apache/solr/common/MapSerializable.java
deleted file mode 100644
index e5d6ebafa92..00000000000
--- a/solr/solrj/src/java/org/apache/solr/common/MapSerializable.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.common;
-
-import java.util.Map;
-
-/**
- * This is to facilitate just in time creation of objects before writing it to the response.
- *
- * @deprecated Use {@link MapWriter} instead
- */
-@Deprecated
-public interface MapSerializable {
- /**
- * Use the passed map to minimize object creation. Do not keep a reference to the passed map and
- * reuse it. it may be reused by the framework
- */
- Map<String, Object> toMap(Map<String, Object> map);
-}
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
index dc47f5aa67d..63e6613ae25 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
@@ -47,7 +47,6 @@ import org.apache.solr.common.ConditionalKeyMapWriter;
import org.apache.solr.common.EnumFieldValue;
import org.apache.solr.common.IteratorWriter;
import org.apache.solr.common.IteratorWriter.ItemWriter;
-import org.apache.solr.common.MapSerializable;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.PushWriter;
import org.apache.solr.common.SolrDocument;
@@ -428,11 +427,6 @@ public class JavaBinCodec implements PushWriter {
writeMapEntry((Map.Entry) val);
return true;
}
- if (val instanceof MapSerializable) {
- // todo find a better way to reuse the map more efficiently
- writeMap(((MapSerializable) val).toMap(new NamedList().asShallowMap()));
- return true;
- }
if (val instanceof AtomicInteger) {
writeInt(((AtomicInteger) val).get());
return true;
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/TextWriter.java b/solr/solrj/src/java/org/apache/solr/common/util/TextWriter.java
index 6901b2db5ed..ea50ab8bbbc 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/TextWriter.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/TextWriter.java
@@ -27,7 +27,6 @@ import java.util.Base64;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -38,7 +37,6 @@ import java.util.concurrent.atomic.LongAdder;
import org.apache.solr.client.api.util.ReflectWritable;
import org.apache.solr.common.EnumFieldValue;
import org.apache.solr.common.IteratorWriter;
-import org.apache.solr.common.MapSerializable;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.PushWriter;
@@ -89,9 +87,6 @@ public interface TextWriter extends PushWriter {
writeMap(name, (MapWriter) val);
} else if (val instanceof ReflectWritable) {
writeVal(name, Utils.getReflectWriter(val));
- } else if (val instanceof MapSerializable) {
- // todo find a better way to reuse the map more efficiently
- writeMap(name, ((MapSerializable) val).toMap(new LinkedHashMap<>()), false, true);
} else if (val instanceof Map) {
writeMap(name, (Map) val, false, true);
} else if (val instanceof Collection<?> cval) { // very generic; keep towards the end
(solr) 02/04: SOLR-17600: MapSerializable p2: Migrate Core config classes (#4464)
Posted by ds...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
commit bad113c950d1d7f005bea53066b12f1bb4f02196
Author: Ivan Šarić <iv...@path-variable.com>
AuthorDate: Thu Jun 11 19:22:30 2026 +0200
SOLR-17600: MapSerializable p2: Migrate Core config classes (#4464)
MapSerializable is deprecated; stop using it in some places.
(cherry picked from commit 22c37b3c7fd185ac349980787a96d04565c23231)
---
.../solr/api/NodeConfigClusterPluginsSource.java | 3 +-
.../java/org/apache/solr/core/ConfigOverlay.java | 12 +-
.../src/java/org/apache/solr/core/PluginInfo.java | 50 +++++---
.../java/org/apache/solr/core/RequestParams.java | 26 ++--
.../src/java/org/apache/solr/core/SolrConfig.java | 134 +++++++++++----------
.../apache/solr/filestore/ClusterFileStore.java | 3 +-
.../org/apache/solr/handler/SolrConfigHandler.java | 5 +-
.../java/org/apache/solr/schema/IndexSchema.java | 23 ++--
.../java/org/apache/solr/search/CacheConfig.java | 12 +-
.../org/apache/solr/update/IndexFingerprint.java | 25 ++--
.../org/apache/solr/update/SolrIndexConfig.java | 39 +++---
.../api/NodeConfigClusterPluginsSourceTest.java | 5 +-
.../test/org/apache/solr/core/CacheConfigTest.java | 8 +-
.../src/test/org/apache/solr/core/TestConfig.java | 6 +-
.../apache/solr/update/SolrIndexConfigTest.java | 12 +-
15 files changed, 188 insertions(+), 175 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/api/NodeConfigClusterPluginsSource.java b/solr/core/src/java/org/apache/solr/api/NodeConfigClusterPluginsSource.java
index 4282cce69b2..360ef8c3e96 100644
--- a/solr/core/src/java/org/apache/solr/api/NodeConfigClusterPluginsSource.java
+++ b/solr/core/src/java/org/apache/solr/api/NodeConfigClusterPluginsSource.java
@@ -79,8 +79,7 @@ public class NodeConfigClusterPluginsSource implements ClusterPluginsSource {
pluginMap.put("class", p.className);
if (p.initArgs.size() > 0) {
- Map<String, Object> config = p.initArgs.toMap(new HashMap<>());
- pluginMap.put("config", config);
+ pluginMap.put("config", p.initArgs.asMap(0));
}
pluginInfos.put(pluginName, pluginMap);
diff --git a/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java b/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java
index 480df900f83..9898d5efeac 100644
--- a/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java
+++ b/solr/core/src/java/org/apache/solr/core/ConfigOverlay.java
@@ -18,12 +18,13 @@ package org.apache.solr.core;
import static org.apache.solr.common.util.Utils.toJSONString;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.util.StrUtils;
@@ -33,7 +34,7 @@ import org.apache.solr.common.util.Utils;
* This class encapsulates the config overlay json file. It is immutable and any edit operations
* performed on this gives a new copy of the object with the changed value
*/
-public class ConfigOverlay implements MapSerializable {
+public class ConfigOverlay implements MapWriter {
private final int version;
private final Map<String, Object> data;
private Map<String, Object> props;
@@ -233,10 +234,9 @@ public class ConfigOverlay implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- map.put(ZNODEVER, version);
- map.putAll(data);
- return map;
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put(ZNODEVER, version);
+ data.forEach(ew::putNoEx);
}
@SuppressWarnings({"unchecked"})
diff --git a/solr/core/src/java/org/apache/solr/core/PluginInfo.java b/solr/core/src/java/org/apache/solr/core/PluginInfo.java
index 1cd80713b44..1b5e501e423 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginInfo.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginInfo.java
@@ -23,19 +23,20 @@ import static org.apache.solr.common.params.CoreAdminParams.NAME;
import static org.apache.solr.schema.FieldType.CLASS_NAME;
import com.google.common.annotations.VisibleForTesting;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.common.ConfigNode;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.util.DOMConfigNode;
import org.w3c.dom.Node;
/** An Object which represents a Plugin of any type */
-public class PluginInfo implements MapSerializable {
+public class PluginInfo implements MapWriter {
public final String name, className, type, pkgName;
public final ClassName cName;
public final NamedList<Object> initArgs;
@@ -193,26 +194,35 @@ public class PluginInfo implements MapSerializable {
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
- public Map<String, Object> toMap(Map<String, Object> map) {
- map.putAll(attributes);
- Map m = map;
- if (initArgs != null) m.putAll(initArgs.asMap(3));
- if (children != null) {
- for (PluginInfo child : children) {
- Object old = m.get(child.name);
- if (old == null) {
- m.put(child.name, child.toMap(new LinkedHashMap<>()));
- } else if (old instanceof List list) {
- list.add(child.toMap(new LinkedHashMap<>()));
- } else {
- ArrayList l = new ArrayList();
- l.add(old);
- l.add(child.toMap(new LinkedHashMap<>()));
- m.put(child.name, l);
- }
+ public void writeMap(EntryWriter ew) throws IOException {
+ // Direct forEach(ew::putNoEx) does not work: attributes is declared Map<String, String> but
+ // the PluginInfo(String, Map<String, Object>) constructor assigns it via raw types, so values
+ // may not be Strings. The bridge method generated for forEach would CCE on non-String values.
+ new NamedList<>(attributes).writeMap(ew);
+ if (initArgs != null) {
+ initArgs.asMap(3).forEach((k, v) -> ew.putNoEx((String) k, v));
+ }
+ if (children == null || children.isEmpty()) {
+ return;
+ }
+
+ Map<String, Object> childrenGrouped = new LinkedHashMap<>();
+ for (PluginInfo child : children) {
+ Object old = childrenGrouped.get(child.name);
+ if (old == null) {
+ childrenGrouped.put(child.name, child);
+ } else if (old instanceof List list) {
+ list.add(child);
+ } else {
+ List<Object> l = new ArrayList<>();
+ l.add(old);
+ l.add(child);
+ childrenGrouped.put(child.name, l);
}
}
- return m;
+ for (Map.Entry<String, Object> entry : childrenGrouped.entrySet()) {
+ ew.put(entry.getKey(), entry.getValue());
+ }
}
/**
diff --git a/solr/core/src/java/org/apache/solr/core/RequestParams.java b/solr/core/src/java/org/apache/solr/core/RequestParams.java
index 469b107e9af..b1c80bf3836 100644
--- a/solr/core/src/java/org/apache/solr/core/RequestParams.java
+++ b/solr/core/src/java/org/apache/solr/core/RequestParams.java
@@ -24,7 +24,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.params.MultiMapSolrParams;
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
* The class encapsulates the request time parameters . This is immutable and any changes performed
* returns a copy of the Object with the changed values
*/
-public class RequestParams implements MapSerializable {
+public class RequestParams implements MapWriter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map<String, Object> data;
@@ -112,8 +112,9 @@ public class RequestParams implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- return getMapWithVersion(data, znodeVersion);
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put(ConfigOverlay.ZNODEVER, znodeVersion);
+ data.forEach(ew::putNoEx);
}
public static Map<String, Object> getMapWithVersion(Map<String, Object> data, int znodeVersion) {
@@ -129,7 +130,9 @@ public class RequestParams implements MapSerializable {
Map p = (Map) deepCopy.get(NAME);
if (p == null) deepCopy.put(NAME, p = new LinkedHashMap<>());
if (paramSet == null) p.remove(name);
- else p.put(name, paramSet.toMap(new LinkedHashMap<>()));
+ else {
+ p.put(name, Utils.convertToMap(paramSet, new LinkedHashMap<>()));
+ }
return new RequestParams(deepCopy, znodeVersion);
}
@@ -207,7 +210,7 @@ public class RequestParams implements MapSerializable {
public static final String INVARIANTS = "_invariants_";
@SuppressWarnings({"unchecked"})
- public static class ParamSet implements MapSerializable {
+ public static class ParamSet implements MapWriter {
private final Map<String, Object> defaults, appends, invariants;
Map<String, VersionedParams> paramsMap;
public final Map<String, Long> meta;
@@ -234,12 +237,11 @@ public class RequestParams implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> result) {
- result.putAll(defaults);
- if (appends != null) result.put(APPENDS, appends);
- if (invariants != null) result.put(INVARIANTS, invariants);
- if (meta != null) result.put("", meta);
- return result;
+ public void writeMap(EntryWriter ew) throws IOException {
+ defaults.forEach(ew::putNoEx);
+ if (appends != null) ew.put(APPENDS, appends);
+ if (invariants != null) ew.put(INVARIANTS, invariants);
+ if (meta != null) ew.put("", meta);
}
@SuppressWarnings({"rawtypes"})
diff --git a/solr/core/src/java/org/apache/solr/core/SolrConfig.java b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
index 1bbe7a9f807..b5358755d1f 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
@@ -59,7 +59,7 @@ import org.apache.solr.client.solrj.io.stream.expr.Expressible;
import org.apache.solr.cloud.RecoveryStrategy;
import org.apache.solr.cloud.ZkSolrResourceLoader;
import org.apache.solr.common.ConfigNode;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.util.IOUtils;
@@ -96,7 +96,7 @@ import org.slf4j.LoggerFactory;
* Provides a static reference to a Config object modeling the main configuration data for a Solr
* core -- typically found in "solrconfig.xml".
*/
-public class SolrConfig implements MapSerializable {
+public class SolrConfig implements MapWriter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -685,23 +685,17 @@ public class SolrConfig implements MapSerializable {
return httpCachingConfig;
}
- public static class HttpCachingConfig implements MapSerializable {
+ public static class HttpCachingConfig implements MapWriter {
/** For extracting Expires "ttl" from <cacheControl> config */
private static final Pattern MAX_AGE = Pattern.compile("\\bmax-age=(\\d+)");
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- // Could have nulls
- return Utils.makeMap(
- "never304",
- never304,
- "etagSeed",
- etagSeed,
- "lastModFrom",
- lastModFrom.name().toLowerCase(Locale.ROOT),
- "cacheControl",
- cacheControlHeader);
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put("never304", never304)
+ .put("etagSeed", etagSeed)
+ .put("lastModFrom", lastModFrom.name().toLowerCase(Locale.ROOT))
+ .put("cacheControl", cacheControlHeader);
}
public enum LastModFrom {
@@ -783,7 +777,7 @@ public class SolrConfig implements MapSerializable {
}
}
- public static class UpdateHandlerInfo implements MapSerializable {
+ public static class UpdateHandlerInfo implements MapWriter {
public final String className;
public final int autoCommmitMaxDocs,
autoCommmitMaxTime,
@@ -842,19 +836,18 @@ public class SolrConfig implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- map.put("commitWithin", Map.of("softCommit", commitWithinSoftCommit));
- map.put(
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put("commitWithin", Map.of("softCommit", commitWithinSoftCommit));
+ ew.put(
"autoCommit",
Map.of(
"maxDocs", autoCommmitMaxDocs,
"maxTime", autoCommmitMaxTime,
"openSearcher", openSearcher));
- map.put(
+ ew.put(
"autoSoftCommit",
Map.of("maxDocs", autoSoftCommmitMaxDocs, "maxTime", autoSoftCommmitMaxTime));
- map.put("commitPollInterval", commitPollInterval);
- return map;
+ ew.put("commitPollInterval", commitPollInterval);
}
}
@@ -952,20 +945,34 @@ public class SolrConfig implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> result) {
- if (znodeVersion > -1) result.put(ZNODEVER, znodeVersion);
- if (luceneMatchVersion != null)
- result.put(IndexSchema.LUCENE_MATCH_VERSION_PARAM, luceneMatchVersion.toString());
- result.put("updateHandler", getUpdateHandlerInfo());
- Map<String, Object> m = new LinkedHashMap<>();
- result.put("query", m);
- m.put("useFilterForSortedQuery", useFilterForSortedQuery);
- m.put("queryResultWindowSize", queryResultWindowSize);
- m.put("queryResultMaxDocsCached", queryResultMaxDocsCached);
- m.put("enableLazyFieldLoading", enableLazyFieldLoading);
- m.put("maxBooleanClauses", booleanQueryMaxClauseCount);
- m.put(MIN_PREFIX_QUERY_TERM_LENGTH, prefixQueryMinPrefixLength);
+ public void writeMap(EntryWriter ew) throws IOException {
+ if (znodeVersion > -1) {
+ ew.put(ZNODEVER, znodeVersion);
+ }
+ if (luceneMatchVersion != null) {
+ ew.put(IndexSchema.LUCENE_MATCH_VERSION_PARAM, luceneMatchVersion.toString());
+ }
+ ew.put("updateHandler", getUpdateHandlerInfo());
+ ew.put(
+ "query",
+ (MapWriter)
+ m -> {
+ m.put("useFilterForSortedQuery", useFilterForSortedQuery);
+ m.put("queryResultWindowSize", queryResultWindowSize);
+ m.put("queryResultMaxDocsCached", queryResultMaxDocsCached);
+ m.put("enableLazyFieldLoading", enableLazyFieldLoading);
+ m.put("maxBooleanClauses", booleanQueryMaxClauseCount);
+ m.put(MIN_PREFIX_QUERY_TERM_LENGTH, prefixQueryMinPrefixLength);
+
+ addCacheConfig(
+ m,
+ filterCacheConfig,
+ queryResultCacheConfig,
+ documentCacheConfig,
+ fieldValueCacheConfig,
+ featureVectorCacheConfig);
+ });
for (SolrPluginInfo plugin : plugins) {
List<PluginInfo> infos = getPluginInfos(plugin.clazz.getName());
if (infos == null || infos.isEmpty()) continue;
@@ -982,45 +989,46 @@ public class SolrConfig implements MapSerializable {
overlay.getNamedPlugins(plugin.tag).entrySet()) {
items.put(e.getKey(), e.getValue());
}
- result.put(tag, items);
+ ew.put(
+ tag,
+ (MapWriter)
+ m -> {
+ for (Map.Entry<String, Object> item : items.entrySet()) {
+ m.put(item.getKey(), item.getValue());
+ }
+ });
} else {
if (plugin.options.contains(MULTI_OK)) {
- ArrayList<MapSerializable> l = new ArrayList<>();
- for (PluginInfo info : infos) l.add(info);
- result.put(tag, l);
+ ew.put(tag, infos);
} else {
- result.put(tag, infos.get(0));
+ ew.put(tag, infos.getFirst());
}
}
}
- addCacheConfig(
- m,
- filterCacheConfig,
- queryResultCacheConfig,
- documentCacheConfig,
- fieldValueCacheConfig,
- featureVectorCacheConfig);
- m = new LinkedHashMap<>();
- result.put("requestDispatcher", m);
- if (httpCachingConfig != null) m.put("httpCaching", httpCachingConfig);
- m.put(
- "requestParsers",
- Map.of(
- "multipartUploadLimitKB",
- multipartUploadLimitKB,
- "formUploadLimitKB",
- formUploadLimitKB));
- if (indexConfig != null) result.put("indexConfig", indexConfig);
-
- // TODO there is more to add
-
- return result;
+ ew.put(
+ "requestDispatcher",
+ (MapWriter)
+ m -> {
+ if (httpCachingConfig != null) m.put("httpCaching", httpCachingConfig);
+ m.put(
+ "requestParsers",
+ Map.of(
+ "multipartUploadLimitKB",
+ multipartUploadLimitKB,
+ "formUploadLimitKB",
+ formUploadLimitKB));
+ });
+ if (indexConfig != null) ew.put("indexConfig", indexConfig);
}
- private void addCacheConfig(Map<String, Object> queryMap, CacheConfig... cache) {
+ private void addCacheConfig(EntryWriter queryMap, CacheConfig... cache) throws IOException {
if (cache == null) return;
- for (CacheConfig config : cache) if (config != null) queryMap.put(config.getNodeName(), config);
+ for (CacheConfig cc : cache) {
+ if (cc != null) {
+ queryMap.put(cc.getNodeName(), cc);
+ }
+ }
}
public Properties getSubstituteProperties() {
diff --git a/solr/core/src/java/org/apache/solr/filestore/ClusterFileStore.java b/solr/core/src/java/org/apache/solr/filestore/ClusterFileStore.java
index bcd4e562053..80ea2066e65 100644
--- a/solr/core/src/java/org/apache/solr/filestore/ClusterFileStore.java
+++ b/solr/core/src/java/org/apache/solr/filestore/ClusterFileStore.java
@@ -46,6 +46,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.SuppressForbidden;
+import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore;
import org.apache.solr.jersey.PermissionName;
@@ -269,7 +270,7 @@ public class ClusterFileStore extends JerseyResource implements ClusterFileStore
entryMetadata.size = size;
entryMetadata.timestamp = timestamp;
if (details.getMetaData() != null) {
- details.getMetaData().toMap(entryMetadata.unknownProperties());
+ Utils.convertToMap(details.getMetaData(), entryMetadata.unknownProperties());
}
return entryMetadata;
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 975bd79d65b..c9e528e2455 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -336,7 +336,8 @@ public class SolrConfigHandler extends RequestHandlerBase
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 =
+ Utils.convertToMap(this.req.getCore().getSolrConfig(), new LinkedHashMap<>());
if (componentType != null && !SolrRequestHandler.TYPE.equals(componentType)) return map;
@SuppressWarnings({"unchecked"})
@@ -369,7 +370,7 @@ public class SolrConfigHandler extends RequestHandlerBase
if (plugin instanceof Map) {
pluginInfo = (Map) plugin;
} else if (plugin instanceof PluginInfo) {
- pluginInfo = ((PluginInfo) plugin).toMap(new LinkedHashMap<>());
+ pluginInfo = Utils.convertToMap((PluginInfo) plugin, new LinkedHashMap<>());
}
String useParams = (String) pluginInfo.get(USEPARAM);
String useParamsInReq = req.getOriginalParams().get(USEPARAM);
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index ff81ecc84b3..05b362f95b6 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -27,7 +27,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
@@ -56,7 +55,7 @@ import org.apache.lucene.util.ResourceLoaderAware;
import org.apache.lucene.util.Version;
import org.apache.solr.analysis.TokenizerChain;
import org.apache.solr.common.ConfigNode;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -68,7 +67,6 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.Cache;
import org.apache.solr.common.util.NamedList;
-import org.apache.solr.common.util.Pair;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.ConfigSetService;
import org.apache.solr.core.SolrCore;
@@ -1557,7 +1555,7 @@ public class IndexSchema {
return getNamedPropertyValues(null, new MapSolrParams(Map.of()));
}
- public static class SchemaProps implements MapSerializable {
+ public static class SchemaProps implements MapWriter {
private static final String SOURCE_FIELD_LIST = IndexSchema.SOURCE + "." + CommonParams.FL;
private static final String DESTINATION_FIELD_LIST =
IndexSchema.DESTINATION + "." + CommonParams.FL;
@@ -1683,12 +1681,13 @@ public class IndexSchema {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- return Stream.of(Handler.values())
- .filter(it -> name == null || it.nameLower.equals(name))
- .map(it -> new Pair<>(it.realName, it.fun.apply(this)))
- .filter(it -> it.second() != null)
- .collect(Collectors.toMap(Pair::first, Pair::second, (v1, v2) -> v2, LinkedHashMap::new));
+ public void writeMap(EntryWriter ew) throws IOException {
+ for (Handler it : Handler.values()) {
+ if (name == null || it.nameLower.equals(name)) {
+ Object val = it.fun.apply(this);
+ if (val != null) ew.put(it.realName, val);
+ }
+ }
}
}
@@ -1699,7 +1698,9 @@ public class IndexSchema {
SchemaProps.Handler::getNameLower, SchemaProps.Handler::getRealName));
public Map<String, Object> getNamedPropertyValues(String name, SolrParams params) {
- return new SchemaProps(name, params, this).toMap(new LinkedHashMap<>());
+ // Must remain a SimpleOrderedMap (with SOM-valued entries preserved) — SchemaXmlWriter casts
+ // nested values to SimpleOrderedMap when persisting managed schemas.
+ return new SimpleOrderedMap<>(new SchemaProps(name, params, this));
}
/**
diff --git a/solr/core/src/java/org/apache/solr/search/CacheConfig.java b/solr/core/src/java/org/apache/solr/search/CacheConfig.java
index c253f48fa41..71b24ed4c79 100644
--- a/solr/core/src/java/org/apache/solr/search/CacheConfig.java
+++ b/solr/core/src/java/org/apache/solr/search/CacheConfig.java
@@ -18,6 +18,7 @@ package org.apache.solr.search;
import static org.apache.solr.common.params.CommonParams.NAME;
+import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -25,7 +26,7 @@ import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import org.apache.solr.common.ConfigNode;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrConfig;
@@ -37,7 +38,7 @@ import org.slf4j.LoggerFactory;
* Contains the knowledge of how cache config is stored in the solrconfig.xml file, and implements a
* factory to create caches.
*/
-public class CacheConfig implements MapSerializable {
+public class CacheConfig implements MapWriter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private String nodeName;
@@ -175,9 +176,10 @@ public class CacheConfig implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> argsMap) {
- // TODO: Should not create new HashMap?
- return new HashMap<>(args);
+ public void writeMap(EntryWriter ew) throws IOException {
+ for (Map.Entry<String, String> entry : args.entrySet()) {
+ ew.put(entry.getKey(), entry.getValue());
+ }
}
public String getNodeName() {
diff --git a/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java b/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java
index 8a62ce299b1..1323c9eb083 100644
--- a/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java
+++ b/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java
@@ -19,17 +19,17 @@ package org.apache.solr.update;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
-import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.util.Bits;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.Hash;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.SolrCore;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.SolrIndexSearcher;
@@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;
/**
* @lucene.internal
*/
-public class IndexFingerprint implements MapSerializable {
+public class IndexFingerprint implements MapWriter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private long maxVersionSpecified;
@@ -177,15 +177,14 @@ public class IndexFingerprint implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- map.put("maxVersionSpecified", maxVersionSpecified);
- map.put("maxVersionEncountered", maxVersionEncountered);
- map.put("maxInHash", maxInHash);
- map.put("versionsHash", versionsHash);
- map.put("numVersions", numVersions);
- map.put("numDocs", numDocs);
- map.put("maxDoc", maxDoc);
- return map;
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put("maxVersionSpecified", maxVersionSpecified)
+ .put("maxVersionEncountered", maxVersionEncountered)
+ .put("maxInHash", maxInHash)
+ .put("versionsHash", versionsHash)
+ .put("numVersions", numVersions)
+ .put("numDocs", numDocs)
+ .put("maxDoc", maxDoc);
}
private static long getLong(Map<String, Object> m, String key, long def) {
@@ -218,7 +217,7 @@ public class IndexFingerprint implements MapSerializable {
@Override
public String toString() {
- return toMap(new LinkedHashMap<>()).toString();
+ return new SimpleOrderedMap<>(this).toString();
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
index 30e7687eda2..8c672962846 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
@@ -32,7 +32,7 @@ import org.apache.lucene.index.MergeScheduler;
import org.apache.lucene.search.Sort;
import org.apache.lucene.util.InfoStream;
import org.apache.solr.common.ConfigNode;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.core.DirectoryFactory;
@@ -53,7 +53,7 @@ import org.slf4j.LoggerFactory;
* This config object encapsulates IndexWriter config params, defined in the <indexConfig>
* section of solrconfig.xml
*/
-public class SolrIndexConfig implements MapSerializable {
+public class SolrIndexConfig implements MapWriter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final String NO_SUB_PACKAGES[] = new String[0];
@@ -195,28 +195,19 @@ public class SolrIndexConfig implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- map.put("useCompoundFile", useCompoundFile);
- map.put("maxBufferedDocs", maxBufferedDocs);
- map.put("ramBufferSizeMB", ramBufferSizeMB);
- map.put("ramPerThreadHardLimitMB", ramPerThreadHardLimitMB);
- map.put("maxCommitMergeWaitTime", maxCommitMergeWaitMillis);
- map.put("writeLockTimeout", writeLockTimeout);
- map.put("lockType", lockType);
- map.put("infoStreamEnabled", infoStream != InfoStream.NO_OUTPUT);
- if (mergeSchedulerInfo != null) {
- map.put("mergeScheduler", mergeSchedulerInfo);
- }
- if (metricsInfo != null) {
- map.put("metrics", metricsInfo);
- }
- if (mergePolicyFactoryInfo != null) {
- map.put("mergePolicyFactory", mergePolicyFactoryInfo);
- }
- if (mergedSegmentWarmerInfo != null) {
- map.put("mergedSegmentWarmer", mergedSegmentWarmerInfo);
- }
- return map;
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put("useCompoundFile", useCompoundFile)
+ .put("maxBufferedDocs", maxBufferedDocs)
+ .put("ramBufferSizeMB", ramBufferSizeMB)
+ .put("ramPerThreadHardLimitMB", ramPerThreadHardLimitMB)
+ .put("maxCommitMergeWaitTime", maxCommitMergeWaitMillis)
+ .put("writeLockTimeout", writeLockTimeout)
+ .put("lockType", lockType)
+ .put("infoStreamEnabled", infoStream != InfoStream.NO_OUTPUT)
+ .putIfNotNull("mergeScheduler", mergeSchedulerInfo)
+ .putIfNotNull("metrics", metricsInfo)
+ .putIfNotNull("mergePolicyFactory", mergePolicyFactoryInfo)
+ .putIfNotNull("mergedSegmentWarmer", mergedSegmentWarmerInfo);
}
private PluginInfo getPluginInfo(ConfigNode node, PluginInfo def) {
diff --git a/solr/core/src/test/org/apache/solr/api/NodeConfigClusterPluginsSourceTest.java b/solr/core/src/test/org/apache/solr/api/NodeConfigClusterPluginsSourceTest.java
index 0ad8666c527..d7489660f20 100644
--- a/solr/core/src/test/org/apache/solr/api/NodeConfigClusterPluginsSourceTest.java
+++ b/solr/core/src/test/org/apache/solr/api/NodeConfigClusterPluginsSourceTest.java
@@ -17,7 +17,6 @@
package org.apache.solr.api;
-import java.util.HashMap;
import java.util.Map;
import org.apache.solr.client.solrj.RemoteSolrException;
import org.apache.solr.client.solrj.request.V2Request;
@@ -29,6 +28,7 @@ import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.annotation.JsonProperty;
import org.apache.solr.common.util.ReflectMapWriter;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.CoreContainer;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -89,8 +89,7 @@ public class NodeConfigClusterPluginsSourceTest extends SolrCloudTestCase {
apiInfo.getInfo().klass);
MapWriter config = apiInfo.getInfo().config;
assertNotNull("config should be set for " + SingletonWithConfig.NAME, config);
- Map<String, Object> configMap = new HashMap<>();
- config.toMap(configMap);
+ Map<String, Object> configMap = new SimpleOrderedMap<>(config);
assertEquals("incorrect config val for cfgInt parameter", CFG_VAL, configMap.get("cfgInt"));
}
diff --git a/solr/core/src/test/org/apache/solr/core/CacheConfigTest.java b/solr/core/src/test/org/apache/solr/core/CacheConfigTest.java
index f8825a7f108..8eb503dbaf7 100644
--- a/solr/core/src/test/org/apache/solr/core/CacheConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/core/CacheConfigTest.java
@@ -20,7 +20,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -28,6 +27,7 @@ import javax.xml.parsers.ParserConfigurationException;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.ConfigNode;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.search.CacheConfig;
import org.apache.solr.util.DOMConfigNode;
import org.junit.Before;
@@ -91,7 +91,7 @@ public class CacheConfigTest extends SolrTestCaseJ4 {
final CacheConfig cacheConfig =
CacheConfig.getConfig(mockSolrConfig, domConfigNode, XPATH_DOCUMENT_CACHE);
assertNotNull(cacheConfig);
- final Map<String, Object> args = cacheConfig.toMap(new HashMap<>());
+ final Map<String, Object> args = new SimpleOrderedMap<>(cacheConfig);
assertNotNull(args);
assertEquals("99", args.get("initialSize"));
assertEquals("999", args.get("size"));
@@ -119,7 +119,7 @@ public class CacheConfigTest extends SolrTestCaseJ4 {
final CacheConfig cacheConfig =
CacheConfig.getConfig(mockSolrConfig, domConfigNode, XPATH_DOCUMENT_CACHE);
assertNotNull(cacheConfig);
- final Map<String, Object> args = cacheConfig.toMap(new HashMap<>());
+ final Map<String, Object> args = new SimpleOrderedMap<>(cacheConfig);
assertNotNull(args);
assertEquals(overlaidSize, args.get("size"));
}
@@ -146,7 +146,7 @@ public class CacheConfigTest extends SolrTestCaseJ4 {
final CacheConfig cacheConfig =
CacheConfig.getConfig(mockSolrConfig, overlayConfigNode, XPATH_QUERY_RESULT_CACHE);
assertNotNull(cacheConfig);
- final Map<String, Object> args = cacheConfig.toMap(new HashMap<>());
+ final Map<String, Object> args = new SimpleOrderedMap<>(cacheConfig);
assertNotNull(args);
assertEquals("99", args.get("initialSize"));
assertEquals("queryResultCache", cacheConfig.getNodeName());
diff --git a/solr/core/src/test/org/apache/solr/core/TestConfig.java b/solr/core/src/test/org/apache/solr/core/TestConfig.java
index 0ba42bb156d..a856090e54d 100644
--- a/solr/core/src/test/org/apache/solr/core/TestConfig.java
+++ b/solr/core/src/test/org/apache/solr/core/TestConfig.java
@@ -17,13 +17,13 @@
package org.apache.solr.core;
import java.io.InputStream;
-import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.lucene.index.ConcurrentMergeScheduler;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.util.InfoStream;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.IndexSchemaFactory;
import org.apache.solr.update.SolrIndexConfig;
@@ -160,10 +160,10 @@ public class TestConfig extends SolrTestCaseJ4 {
assertNull("non-null mergedSegmentWarmer", iwc.getMergedSegmentWarmer());
- final int numDefaultsMapped = sic.toMap(new LinkedHashMap<>()).size();
+ final int numDefaultsMapped = new SimpleOrderedMap<>(sic).size();
assertEquals(
"numDefaultsTested vs. numDefaultsMapped+numNullDefaults ="
- + sic.toMap(new LinkedHashMap<>()).keySet(),
+ + new SimpleOrderedMap<>(sic).keySet(),
numDefaultsTested,
numDefaultsMapped + numNullDefaults);
}
diff --git a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
index 78d45b2c49e..2b94e57434f 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
@@ -17,7 +17,6 @@
package org.apache.solr.update;
import java.nio.file.Path;
-import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.lucene.index.ConcurrentMergeScheduler;
import org.apache.lucene.index.IndexWriterConfig;
@@ -29,8 +28,9 @@ import org.apache.lucene.sandbox.index.MergeOnFlushMergePolicy;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.TestMergePolicyConfig;
@@ -253,7 +253,7 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
}
assertNotNull(solrIndexConfig.mergeSchedulerInfo);
- Map<String, Object> m = solrIndexConfig.toMap(new LinkedHashMap<>());
+ Map<String, Object> m = new SimpleOrderedMap<>(solrIndexConfig);
int mSizeExpected = 0;
++mSizeExpected;
@@ -292,12 +292,12 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
}
++mSizeExpected;
- assertTrue(m.get("mergeScheduler") instanceof MapSerializable);
+ assertTrue(m.get("mergeScheduler") instanceof MapWriter);
++mSizeExpected;
- assertTrue(m.get("mergePolicyFactory") instanceof MapSerializable);
+ assertTrue(m.get("mergePolicyFactory") instanceof MapWriter);
if (solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
++mSizeExpected;
- assertTrue(m.get("mergedSegmentWarmer") instanceof MapSerializable);
+ assertTrue(m.get("mergedSegmentWarmer") instanceof MapWriter);
} else {
assertNull(m.get("mergedSegmentWarmer"));
}
(solr) 03/04: SOLR-17600: MapSerializable p3: Migrate SolrJ and Utilities from MapSerializable (#4465)
Posted by ds...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
commit 5095a896b4d7c90d42fd4b4d58ec773d70c2c1c9
Author: Ivan Šarić <iv...@path-variable.com>
AuthorDate: Sun Jun 14 19:54:07 2026 +0200
SOLR-17600: MapSerializable p3: Migrate SolrJ and Utilities from MapSerializable (#4465)
MapSerializable is deprecated; stop using it in some places.
(cherry picked from commit 9cc72f1638075ab71bb7d92c5db8200d47b5041a)
---
.../extraction/TikaServerExtractionBackend.java | 2 +-
.../client/solrj/io/stream/expr/Explanation.java | 44 ++++++----------------
.../solrj/io/stream/expr/StreamExplanation.java | 18 ++-------
.../org/apache/solr/common/IteratorWriter.java | 4 +-
.../src/java/org/apache/solr/common/MapWriter.java | 9 +----
.../java/org/apache/solr/common/MapWriterMap.java | 5 ---
.../org/apache/solr/common/cloud/ZkNodeProps.java | 2 +-
.../java/org/apache/solr/common/util/Utils.java | 12 +++---
.../solr/client/solrj/SolrExampleCborTest.java | 4 +-
.../apache/solr/common/cloud/ClusterStateUtil.java | 3 +-
10 files changed, 32 insertions(+), 71 deletions(-)
diff --git a/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/TikaServerExtractionBackend.java b/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/TikaServerExtractionBackend.java
index 283d186fe71..a6d08bb11f7 100644
--- a/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/TikaServerExtractionBackend.java
+++ b/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/TikaServerExtractionBackend.java
@@ -99,7 +99,7 @@ public class TikaServerExtractionBackend implements ExtractionBackend {
this.maxCharsLimit = maxCharsLimit;
if (initArgs != null) {
- initArgs.toMap(this.initArgsMap);
+ initArgs.forEach(initArgsMap::put);
}
Object metaCompatObh = this.initArgsMap.get(ExtractingParams.TIKASERVER_METADATA_COMPATIBILITY);
if (metaCompatObh != null) {
diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/Explanation.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/Explanation.java
index 259c02ab5e5..bee23cc4acf 100644
--- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/Explanation.java
+++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/Explanation.java
@@ -16,14 +16,13 @@
*/
package org.apache.solr.client.solrj.io.stream.expr;
+import java.io.IOException;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
-import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.MapWriter;
/** Explanation containing details about a expression */
-public class Explanation implements MapSerializable {
+public class Explanation implements MapWriter {
private String expressionNodeId;
private String expressionType;
@@ -139,35 +138,14 @@ public class Explanation implements MapSerializable {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- if (null != expressionNodeId) {
- map.put("expressionNodeId", expressionNodeId);
- }
- if (null != expressionType) {
- map.put("expressionType", expressionType);
- }
- if (null != functionName) {
- map.put("functionName", functionName);
- }
- if (null != implementingClass) {
- map.put("implementingClass", implementingClass);
- }
- if (null != expression) {
- map.put("expression", expression);
- }
- if (null != note) {
- map.put("note", note);
- }
-
- if (null != helpers && 0 != helpers.size()) {
- List<Map<String, Object>> helperMaps = new ArrayList<>();
- for (Explanation helper : helpers) {
- helperMaps.add(helper.toMap(new LinkedHashMap<>()));
- }
- map.put("helpers", helperMaps);
- }
-
- return map;
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.putIfNotNull("expressionNodeId", expressionNodeId)
+ .putIfNotNull("expressionType", expressionType)
+ .putIfNotNull("functionName", functionName)
+ .putIfNotNull("implementingClass", implementingClass)
+ .putIfNotNull("expression", expression)
+ .putIfNotNull("note", note)
+ .putIfNotNull("helpers", helpers);
}
public static interface ExpressionType {
diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExplanation.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExplanation.java
index 027a1b94878..186eeebdfe4 100644
--- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExplanation.java
+++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExplanation.java
@@ -16,10 +16,9 @@
*/
package org.apache.solr.client.solrj.io.stream.expr;
+import java.io.IOException;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
/** Explanation containing details about a stream expression */
public class StreamExplanation extends Explanation {
@@ -58,17 +57,8 @@ public class StreamExplanation extends Explanation {
}
@Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- map = super.toMap(map);
-
- if (null != children && 0 != children.size()) {
- List<Map<String, Object>> childrenMaps = new ArrayList<>();
- for (Explanation child : children) {
- childrenMaps.add(child.toMap(new LinkedHashMap<>()));
- }
- map.put("children", childrenMaps);
- }
-
- return map;
+ public void writeMap(EntryWriter ew) throws IOException {
+ super.writeMap(ew);
+ ew.putIfNotNull("children", children);
}
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/IteratorWriter.java b/solr/solrj/src/java/org/apache/solr/common/IteratorWriter.java
index 1c2274b7c0f..631a2f8677d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/IteratorWriter.java
+++ b/solr/solrj/src/java/org/apache/solr/common/IteratorWriter.java
@@ -19,8 +19,8 @@ package org.apache.solr.common;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.noggit.JSONWriter;
/** Interface to help do push writing to an array */
@@ -76,7 +76,7 @@ public interface IteratorWriter extends JSONWriter.Writable {
new ItemWriter() {
@Override
public ItemWriter add(Object o) throws IOException {
- if (o instanceof MapWriter) o = ((MapWriter) o).toMap(new LinkedHashMap<>());
+ if (o instanceof MapWriter) o = new SimpleOrderedMap<>((MapWriter) o);
if (o instanceof IteratorWriter) o = ((IteratorWriter) o).toList(new ArrayList<>());
l.add(o);
return this;
diff --git a/solr/solrj/src/java/org/apache/solr/common/MapWriter.java b/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
index 3f1f61e24ba..d98d66f3bde 100644
--- a/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
+++ b/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
@@ -30,7 +30,7 @@ import org.noggit.JSONWriter;
* and is supposed to be memory efficient. If the entries are primitives, unnecessary boxing is also
* avoided.
*/
-public interface MapWriter extends MapSerializable, NavigableObject, JSONWriter.Writable {
+public interface MapWriter extends NavigableObject, JSONWriter.Writable {
/** Writes this object's entries out to {@code ew}. */
void writeMap(EntryWriter ew) throws IOException;
@@ -39,11 +39,6 @@ public interface MapWriter extends MapSerializable, NavigableObject, JSONWriter.
return Utils.toJSONString(this);
}
- @Override
- default Map<String, Object> toMap(Map<String, Object> map) {
- return Utils.convertToMap(this, map);
- }
-
/** For implementing Noggit {@link org.noggit.JSONWriter.Writable}. */
@Override
default void write(JSONWriter writer) {
@@ -147,7 +142,7 @@ public interface MapWriter extends MapSerializable, NavigableObject, JSONWriter.
}
default BiConsumer<CharSequence, Object> getBiConsumer() {
- return (k, v) -> putNoEx(k, v);
+ return this::putNoEx;
}
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/MapWriterMap.java b/solr/solrj/src/java/org/apache/solr/common/MapWriterMap.java
index 44385d849f5..454898afc11 100644
--- a/solr/solrj/src/java/org/apache/solr/common/MapWriterMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/MapWriterMap.java
@@ -50,9 +50,4 @@ public class MapWriterMap implements MapWriter {
public int _size() {
return delegate.size();
}
-
- @Override
- public Map<String, Object> toMap(Map<String, Object> map) {
- return delegate;
- }
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
index 72ba3949b0e..4860a0debea 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
@@ -42,7 +42,7 @@ public class ZkNodeProps implements MapWriter {
}
public ZkNodeProps(MapWriter mw) {
- propMap = mw.toMap(new HashMap<>());
+ propMap = Utils.convertToMap(mw, new HashMap<>());
}
public ZkNodeProps plus(String key, Object val) {
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
index 82c76d899a7..b2c06d60fa4 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
@@ -175,7 +175,7 @@ public class Utils {
private static Object makeDeepCopy(Object v, int maxDepth, boolean mutable, boolean sorted) {
if (v instanceof MapWriter && maxDepth > 1) {
- v = ((MapWriter) v).toMap(new LinkedHashMap<>());
+ v = convertToMap((MapWriter) v, new LinkedHashMap<>());
} else if (v instanceof IteratorWriter && maxDepth > 1) {
List<Object> l = ((IteratorWriter) v).toList(new ArrayList<>());
if (sorted) {
@@ -1020,7 +1020,7 @@ public class Utils {
* <p>The provided object is not required to be a {@link MapWriter}.
*/
public static Map<String, Object> reflectToMap(Object toReflect) {
- return ((Utils.DelegateReflectWriter) Utils.getReflectWriter(toReflect)).toMap(new HashMap<>());
+ return convertToMap((MapWriter) Utils.getReflectWriter(toReflect), new HashMap<>());
}
@SuppressWarnings({"unchecked", "rawtypes"})
@@ -1034,12 +1034,13 @@ public class Utils {
}
private MapWriter.EntryWriter writeEntry(CharSequence k, Object v) {
- if (v instanceof MapWriter) v = ((MapWriter) v).toMap(new LinkedHashMap<>());
+ if (v instanceof MapWriter) v = convertToMap((MapWriter) v, new LinkedHashMap<>());
if (v instanceof IteratorWriter) v = ((IteratorWriter) v).toList(new ArrayList<>());
if (v instanceof Iterable) {
List lst = new ArrayList();
for (Object vv : (Iterable) v) {
- if (vv instanceof MapWriter) vv = ((MapWriter) vv).toMap(new LinkedHashMap<>());
+ if (vv instanceof MapWriter)
+ vv = convertToMap((MapWriter) vv, new LinkedHashMap<>());
if (vv instanceof IteratorWriter)
vv = ((IteratorWriter) vv).toList(new ArrayList<>());
lst.add(vv);
@@ -1050,7 +1051,8 @@ public class Utils {
Map map = new LinkedHashMap();
for (Map.Entry<?, ?> entry : ((Map<?, ?>) v).entrySet()) {
Object vv = entry.getValue();
- if (vv instanceof MapWriter) vv = ((MapWriter) vv).toMap(new LinkedHashMap<>());
+ if (vv instanceof MapWriter)
+ vv = convertToMap((MapWriter) vv, new LinkedHashMap<>());
if (vv instanceof IteratorWriter)
vv = ((IteratorWriter) vv).toList(new ArrayList<>());
map.put(entry.getKey(), vv);
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java
index 6456aa5824c..dda3a57426d 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java
@@ -23,7 +23,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -35,6 +34,7 @@ import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.junit.Ignore;
/**
@@ -247,7 +247,7 @@ public class SolrExampleCborTest extends SolrExampleTests {
List<Map> mapDocs = new ArrayList<>();
for (SolrInputDocument doc : docs) {
- mapDocs.add(doc.toMap(new LinkedHashMap<>()));
+ mapDocs.add(new SimpleOrderedMap(doc));
}
ObjectMapper cborMapper =
diff --git a/solr/test-framework/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java b/solr/test-framework/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java
index 9ecfe57379d..fe5e724db2d 100644
--- a/solr/test-framework/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java
+++ b/solr/test-framework/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java
@@ -25,6 +25,7 @@ import java.util.concurrent.TimeoutException;
import java.util.stream.Stream;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.Utils;
public class ClusterStateUtil {
@@ -178,7 +179,7 @@ public class ClusterStateUtil {
.collectionStream()
.collect(
LinkedHashMap::new,
- (map, state) -> map.put(state.getName(), state.toMap(new LinkedHashMap<>())),
+ (map, state) -> map.put(state.getName(), new SimpleOrderedMap<>(state)),
Map::putAll);
// toJSON requires standard types like Map; doesn't know about DocCollection etc.
return Utils.toJSONString(stateMap);