Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
4c1b393
minor
jaykay12 Oct 3, 2026
d909a9f
first refactoring done
jaykay12 Oct 3, 2026
1869143
minor
jaykay12 Oct 3, 2026
fe4913f
minor
jaykay12 Oct 3, 2026
469a2bf
more refactoring
jaykay12 Oct 3, 2026
b43ece8
minor
jaykay12 Oct 3, 2026
1b65d92
tests refactored
jaykay12 Oct 3, 2026
197ae30
tidy
jaykay12 Oct 3, 2026
0e0b644
minor
jaykay12 Oct 3, 2026
03cd48f
removing unused dependency
jaykay12 Oct 3, 2026
926a4e0
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 3, 2026
b325308
refactor colors to interface
jaykay12 Oct 4, 2026
0751fb5
unused
jaykay12 Oct 4, 2026
71168c0
precommit works
jaykay12 Oct 4, 2026
95ab025
minor
jaykay12 Oct 4, 2026
1aa3fec
made package private & non-static
jaykay12 Oct 4, 2026
fbe2fff
ai review
jaykay12 Oct 4, 2026
e0c79f7
minor removal
jaykay12 Oct 4, 2026
06fcd04
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 4, 2026
8706d2b
refactored out pm to cli package
jaykay12 Oct 5, 2026
1725692
refactoring & tidy
jaykay12 Oct 5, 2026
86d3ec5
cleanup
jaykay12 Oct 5, 2026
250b26b
cl update
jaykay12 Oct 5, 2026
0609745
one more ai review
jaykay12 Oct 5, 2026
7705b3e
test corrected
jaykay12 Oct 5, 2026
3bc0655
minor
jaykay12 Oct 5, 2026
ada6f75
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 6, 2026
2c375ce
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 7, 2026
90e96c4
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 8, 2026
931eb9b
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 8, 2026
a838309
Merge branch 'main' into SOLR-18234-solr-cli-detangle-core
jaykay12 Oct 9, 2026
f8d8986
import correct
jaykay12 Oct 9, 2026
d168c04
gradle cleanup put back on
jaykay12 Oct 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions changelog/unreleased/SOLR-18234-solr-cli-detangle-core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
title:
Move packagemanager under CLI and stop test-framework from depending on CLI
type: other
authors:
- name: Jalaz Kumar
nick: jaykay12
links:
- name: SOLR-18234
url: https://issues.apache.org/jira/browse/SOLR-18234
4 changes: 2 additions & 2 deletions solr/core/src/java/org/apache/solr/cli/PackageSubCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.solr.cli;

import org.apache.commons.cli.CommandLine;
import org.apache.solr.packagemanager.PackageManager;
import org.apache.solr.packagemanager.RepositoryManager;
import org.apache.solr.cli.packagemanager.PackageManager;
import org.apache.solr.cli.packagemanager.RepositoryManager;

/** Shared picocli wiring for {@code bin/solr package <subcommand> leaves} */
@SuppressWarnings("UnnecessarilyFullyQualified")
Expand Down
16 changes: 8 additions & 8 deletions solr/core/src/java/org/apache/solr/cli/PackageTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@

import static org.apache.solr.cli.SolrCLI.printGreen;
import static org.apache.solr.cli.SolrCLI.printRed;
import static org.apache.solr.packagemanager.PackageUtils.format;
import static org.apache.solr.packagemanager.PackageUtils.formatGreen;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;
import static org.apache.solr.cli.packagemanager.PackageUtils.formatGreen;

import java.lang.invoke.MethodHandles;
import java.nio.file.Files;
Expand All @@ -33,16 +33,16 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.lucene.util.SuppressForbidden;
import org.apache.solr.cli.packagemanager.PackageManager;
import org.apache.solr.cli.packagemanager.PackageUtils;
import org.apache.solr.cli.packagemanager.RepositoryManager;
import org.apache.solr.cli.packagemanager.SolrPackage;
import org.apache.solr.cli.packagemanager.SolrPackage.SolrPackageRelease;
import org.apache.solr.cli.packagemanager.SolrPackageInstance;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.util.Pair;
import org.apache.solr.packagemanager.PackageManager;
import org.apache.solr.packagemanager.PackageUtils;
import org.apache.solr.packagemanager.RepositoryManager;
import org.apache.solr.packagemanager.SolrPackage;
import org.apache.solr.packagemanager.SolrPackage.SolrPackageRelease;
import org.apache.solr.packagemanager.SolrPackageInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
2 changes: 1 addition & 1 deletion solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/
package org.apache.solr.cli;

import static org.apache.solr.packagemanager.PackageUtils.format;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;

import java.lang.invoke.MethodHandles;
import java.lang.reflect.InvocationTargetException;
Expand Down
2 changes: 1 addition & 1 deletion solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/
package org.apache.solr.cli;

import static org.apache.solr.packagemanager.PackageUtils.format;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;

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.

minor: this import is suggestive that format should be in a general place, not specific to PackageUtils.

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.

Agreed - format/formatGreen aren’t package-manager-specific; ZK tools using them is making it clearer.

Will that be okay if i take this up in some follow-up PR? will get this refactoring done & move these to CLIUtils which looks to be better place.

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.

of course; no big deal.


import java.lang.invoke.MethodHandles;
import java.util.concurrent.TimeUnit;
Expand Down
2 changes: 1 addition & 1 deletion solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/
package org.apache.solr.cli;

import static org.apache.solr.packagemanager.PackageUtils.format;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;

import java.lang.invoke.MethodHandles;
import java.util.Locale;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* limitations under the License.
*/

package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.type.TypeReference;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
* limitations under the License.
*/

package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import static org.apache.solr.packagemanager.PackageUtils.getMapper;
import static org.apache.solr.cli.packagemanager.PackageUtils.getMapper;

import com.jayway.jsonpath.InvalidPathException;
import com.jayway.jsonpath.JsonPath;
Expand All @@ -41,6 +41,9 @@
import org.apache.solr.cli.CLIUtils;
import org.apache.solr.cli.SolrCLI;
import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.cli.packagemanager.SolrPackage.Command;
import org.apache.solr.cli.packagemanager.SolrPackage.Manifest;
import org.apache.solr.cli.packagemanager.SolrPackage.Plugin;
import org.apache.solr.client.api.util.SolrVersion;
import org.apache.solr.client.solrj.RemoteSolrException;
import org.apache.solr.client.solrj.SolrClient;
Expand All @@ -64,9 +67,6 @@
import org.apache.solr.common.util.Utils;
import org.apache.solr.filestore.DistribFileStore;
import org.apache.solr.handler.admin.ContainerPluginsApi;
import org.apache.solr.packagemanager.SolrPackage.Command;
import org.apache.solr.packagemanager.SolrPackage.Manifest;
import org.apache.solr.packagemanager.SolrPackage.Plugin;
import org.apache.solr.pkg.SolrPackageLoader;
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import java.io.IOException;
import java.nio.file.Path;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import static org.apache.solr.client.solrj.util.SolrIdentifierValidator.validateCollectionName;

Expand All @@ -35,6 +35,7 @@
import java.util.zip.ZipFile;
import org.apache.commons.io.IOUtils;
import org.apache.solr.cli.CLIUtils;
import org.apache.solr.cli.packagemanager.SolrPackage.Manifest;
import org.apache.solr.client.api.model.UploadToFileStoreResponse;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
Expand All @@ -50,7 +51,6 @@
import org.apache.solr.filestore.ClusterFileStore;
import org.apache.solr.filestore.DistribFileStore;
import org.apache.solr.filestore.FileStoreAPI;
import org.apache.solr.packagemanager.SolrPackage.Manifest;
import org.apache.solr.util.SolrJacksonAnnotationInspector;
import org.apache.zookeeper.server.ByteBufferInputStream;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
* limitations under the License.
*/

package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import static org.apache.solr.packagemanager.PackageUtils.getMapper;
import static org.apache.solr.cli.packagemanager.PackageUtils.getMapper;

import java.io.IOException;
import java.io.InputStream;
Expand All @@ -37,6 +37,8 @@
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.cli.packagemanager.SolrPackage.Artifact;
import org.apache.solr.cli.packagemanager.SolrPackage.SolrPackageRelease;
import org.apache.solr.client.api.util.SolrVersion;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
Expand All @@ -53,8 +55,6 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Utils;
import org.apache.solr.filestore.ClusterFileStore;
import org.apache.solr.packagemanager.SolrPackage.Artifact;
import org.apache.solr.packagemanager.SolrPackage.SolrPackageRelease;
import org.apache.solr.pkg.PackageAPI;
import org.apache.solr.pkg.SolrPackageLoader;
import org.apache.zookeeper.KeeperException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* limitations under the License.
*/

package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import java.util.Date;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@
* limitations under the License.
*/

package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.apache.solr.cli.packagemanager.SolrPackage.Manifest;
import org.apache.solr.cli.packagemanager.SolrPackage.Plugin;
import org.apache.solr.common.annotation.JsonProperty;
import org.apache.solr.common.util.ReflectMapWriter;
import org.apache.solr.packagemanager.SolrPackage.Manifest;
import org.apache.solr.packagemanager.SolrPackage.Plugin;

/** Describes one instance of a package as it exists in Solr when installed. */
public class SolrPackageInstance implements ReflectMapWriter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@
*/

/** This package contains Package Manager (CLI) implementation */
package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

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.

nice change

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.cloud;
package org.apache.solr.cli;

import java.lang.invoke.MethodHandles;
import java.nio.file.Files;
Expand All @@ -23,16 +23,9 @@
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.cli.CLITestHelper;
import org.apache.solr.cli.CLIUtils;
import org.apache.solr.cli.CreateTool;
import org.apache.solr.cli.DeleteTool;
import org.apache.solr.cli.HealthcheckTool;
import org.apache.solr.cli.PostTool;
import org.apache.solr.cli.SolrCLI;
import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.request.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.util.ExternalPaths;
import org.junit.Test;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.packagemanager;
package org.apache.solr.cli.packagemanager;

import com.jayway.jsonpath.InvalidPathException;
import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.common.util.Utils;
import org.apache.solr.embedded.JettySolrRunner;
import org.apache.solr.packagemanager.PackageUtils;
import org.apache.solr.util.LogLevel;
import org.apache.zookeeper.server.ByteBufferInputStream;
import org.junit.Before;
Expand Down Expand Up @@ -330,7 +329,13 @@ public static <T extends NavigableObject> T assertResponseValues(
public static void uploadKey(byte[] bytes, String path, MiniSolrCloudCluster cluster)
throws Exception {
JettySolrRunner jetty = cluster.getRandomJetty(random());
PackageUtils.uploadKey(bytes, path, jetty.getCoreContainer().getSolrHome());

FileStoreAPI.MetaData metaData = ClusterFileStore._createJsonMetaData(bytes, null);
DistribFileStore._persistToFile(
jetty.getCoreContainer().getSolrHome(),
path,
ByteBuffer.wrap(bytes),
ByteBuffer.wrap(Utils.toJSON(metaData)));

final var syncReq = new FileStoreApi.SyncFile(path);
final var syncRsp = syncReq.process(jetty.getSolrClient());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@
import java.util.Random;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.solr.cli.CLITestHelper;
import org.apache.solr.cli.StatusTool;
import org.apache.solr.client.solrj.RemoteSolrException;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.RequestWriter.StringPayloadContentWriter;
import org.apache.solr.client.solrj.request.SystemInfoRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.request.V2Request;
import org.apache.solr.client.solrj.request.beans.PluginMeta;
Expand Down Expand Up @@ -283,10 +283,11 @@ public void testBasicAuth() throws Exception {
verifySecurityStatus(httpClient, baseUrl + "/admin/info/key", "key", NOT_NULL_PREDICATE, 20);
assertAuthMetricsMinimums(17, 8, 8, 1, 0, 0);

String[] toolArgs = new String[] {"status", "--solr-url", baseUrl};
int res = CLITestHelper.runTool(toolArgs, StatusTool.class);
if (res == 0) {
fail("Request should have failed because of missing auth");
try (SolrClient unauthorizedClient = new HttpJettySolrClient.Builder(baseUrl).build()) {
RemoteSolrException statusExp =
expectThrows(
RemoteSolrException.class, () -> new SystemInfoRequest().process(unauthorizedClient));
assertEquals(401, statusExp.code());
}

SolrParams params = new MapSolrParams(Map.of("q", "*:*"));
Expand Down
4 changes: 1 addition & 3 deletions solr/test-framework/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,7 @@ dependencies {
implementation libs.slf4j.api
implementation libs.apache.log4j.api
implementation libs.apache.log4j.core
implementation libs.commonscli.commonscli
// Needed on the compile classpath because this project compiles against annotated org.apache.solr.cli types
implementation libs.picocli

implementation libs.opentelemetry.api
implementation(libs.opentelemetry.exporter.prometheus) {
transitive = false // most things don't want or already have
Expand Down
4 changes: 2 additions & 2 deletions solr/test-framework/gradle.lockfile
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ com.google.protobuf:protobuf-java:4.36.2=annotationProcessor,errorprone,testAnno
com.j256.simplemagic:simplemagic:1.17=jarValidation,runtimeClasspath,testRuntimeClasspath
com.jayway.jsonpath:json-path:3.0.0=jarValidation,runtimeClasspath,testRuntimeClasspath
com.tdunning:t-digest:3.3=jarValidation,runtimeClasspath,testRuntimeClasspath
commons-cli:commons-cli:1.11.0=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
commons-cli:commons-cli:1.11.0=jarValidation,runtimeClasspath,testRuntimeClasspath
commons-codec:commons-codec:1.22.1=jarValidation,runtimeClasspath,testRuntimeClasspath
commons-io:commons-io:2.22.0=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
info.picocli:picocli:4.7.6=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
info.picocli:picocli:4.7.6=jarValidation,runtimeClasspath,testRuntimeClasspath
io.dropwizard.metrics:metrics-core:4.2.39=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,errorprone,testAnnotationProcessor
io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,errorprone,testAnnotationProcessor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,6 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import org.apache.solr.BaseDistributedSearchTestCase;
import org.apache.solr.cli.ConfigSetUploadTool;
import org.apache.solr.cli.DefaultToolRuntime;
import org.apache.solr.cli.SolrCLI;
import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
Expand Down Expand Up @@ -100,6 +96,7 @@
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.TimeSource;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.ConfigSetService;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.Diagnostics;
import org.apache.solr.core.MockDirectoryFactory;
Expand Down Expand Up @@ -2224,19 +2221,16 @@ public static void copyConfigUp(
Path configSetDir, String srcConfigSet, String dstConfigName, String zkAddr)
throws Exception {

Path fullConfDir = configSetDir.resolve(srcConfigSet);
String[] args =
new String[] {
"--conf-name", dstConfigName,
"--conf-dir", fullConfDir.toAbsolutePath().toString(),
"-z", zkAddr
};

ToolRuntime runtime = new DefaultToolRuntime();
ConfigSetUploadTool tool = new ConfigSetUploadTool(runtime);

int res = tool.runTool(SolrCLI.processCommandLineArgs(tool, args));
assertEquals("Tool should have returned 0 for success, returned: " + res, 0, res);
Path confPath =
ConfigSetService.getConfigsetPath(
configSetDir.resolve(srcConfigSet).toString(), configSetDir.toString());
try (SolrZkClient zkClient =
new SolrZkClient.Builder()
.withUrl(zkAddr)
.withTimeout(AbstractZkTestCase.TIMEOUT, TimeUnit.MILLISECONDS)
.build()) {
zkClient.upConfig(confPath, dstConfigName);
}
}

@Override
Expand Down
Loading