nick-boss-tech opened a new pull request, #5284:
URL: https://github.com/apache/solr/pull/5284

   🤖 *AI text below* 🤖 *(reviewed by Nick Shanin)*
   
   This is the next sibling PR under 
[SOLR-16398](https://issues.apache.org/jira/browse/SOLR-16398), following the 
split-shard migration in PR #5265, which Eric Pugh asked for as the 
representative command before the approach scaled up to the remaining commands.
   
   ## What happens today
   
   **Rebalance leaders and migrate docs are still served by annotated v1-style 
API classes while the shard APIs around them are JAX-RS resources.**
   
   `RebalanceLeadersAPI` and `MigrateDocsAPI` carry their v2 routes as 
annotations on v1-shaped classes registered through 
`CollectionsHandler.getApis()`. The neighboring collection commands (create 
shard, delete shard, split shard) are Jersey resources with endpoint interfaces 
in `solr/api`, typed request bodies, and generated SolrJ clients. The v2 
tracking spreadsheet lists both commands as not yet migrated to JAX-RS.
   
   ## What this change does
   
   **Both commands become JAX-RS resources in the same shape as split shard, 
and the annotated classes are removed.**
   
   New endpoint interfaces 
[`RebalanceLeadersApi`](https://github.com/nick-boss-tech/solr/blob/793e1ffa0f1d67271fbf090773651cd8a26171e4/solr/api/src/java/org/apache/solr/client/api/endpoint/RebalanceLeadersApi.java)
 and 
[`MigrateDocsApi`](https://github.com/nick-boss-tech/solr/blob/793e1ffa0f1d67271fbf090773651cd8a26171e4/solr/api/src/java/org/apache/solr/client/api/endpoint/MigrateDocsApi.java),
 with typed request bodies; the migrate-docs body carries the `async` field, 
and the resource passes it to the same submission the v1 route uses. The 
resources 
[`RebalanceLeaders`](https://github.com/nick-boss-tech/solr/blob/793e1ffa0f1d67271fbf090773651cd8a26171e4/solr/core/src/java/org/apache/solr/handler/admin/api/RebalanceLeaders.java)
 and 
[`MigrateDocs`](https://github.com/nick-boss-tech/solr/blob/793e1ffa0f1d67271fbf090773651cd8a26171e4/solr/core/src/java/org/apache/solr/handler/admin/api/MigrateDocs.java)
 are registered in `CollectionsHandler` alongside `SplitShard`, and 
`RebalanceLead
 ersAPI` and `MigrateDocsAPI` are deleted. The v1 routes do not change 
behavior: MIGRATE still returns its overseer message from the handler, and 
REBALANCELEADERS still executes the admin operation directly.
   
   ## A choice to check
   
   **The two commands share one PR, and both endpoints carry the request-body 
fix from PR #5265.**
   
   The family plan on the ticket, set by Jason Gerlowski, is one to two APIs 
per PR; these two share their handler registration and test scaffolding, so 
they travel together. Shout if you would rather see them split. Separately, PR 
#5265 recorded that the sibling endpoints carried the same bare `@RequestBody` 
defect fixed there; both endpoint interfaces here declare 
`@RequestBody(description = "Contains user provided parameters")`, so the 
generated client and OpenAPI spec include the request body.
   
   ## Proof
   
   **The focused tests pass at the PR head; on the base code the v2 resources 
and the integration test do not exist.**
   
   Verified 2026-11-03 at head `793e1ffa0f1d67271fbf090773651cd8a26171e4`, on a 
branch rebased onto main after PR #5265 merged: tidy clean for the `api` and 
`core` modules; `:solr:core:compileJava` passes with Error Prone enabled 
(`-Pvalidation.errorprone=true`); `CollectionCommandsV2IntegrationTest` (2 
tests), `V2CollectionAPIMappingTest` (2 tests), `TestCollectionAPIs` (2 tests), 
and `TestApiFramework` (3 tests) all pass with no failures, errors, or skips; 
`:solr:core:check -x test` passes.
   
   ## Limits
   
   **Only rebalance leaders and migrate docs are in this PR.**
   
   Move replica follows on its own branch, and the core commands and the 
reindex migration are likewise ready on branches for later PRs, per the plan on 
the ticket. Replication is not covered here: Jalaz Kumar is carrying those APIs 
forward, per the ticket discussion. Neither command needed the v1-to-v2 async 
adapter that split shard needed, because neither v1 operation delegates to a 
resource: MIGRATE returns its message to the handler, which submits it, and 
REBALANCELEADERS executes in place.
   
   Changelog: 
[changelog/unreleased/SOLR-16398-rebalance-migrate.yml](https://github.com/nick-boss-tech/solr/blob/793e1ffa0f1d67271fbf090773651cd8a26171e4/changelog/unreleased/SOLR-16398-rebalance-migrate.yml)
   
   *Nick Shanin directed the work and takes responsibility for this 
contribution.*


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to