Skip to content

SOLR-17600 (Part 1/4): Migrate V2 API Payloads from MapSerializable#4463

Open
isaric wants to merge 1 commit into
apache:mainfrom
isaric:SOLR-17600-1-v2-api
Open

SOLR-17600 (Part 1/4): Migrate V2 API Payloads from MapSerializable#4463
isaric wants to merge 1 commit into
apache:mainfrom
isaric:SOLR-17600-1-v2-api

Conversation

@isaric
Copy link
Copy Markdown

@isaric isaric commented May 25, 2026

This is Part 1 of 4 to deprecate and remove the MapSerializable interface as part of SOLR-17600.

This PR migrates all V2 API payload and handler classes to use MapWriter / Utils.convertToMap.

Note: The work has been split into 4 PRs to make reviewing easier. The subsequent PRs are stacked on top of this one.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Refactors multiple Solr handlers/tests to standardize conversion of Solr/MapWriter-style objects into map-like structures (favoring Utils.convertToMap(...) / SimpleOrderedMap) and updates one internal API adapter to a MapWriter#writeMap(...) implementation.

Changes:

  • Replaced a number of toMap(new HashMap<>()) call sites with Utils.convertToMap(...) or new SimpleOrderedMap<>(...).
  • Updated config/response building code paths to use MapWriter / SimpleOrderedMap rather than MapSerializable.
  • Adjusted BaseHandlerApiSupport parameter adapter to implement writeMap(...) and skip null-valued entries.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
solr/core/src/test/org/apache/solr/handler/designer/TestSchemaDesignerAPI.java Updates test param map construction to use SimpleOrderedMap.
solr/core/src/java/org/apache/solr/handler/export/ExportWriterStream.java Uses SimpleOrderedMap when materializing MapWriter values.
solr/core/src/java/org/apache/solr/handler/designer/ManagedSchemaDiff.java Uses Utils.convertToMap for diff map materialization.
solr/core/src/java/org/apache/solr/handler/admin/api/SplitShardAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/SplitCoreAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/RequestSyncShardAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/RequestCoreRecoveryAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/RequestBufferUpdatesAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/RequestApplyCoreUpdatesAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/RejoinLeaderElectionAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/RebalanceLeadersAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/PrepareCoreRecoveryAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/OverseerOperationAPI.java Builds v1 params using SimpleOrderedMap instead of toMap(HashMap).
solr/core/src/java/org/apache/solr/handler/admin/api/MoveReplicaAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/ModifyCollectionAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocsAPI.java Uses Utils.convertToMap for v2 payload → v1 params.
solr/core/src/java/org/apache/solr/handler/admin/api/InstallShardData.java Uses Utils.convertToMap before creating ZkNodeProps.
solr/core/src/java/org/apache/solr/handler/admin/api/CreateCore.java Uses Utils.convertToMap to derive request body from v1 params.
solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java Uses Utils.convertToMap for DocCollection serialization.
solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java Uses SimpleOrderedMap when converting MapWriter results.
solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java Switches adapter from toMap(...) to writeMap(...) and filters nulls.
solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java Migrates plugin/config map building to MapWriter/SimpleOrderedMap and adds helper for component lookup.
solr/core/src/java/org/apache/solr/handler/ClusterAPI.java Builds role command maps using SimpleOrderedMap.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


SolrParams solrParams = idFieldMapUpdated.toSolrParams();
Map<String, Object> mapParams = solrParams.toMap(new HashMap<>());
Map<String, Object> mapParams = new SimpleOrderedMap<>(solrParams);
public void joinOverseerLeaderElection(PayloadObj<OverseerOperationPayload> payload)
throws Exception {
final Map<String, Object> v1Params = payload.get().toMap(new HashMap<>());
final Map<String, Object> v1Params = new SimpleOrderedMap<>(payload.get());
Comment on lines +281 to +284
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);
m.put(ZNODEVER, params.getZnodeVersion());
if (p != null) {
m.put(RequestParams.NAME, Map.of(parts.get(2), p.toMap(new LinkedHashMap<>())));
m.put(RequestParams.NAME, Map.of(parts.get(2), new SimpleOrderedMap<>(p)));
o instanceof MapSerializable
? ((MapSerializable) o).toMap(new LinkedHashMap<>())
o instanceof MapWriter
? new SimpleOrderedMap<>((MapWriter) o)
String componentName = componentType == null ? null : req.getParams().get("componentName");
boolean showParams = req.getParams().getBool("expandParams", false);
Map<String, Object> map = this.req.getCore().getSolrConfig().toMap(new LinkedHashMap<>());
Map<String, Object> map = new SimpleOrderedMap<>(this.req.getCore().getSolrConfig());
pluginInfo = (Map) plugin;
} else if (plugin instanceof PluginInfo) {
pluginInfo = ((PluginInfo) plugin).toMap(new LinkedHashMap<>());
pluginInfo = new SimpleOrderedMap<>((PluginInfo) plugin);
Comment on lines +329 to +331
return pluginInfo.containsKey("class")
? pluginInfo
: (Map<String, Object>) pluginInfo.getOrDefault(componentName, new HashMap<>());
@isaric isaric force-pushed the SOLR-17600-1-v2-api branch from de2593f to baae128 Compare May 25, 2026 13:36
@isaric isaric force-pushed the SOLR-17600-1-v2-api branch from baae128 to 74d671e Compare May 26, 2026 05:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants