This is an automated email from the ASF dual-hosted git repository.

epugh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 1e5d7599e16 SOLR-17384: Bring ExportTool options in line with the new 
CLI pattern (#2807)
1e5d7599e16 is described below

commit 1e5d7599e16630ab2b676a6778a52ade7d3474fe
Author: Eric Pugh <[email protected]>
AuthorDate: Tue Oct 29 10:05:47 2024 -0400

    SOLR-17384: Bring ExportTool options in line with the new CLI pattern 
(#2807)
    
    
    Co-authored-by: Christos Malliaridis <[email protected]>
---
 .../src/java/org/apache/solr/cli/ExportTool.java   | 35 ++++++++++++++++++----
 .../test/org/apache/solr/cli/TestExportTool.java   |  4 +--
 solr/packaging/test/test_basic_auth.bats           |  2 +-
 solr/packaging/test/test_export.bats               | 18 +++++------
 .../pages/solr-control-script-reference.adoc       | 28 +++++++++++------
 5 files changed, 60 insertions(+), 27 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cli/ExportTool.java 
b/solr/core/src/java/org/apache/solr/cli/ExportTool.java
index e2167c39091..97e4774f391 100644
--- a/solr/core/src/java/org/apache/solr/cli/ExportTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ExportTool.java
@@ -116,28 +116,48 @@ public class ExportTool extends ToolBase {
             .desc("Name of the collection.")
             .build(),
         Option.builder("out")
+            .deprecated(
+                DeprecatedAttributes.builder()
+                    .setForRemoval(true)
+                    .setSince("9.8")
+                    .setDescription("Use --output instead")
+                    .get())
+            .hasArg()
+            .argName("PATH")
+            .desc(
+                "Path to output the exported data, and optionally the file 
name, defaults to 'collection-name'.")
+            .build(),
+        Option.builder()
+            .longOpt("output")
             .hasArg()
             .argName("PATH")
             .desc(
                 "Path to output the exported data, and optionally the file 
name, defaults to 'collection-name'.")
             .build(),
-        Option.builder("format")
+        Option.builder()
+            .longOpt("format")
             .hasArg()
             .argName("FORMAT")
             .desc("Output format for exported docs (json, jsonl or javabin), 
defaulting to json.")
             .build(),
-        Option.builder("compress").desc("Compress the output.").build(),
-        Option.builder("limit")
+        Option.builder()
+            .longOpt("compress")
+            .desc("Compress the output. Defaults to false.")
+            .build(),
+        Option.builder()
+            .longOpt("limit")
             .hasArg()
             .argName("#")
             .desc("Maximum number of docs to download. Default is 100, use -1 
for all docs.")
             .build(),
-        Option.builder("query")
+        Option.builder()
+            .longOpt("query")
             .hasArg()
             .argName("QUERY")
             .desc("A custom query, default is '*:*'.")
             .build(),
-        Option.builder("fields")
+        Option.builder()
+            .longOpt("fields")
             .hasArg()
             .argName("FIELDA,FIELDB")
             .desc("Comma separated list of fields to export. By default all 
fields are fetched.")
@@ -280,8 +300,11 @@ public class ExportTool extends ToolBase {
     String credentials = 
cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt());
     Info info = new MultiThreadedRunner(url, credentials);
     info.query = cli.getOptionValue("query", "*:*");
+
     info.setOutFormat(
-        cli.getOptionValue("out"), cli.getOptionValue("format"), 
cli.hasOption("compress"));
+        SolrCLI.getOptionWithDeprecatedAndDefault(cli, "output", "out", null),
+        cli.getOptionValue("format"),
+        cli.hasOption("compress"));
     info.fields = cli.getOptionValue("fields");
     info.setLimit(cli.getOptionValue("limit", "100"));
     info.output = super.stdout;
diff --git a/solr/core/src/test/org/apache/solr/cli/TestExportTool.java 
b/solr/core/src/test/org/apache/solr/cli/TestExportTool.java
index 1749d7c54d9..6347c4a47e7 100644
--- a/solr/core/src/test/org/apache/solr/cli/TestExportTool.java
+++ b/solr/core/src/test/org/apache/solr/cli/TestExportTool.java
@@ -249,9 +249,9 @@ public class TestExportTool extends SolrCloudTestCase {
         COLLECTION_NAME,
         "--credentials",
         SecurityJson.USER_PASS,
-        "-out",
+        "--output",
         outFile.getAbsolutePath(),
-        "-verbose"
+        "--verbose"
       };
 
       assertEquals(0, runTool(args));
diff --git a/solr/packaging/test/test_basic_auth.bats 
b/solr/packaging/test/test_basic_auth.bats
index e4f84aabd93..333d5cf73d3 100644
--- a/solr/packaging/test/test_basic_auth.bats
+++ b/solr/packaging/test/test_basic_auth.bats
@@ -77,7 +77,7 @@ run solr create -c COLL_NAME
   assert_output --partial 'Committed'
   
   # Test export
-  #run solr export -u name:password --solr-url "http://localhost:${SOLR_PORT} 
--name COLL_NAME" -query "*:*" -out "${BATS_TEST_TMPDIR}/output"
+  #run solr export -u name:password --solr-url http://localhost:${SOLR_PORT} 
--name COLL_NAME --query "*:*" --output "${BATS_TEST_TMPDIR}/output"
   #assert_output --partial 'Export complete'
   
 }
diff --git a/solr/packaging/test/test_export.bats 
b/solr/packaging/test/test_export.bats
index 0ac04ce3d02..5dc7c9833b6 100644
--- a/solr/packaging/test/test_export.bats
+++ b/solr/packaging/test/test_export.bats
@@ -30,32 +30,32 @@ teardown() {
 
 @test "Check export command" {
   run solr start -e techproducts
-  run solr export --solr-url http://localhost:${SOLR_PORT} --name techproducts 
-query "*:* -id:test" -out "${BATS_TEST_TMPDIR}/output"
+  run solr export --solr-url http://localhost:${SOLR_PORT} --name techproducts 
--query "*:* -id:test" --output "${BATS_TEST_TMPDIR}/output"
 
   refute_output --partial 'Unrecognized option'
   assert_output --partial 'Export complete'
 
   assert [ -e ${BATS_TEST_TMPDIR}/output.json ]
 
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts"; 
-query "*:* -id:test"
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c techproducts 
--query "*:* -id:test"
   assert [ -e techproducts.json ]
   rm techproducts.json
 
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts"; 
-query "*:* -id:test" -format javabin
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c techproducts 
--query "*:* -id:test" --format javabin
   assert [ -e techproducts.javabin ]
   rm techproducts.javabin
 
-  # old pattern of putting a suffix on the out that controlled the format no 
longer supported ;-).
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts"; 
-query "*:* -id:test" -out "${BATS_TEST_TMPDIR}/output.javabin"
+  # old pattern of putting a suffix on the output that controlled the format 
no longer supported ;-).
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c techproducts 
--query "*:* -id:test" --output "${BATS_TEST_TMPDIR}/output.javabin"
   assert [ -e ${BATS_TEST_TMPDIR}/output.javabin.json ]
 
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts"; 
-query "*:* -id:test" -out "${BATS_TEST_TMPDIR}"
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c techproducts 
--query "*:* -id:test" --output "${BATS_TEST_TMPDIR}"
   assert [ -e ${BATS_TEST_TMPDIR}/techproducts.json ]
 
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts"; 
-query "*:* -id:test" -format jsonl -out "${BATS_TEST_TMPDIR}/output"
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c techproducts 
--query "*:* -id:test" --format jsonl --output "${BATS_TEST_TMPDIR}/output"
   assert [ -e ${BATS_TEST_TMPDIR}/output.jsonl ]
 
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts"; 
-query "*:* -id:test" -limit 10 -compress -format jsonl -out 
"${BATS_TEST_TMPDIR}/output"
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c techproducts 
--query "*:* -id:test" --limit 10 --compress --format jsonl --output 
"${BATS_TEST_TMPDIR}/output"
   assert [ -e ${BATS_TEST_TMPDIR}/output.jsonl.gz ]
   assert_output --partial 'Total Docs exported: 10'
 
@@ -64,7 +64,7 @@ teardown() {
 @test "export fails on non cloud mode" {
   run solr start --user-managed
   run solr create -c COLL_NAME
-  run solr export -url "http://localhost:${SOLR_PORT}/solr/COLL_NAME";
+  run solr export --solr-url http://localhost:${SOLR_PORT} -c COLL_NAME
   refute_output --partial 'Export complete'
   assert_output --partial "ERROR: Couldn't initialize a 
HttpClusterStateProvider"
 }
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/solr-control-script-reference.adoc
 
b/solr/solr-ref-guide/modules/deployment-guide/pages/solr-control-script-reference.adoc
index 5d51d643a96..c0e18e46091 100644
--- 
a/solr/solr-ref-guide/modules/deployment-guide/pages/solr-control-script-reference.adoc
+++ 
b/solr/solr-ref-guide/modules/deployment-guide/pages/solr-control-script-reference.adoc
@@ -1634,16 +1634,27 @@ NOTE: The `export` command only works with in a Solr 
running in cloud mode.
 
 The `bin/solr export` command takes the following parameters:
 
-`--url <url>`::
+`-s <url>` or `--solr-url <url>`::
++
+[%autowidth,frame=none]
+|===
+|Optional |Default: `http://localhost:8983`
+|===
++
+Fully-qualified address to a Solr.
++
+*Example*: `--solr-url http://localhost:8983`
+
+`-c <collection>`::
 +
 [%autowidth,frame=none]
 |===
 s|Required |Default: none
 |===
 +
-Fully-qualified address to a collection.
+Name of the collection to run an export against.
 +
-*Example*: `--url http://localhost:8983/solr/techproducts`
+*Example*: `bin/solr export -c gettingstarted`
 
 `--format <format>`::
 +
@@ -1656,7 +1667,7 @@ The file format of the export, `json`, `jsonl`, or 
`javabin`.
 Choosing `javabin` exports in the native Solr format, and is compact and fast 
to import.
 `jsonl` is the Json with Lines format, learn more at https://jsonlines.org/.
 
-`--out <path>`::
+`--output <path>`::
 +
 [%autowidth,frame=none]
 |===
@@ -1696,7 +1707,6 @@ The default is `\*:*` which will export all documents.
 Comma separated list of fields to be exported.
 By default all fields are fetched.
 
-
 `--limit <number of documents>`::
 +
 [%autowidth,frame=none]
@@ -1722,13 +1732,13 @@ This parameter is unnecessary if `SOLR_AUTH_TYPE` is 
defined in `solr.in.sh` or
 Export all documents from a collection `gettingstarted`:
 
 [source,bash]
-bin/solr export --url http://localhost:8983/solr/gettingstarted --limit -1
+bin/solr export --solr-url http://localhost:8983 -c gettingstarted --limit -1
 
 Export all documents of collection `gettingstarted` into a file called 
`1MDocs.json.gz` as a compressed JSON file:
 
 [source,bash]
 ----
-bin/solr export --url http://localhost:8983/solr/gettingstarted --limit -1 
--format json --compress --out 1MDocs
+bin/solr export --solr-url http://localhost:8983 -c gettingstarted --limit -1 
--format json --compress --output 1MDocs
 ----
 
 === Importing Documents into a Collection
@@ -1741,7 +1751,7 @@ First export the documents, making sure to ignore any 
fields that are populated
 
 [,console]
 ----
-$ bin/solr export --url http://localhost:8983/solr/gettingstarted --fields 
id,name,manu,cat,features
+$ bin/solr export --solr-url http://localhost:8983 -c gettingstarted --fields 
id,name,manu,cat,features
 ----
 
 Create a new collection to import the exported documents into:
@@ -1767,7 +1777,7 @@ $ curl -H 'Content-Type: application/json' -X POST -d 
@gettingstarted.json 'http
 
 [,console]
 ----
-$ bin/solr export --url http://localhost:8983/solr/gettingstarted --format 
javabin --fields id,name,manu,cat,features
+$ bin/solr export --solr-url http://localhost:8983 -c gettingstarted --format 
javabin --fields id,name,manu,cat,features
 $ curl -X POST --header "Content-Type: application/javabin" --data-binary 
@gettingstarted.javabin 
'http://localhost:8983/solr/test_collection/update?commit=true'
 ----
 

Reply via email to