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 b8cbe41b86a SOLR-17495: Change CLI delete command to not delete 
configs by default. (#2761)
b8cbe41b86a is described below

commit b8cbe41b86a6aac4f93dbbbe972af8451111a66d
Author: Eric Pugh <[email protected]>
AuthorDate: Fri Nov 8 07:34:02 2024 -0500

    SOLR-17495: Change CLI delete command to not delete configs by default. 
(#2761)
    
    Decouples the lifecycle of a collection and a configset when using bin/solr 
delete.
---
 solr/CHANGES.txt                                           |  2 ++
 solr/core/src/java/org/apache/solr/cli/DeleteTool.java     | 11 +++--------
 solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java |  2 --
 solr/packaging/test/bats_helper.bash                       |  2 +-
 solr/packaging/test/test_basic_auth.bats                   |  3 ++-
 solr/packaging/test/test_delete_collection.bats            |  8 +++++---
 .../pages/solr-control-script-reference.adoc               | 14 +++++++-------
 .../upgrade-notes/pages/major-changes-in-solr-10.adoc      |  3 +++
 8 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 0076975aec7..244f68171b7 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -28,6 +28,8 @@ Improvements
 
 * SOLR-17544: Solr CLI will now stop when you combine mutually exclusive 
options.  Combining -s and -z options is a common example.  (Eric Pugh, 
Christos Malliaridis)
 
+* SOLR-17495: Change Solr CLI delete command to not delete configs by default. 
 Decouple lifecycle of collections from configsets. (Eric Pugh)
+
 Optimizations
 ---------------------
 (No changes)
diff --git a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java 
b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
index 61e02161416..2c42f8dc030 100644
--- a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
@@ -57,9 +57,6 @@ public class DeleteTool extends ToolBase {
   private static final Option DELETE_CONFIG_OPTION =
       Option.builder()
           .longOpt("delete-config")
-          .hasArg()
-          .argName("true|false")
-          .type(Boolean.class)
           .desc(
               "Flag to indicate if the underlying configuration directory for 
a collection should also be deleted; default is true.")
           .build();
@@ -86,10 +83,8 @@ public class DeleteTool extends ToolBase {
 
   @Override
   public String getHeader() {
-    return "Deletes a core or collection depending on whether Solr is running 
in standalone (core) or SolrCloud"
-        + " mode (collection). If you're deleting a collection in SolrCloud 
mode, the default behavior is to also"
-        + " delete the configuration directory from Zookeeper so long as it is 
not being used by another collection.\n"
-        + " You can override this behavior by passing --delete-config false 
when running this command.\n"
+    return "Deletes a collection or core depending on whether Solr is running 
in SolrCloud or standalone mode. "
+        + "Deleting a collection does not delete it's configuration unless you 
pass in the --delete-config flag.\n"
         + "\n"
         + "List of options:";
   }
@@ -148,7 +143,7 @@ public class DeleteTool extends ToolBase {
 
     String configName =
         
zkStateReader.getClusterState().getCollection(collectionName).getConfigName();
-    boolean deleteConfig = 
Boolean.parseBoolean(cli.getOptionValue(DELETE_CONFIG_OPTION, "true"));
+    boolean deleteConfig = cli.hasOption(DELETE_CONFIG_OPTION);
 
     if (deleteConfig && configName != null) {
       if (cli.hasOption(FORCE_OPTION)) {
diff --git a/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java 
b/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java
index 8f66d104d4e..45c48697663 100644
--- a/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/DeleteToolTest.java
@@ -60,8 +60,6 @@ public class DeleteToolTest extends SolrCloudTestCase {
       "delete",
       "-c",
       "testDeleteCollectionWithBasicAuth",
-      "--delete-config",
-      "false",
       "-z",
       cluster.getZkClient().getZkServerAddress(),
       "--credentials",
diff --git a/solr/packaging/test/bats_helper.bash 
b/solr/packaging/test/bats_helper.bash
index 68c29686a99..2d8fbb18375 100644
--- a/solr/packaging/test/bats_helper.bash
+++ b/solr/packaging/test/bats_helper.bash
@@ -71,7 +71,7 @@ delete_all_collections() {
   local collection_list="$(solr zk ls /collections -z localhost:${ZK_PORT})"
   for collection in $collection_list; do
     if [[ -n $collection ]]; then
-      solr delete -c $collection >/dev/null 2>&1
+      solr delete -c $collection --delete-config >/dev/null 2>&1
     fi
   done
 }
diff --git a/solr/packaging/test/test_basic_auth.bats 
b/solr/packaging/test/test_basic_auth.bats
index 333d5cf73d3..a84d9d15d4a 100644
--- a/solr/packaging/test/test_basic_auth.bats
+++ b/solr/packaging/test/test_basic_auth.bats
@@ -57,9 +57,10 @@ teardown() {
   assert_output --partial '"numFound":0'
   
   # Test delete
-  run solr delete --credentials name:password -c COLL_NAME -z 
localhost:${ZK_PORT} --verbose
+  run solr delete --credentials name:password -c COLL_NAME -z 
localhost:${ZK_PORT} --delete-config --verbose
   assert_output --partial "Deleted collection 'COLL_NAME'"
   refute collection_exists "COLL_NAME"
+  refute config_exists "COLL_NAME"
   
 }
 
diff --git a/solr/packaging/test/test_delete_collection.bats 
b/solr/packaging/test/test_delete_collection.bats
index d5db4263e70..0ff455d1b27 100644
--- a/solr/packaging/test/test_delete_collection.bats
+++ b/solr/packaging/test/test_delete_collection.bats
@@ -44,6 +44,7 @@ teardown() {
 
   solr delete -c "COLL_NAME"
   refute collection_exists "COLL_NAME"
+  assert config_exists "COLL_NAME"
 }
 
 @test "can delete collections with solr-url" {
@@ -52,13 +53,14 @@ teardown() {
 
   solr delete -c "COLL_NAME" --solr-url http://localhost:${SOLR_PORT}
   refute collection_exists "COLL_NAME"
+  assert config_exists "COLL_NAME"
 }
 
 @test "collection delete also deletes zk config" {
   solr create -c "COLL_NAME"
   assert config_exists "COLL_NAME"
 
-  solr delete -c "COLL_NAME"
+  solr delete -c "COLL_NAME" --delete-config
   refute config_exists "COLL_NAME"
 }
 
@@ -66,7 +68,7 @@ teardown() {
   solr create -c "COLL_NAME" -n "NONDEFAULT_CONFIG_NAME"
   assert config_exists "NONDEFAULT_CONFIG_NAME"
 
-  solr delete -c "COLL_NAME"
+  solr delete -c "COLL_NAME" --delete-config
   refute config_exists "NONDEFAULT_CONFIG_NAME"
 }
 
@@ -74,6 +76,6 @@ teardown() {
   solr create -c "COLL_NAME"
   assert config_exists "COLL_NAME"
 
-  solr delete -c "COLL_NAME" --delete-config false
+  solr delete -c "COLL_NAME"
   assert config_exists "COLL_NAME"
 }
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 c0e18e46091..49b4ffab143 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
@@ -794,10 +794,10 @@ The `delete` command detects the mode that Solr is 
running in and then deletes t
 
 `bin/solr delete --help`
 
-If you're deleting a collection in SolrCloud mode, the default behavior is to 
also delete the configuration directory from Zookeeper so long as it is not 
being used by another collection.
+If you're deleting a collection in SolrCloud mode, the default behavior is to 
leave the configuration directory in Zookeeper. If you want to delete the 
configuration then you need to pass in `--delete-config` as well.
 
-For example, if you created a collection with `bin/solr create -c contacts`, 
then the delete command `bin/solr delete -c contacts` will check to see if the 
`/configs/contacts` configuration directory is being used by any other 
collections.
-If not, then the `/configs/contacts` directory is removed from ZooKeeper.  You 
can override this behavior by passing `--delete-config false` when running this 
command.atom
+For example, if you created a collection with `bin/solr create -c contacts`, 
then the delete command `bin/solr delete -c contacts --delete-config` will 
check to see if the `/configs/contacts` configuration directory is being used 
by any other collections.
+If not, then the `/configs/contacts` directory is removed from ZooKeeper.
 
 ==== Delete Collection or Core Parameters
 
@@ -816,14 +816,14 @@ Name of the collection or core to delete.
 +
 [%autowidth,frame=none]
 |===
-|Optional |Default: `true`
+|Optional |Default: none
 |===
 +
-Whether or not the configuration directory should also be deleted from 
ZooKeeper.
+Specify the configuration directory should also be deleted from ZooKeeper.
 +
-If the configuration directory is being used by another collection, then it 
will not be deleted even if you pass `--delete-config` as `true`.
+If the configuration directory is being used by another collection, then it 
will not be deleted.
 +
-*Example*: `bin/solr delete --delete-config false`
+*Example*: `bin/solr delete --delete-config`
 
 `-f` or `--force`::
 +
diff --git 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
index af10bc83cff..33440aec93b 100644
--- 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
+++ 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
@@ -44,6 +44,9 @@ Some key changes that you may run into are:
  
 To learn about the updated options in each CLI tool, use the `--help` option 
or look up the tool in the documentation.
 
+Additionally, the `bin/solr delete` command no longer deletes a configset when 
you delete a collection.  Previously if you deleted a collection, it would also 
delete it's associated configset if it was the only user of it.  
+Now you have to explicitly provide a  `--delete-config` option to delete the 
configsets.  This decouples the lifecycle of a configset from that of a 
collection.
+
 === SolrJ
 
 * Starting in 10, the Maven POM for SolrJ does not refer to SolrJ modules like 
ZooKeeper.  If you require such functionality, you need to add additional 
dependencies.

Reply via email to