Skip to content

SOLR-18234: Reorganize org.apache.solr.cli into domain-based sub-packages - #4663

Open
jaykay12 wants to merge 49 commits into
apache:mainfrom
jaykay12:SOLR-18234-solr-cli-refactor
Open

jaykay12 wants to merge 49 commits into
apache:mainfrom
jaykay12:SOLR-18234-solr-cli-refactor

Conversation

@jaykay12

@jaykay12 jaykay12 commented Jul 25, 2026 •

Copy link
Copy Markdown
Contributor

Description/Scope

Reorganize org.apache.solr.cli into domain-based sub-packages

Solution

For the main Jira: SOLR-18234, final objective is to move cli package out from core module, into a separate module of itself.
This PR scope is to just make the original/current package structure organised.

Existing Package Structure:

org.apache.solr.cli
├── SolrCLI, StartCommand, StopCommand
├── Tool, ToolBase, ToolRuntime, CLIO, CLIUtils, …
├── ConnectionOptions, CredentialsOptions, HelpMixin, …
├── SolrProcessManager
├── ApiTool, AssertTool, AuthTool, ConfigTool, CreateTool, DeleteTool, …
├── ClusterTool, HealthcheckTool, StatusTool
├── PackageTool
├── Snapshot*Tool
└── ZkTool, Zk*Tool, ConfigSet*Tool, UpdateACLTool, ZkConnectionOptions, …

Proposed Package Structure:

org.apache.solr.cli                          # CLI framework / entrypoint
├── SolrCLI, StartCommand, StopCommand
├── Tool, ToolBase, ToolRuntime, CLIO, CLIUtils, …
├── ConnectionOptions, CredentialsOptions, CommonCLIOptions, HelpMixin, …
│
├── process/                                 # process management
│   └── SolrProcessManager
│
└── tools/                                   # general-purpose tools
    ├── ApiTool, AssertTool, AuthTool, ConfigTool
    ├── CreateTool, DeleteTool, ExportTool
    ├── PostTool, PostLogsTool, RunExampleTool, StreamTool, VersionTool
    │
    ├── cluster/                             # cluster / status
    │   ├── ClusterTool, HealthcheckTool, StatusTool
    │
    ├── pkg/                                 # package manager
    │   └── PackageTool
    │
    ├── snapshot/                            # collection snapshots
    │   ├── SnapshotCreateTool, SnapshotDeleteTool
    │   ├── SnapshotDescribeTool, SnapshotExportTool, SnapshotListTool
    │
    └── zk/                                  # ZooKeeper tools
        ├── ZkTool, ZkToolHelp, ZkConnectionOptions
        ├── ZkCpTool, ZkLsTool, ZkMkrootTool, ZkMvTool, ZkRmTool
        ├── ConfigSetDownloadTool, ConfigSetUploadTool, UpdateACLTool

Tests

Please describe the tests you've developed or run to confirm this patch implements the feature or solves the problem.

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@dsmiley

dsmiley commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Can you please describe this change? The PR description is not indicative; I suggest removing the template as it's a waste/distraction.

@jaykay12 jaykay12 changed the title SOLR-18234: Refactoring CLI module SOLR-18234: Reorganize org.apache.solr.cli into domain-based sub-packages Jul 25, 2026

@jaykay12 jaykay12 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Grok Review of the PR:

Main Feature
Screenshot 2026-07-26 at 4 03 43 AM Screenshot 2026-07-26 at 4 04 01 AM

Comment thread solr/core/src/java/org/apache/solr/cli/SolrCLI.java
@jaykay12
jaykay12 marked this pull request as ready for review July 25, 2026 22:36
@jaykay12

Copy link
Copy Markdown
Contributor Author

Can you please describe this change? The PR description is not indicative; I suggest removing the template as it's a waste/distraction.

yes, @dsmiley
PR was not ready by then, thus I kept it under draft.

Have added the description & PR scope now. Thanks in advance. ✨

@jaykay12

jaykay12 commented Aug 15, 2026 •

Copy link
Copy Markdown
Contributor Author

@epugh can please check this PR? if this looks worthy enough, I will raise the one against picoCLI feature branch & get that one merged.

We can close this one, & let these re-packaging changes flow via the picoCLI migration.

@jaykay12

Copy link
Copy Markdown
Contributor Author

@epugh can you check the objective of this PR & see if this improves our code structure & management?

@epugh

epugh commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

I think I like it... The bigger challenge is that we have a LOT of seperate efforts all going in the CLI right now, and I'm not sure how to land this without breaking all the other work going on.. We need to get our CLI finished migrating over to Picocli and that is probably the bigger more important effort, then this could go on top...

@dsmiley

dsmiley commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

@jaykay12 I think progress can be made now by an independent PR solely focused on untangling the outgoing solr-core to CLI dependencies. No grand reorganization. Would you agree @epugh ?

@dsmiley

dsmiley commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

I'm referring to the subset of work quoted in the PR description:

There is some tangling between packagemanager package inside core, which depends on the SolrCLI that exists in cli. This change & any other improvement that i find good to do in the cli package, with come in series of PR before we finally migrate cli module out.

@janhoy

janhoy commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

The only conflicting PR is now #5063 . But you don't need to think about it now. Conflict resolution will be fairly easy I believe since this PR just moves files around. Whichever of this or #5063 lands frist, the other will adapt.

@janhoy

janhoy commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

I think I like it...

I think I like it too. The CLI pkg has 68 files and can benefit from some structuring. Have not thought long and hard about the actual proposed package structure, but on first glance it makes sense with separate pkg for tools with many sub commands.

@jaykay12

Copy link
Copy Markdown
Contributor Author

I think I like it...

I think I like it too. The CLI pkg has 68 files and can benefit from some structuring. Have not thought long and hard about the actual proposed package structure, but on first glance it makes sense with separate pkg for tools with many sub commands.

@janhoy @epugh Can i get the first review on this now? If possible, can trigger Copilot review to start with.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The broad package migration warrants human confirmation of compilation and CLI regression results before approval.

No open issues 🎉

What changed in this PR

Reorganizes Solr CLI code into domain-based packages, preparing for a future standalone CLI module while keeping this change within solr-core.

Changes:

  • Groups tools and process management into dedicated packages.
  • Updates imports, cross-package visibility, tests, and the mock subprocess class name.
  • Adds package documentation and a changelog entry.
File Description
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​zk/​ZkSubcommandsTest.java Relocates ZooKeeper tests and updates imports.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​zk/​ZkSubcommandsPicocliTest.java Relocates picocli ZooKeeper tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​zk/​SolrCLIZkToolsTest.java Relocates ZooKeeper integration tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​VersionToolTest.java Relocates version tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​VersionToolPicocliTest.java Relocates picocli version tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​TestExportTool.java Relocates export tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​StreamToolTest.java Relocates streaming tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​StreamToolPicocliTest.java Relocates picocli streaming tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​SolrCLIRunExamplePicocliTest.java Relocates picocli example tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotToolsTest.java Relocates snapshot tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotToolsPicocliTest.java Relocates picocli snapshot tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotExportToolTest.java Relocates snapshot export tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotExportToolPicocliTest.java Relocates picocli snapshot export tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​PostToolTest.java Relocates posting tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​PostToolPicocliTest.java Relocates picocli posting tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​PostLogsToolTest.java Relocates log parsing tests and nested-class import.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​PostLogsToolPicocliTest.java Relocates picocli log posting tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​PostLogsToolCliTest.java Relocates log posting CLI tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​pkg/​PackageToolTest.java Relocates package manager tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​pkg/​PackageToolPicocliTest.java Relocates picocli package manager tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​ExportToolTest.java Relocates export CLI tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​ExportToolPicocliTest.java Relocates picocli export tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​DeleteToolTest.java Relocates deletion tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​DeleteToolPicocliTest.java Relocates picocli deletion tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​CreateToolTest.java Relocates creation tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​CreateToolPicocliTest.java Relocates picocli creation tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​ConfigToolTest.java Relocates configuration tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​ConfigToolPicocliTest.java Relocates picocli configuration tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​cluster/​StatusToolTest.java Relocates status tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​cluster/​StatusToolPicocliTest.java Relocates picocli status tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​cluster/​HealthcheckToolTest.java Relocates health-check tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​cluster/​HealthcheckToolPicocliTest.java Relocates picocli health-check tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​AuthToolTest.java Relocates authentication tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​AuthToolPicocliTest.java Relocates picocli authentication tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​AssertToolTest.java Relocates assertion tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​AssertToolPicocliTest.java Relocates picocli assertion tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​ApiToolTest.java Relocates API tool tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​tools/​ApiToolPicocliTest.java Relocates picocli API tool tests.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​TestSolrCLIRunExample.java Updates relocated tool imports.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​SolrCloudExampleTest.java Updates relocated tool imports.
solr/​core/​src/​test/​org/​apache/​solr/​cli/​process/​SolrProcessManagerTest.java Relocates tests and updates subprocess class name.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkToolHelp.java Moves ZooKeeper help into tools.zk.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkTool.java Moves ZooKeeper command group.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkRmTool.java Moves ZooKeeper removal tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkMvTool.java Moves ZooKeeper move tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkMkrootTool.java Moves ZooKeeper root-creation tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkLsTool.java Moves ZooKeeper listing tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkCpTool.java Moves ZooKeeper copy tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ZkConnectionOptions.java Moves ZooKeeper connection options.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​UpdateACLTool.java Moves ACL update tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​package-info.java Documents ZooKeeper tool package.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ConfigSetUploadTool.java Moves configset upload tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​zk/​ConfigSetDownloadTool.java Moves configset download tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​VersionTool.java Moves version tool into tools.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​StreamTool.java Moves streaming tool and updates imports.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotTool.java Moves snapshot command group.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotNameOptions.java Moves snapshot name options.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotListTool.java Moves snapshot listing tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotListShim.java Moves legacy snapshot listing shim.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotExportTool.java Moves snapshot export tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotExportShim.java Moves legacy snapshot export shim.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotDescribeTool.java Moves snapshot description tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotDescribeShim.java Moves legacy snapshot description shim.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotDeleteTool.java Moves snapshot deletion tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotDeleteShim.java Moves legacy snapshot deletion shim.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotCreateTool.java Moves snapshot creation tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​SnapshotCreateShim.java Moves legacy snapshot creation shim.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​snapshot/​package-info.java Documents snapshot tool package.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​RunExampleTool.java Moves example runner and updates imports.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​PostTool.java Moves document posting tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​PostLogsTool.java Moves log posting tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageUninstall.java Moves package uninstall command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageUndeploy.java Moves package undeploy command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageTool.java Moves package tool and exposes credentials mixin.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageSubCommand.java Moves shared package subcommand base.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageListInstalled.java Moves installed-package listing command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageListDeployed.java Moves deployed-package listing command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageListAvailable.java Moves available-package listing command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageInstall.java Moves package install command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageDeploy.java Moves package deploy command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageAddRepo.java Moves repository addition command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​PackageAddKey.java Moves package key addition command.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​pkg/​package-info.java Documents package operations namespace.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​package-info.java Documents general-purpose tool package.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​ExportTool.java Moves export tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​DeleteTool.java Moves deletion tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​CreateTool.java Moves creation tool and updates imports.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​ConfigTool.java Moves configuration tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​cluster/​StatusTool.java Moves status tool and process-manager imports.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​cluster/​package-info.java Documents cluster tool package.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​cluster/​HealthcheckTool.java Moves health-check tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​cluster/​ClusterTool.java Moves cluster properties tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​AuthTool.java Moves authentication tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​AssertTool.java Moves assertion tool.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​tools/​ApiTool.java Moves API tool and makes callGet public.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​SolrCLI.java Imports relocated command implementations.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​process/​SolrProcessManager.java Moves process management into process.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​process/​package-info.java Documents process utilities package.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​ConnectionOptions.java Exposes shared options for cross-package access.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​CollectionNameOptions.java Exposes collection name mixin and field.
solr/​core/​src/​java/​org/​apache/​solr/​cli/​CLIUtils.java Updates status import and exposes URL resolver.
changelog/​unreleased/​SOLR-18234-solr-cli-reorganise.yml Records CLI package reorganization.

Review effort: Balanced

@jaykay12

Copy link
Copy Markdown
Contributor Author

all 5 CI checks pass ✅

@dsmiley
dsmiley requested review from epugh and janhoy October 27, 2026 15:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants