You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2021/06/01 17:50:21 UTC

[solr] branch main updated: SOLR-15421: ConfigSet existence now checks for solrconfig.xml (#135)

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

dsmiley 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 f3b4693  SOLR-15421: ConfigSet existence now checks for solrconfig.xml (#135)
f3b4693 is described below

commit f3b4693081ed2bd7194526e902b80278aec92edc
Author: AndrĂ¡s Salamon <an...@melda.info>
AuthorDate: Tue Jun 1 19:50:10 2021 +0200

    SOLR-15421: ConfigSet existence now checks for solrconfig.xml (#135)
    
    ConfigSet API now checks for solrconfig.xml when checking for the existence of a configset
---
 solr/CHANGES.txt                                            |  2 ++
 solr/core/src/java/org/apache/solr/cloud/ConfigSetCmds.java |  4 ----
 .../src/java/org/apache/solr/cloud/ZkConfigSetService.java  |  6 +++---
 .../org/apache/solr/core/FileSystemConfigSetService.java    |  4 ++--
 .../cloud/OverseerCollectionConfigSetProcessorTest.java     |  3 ++-
 .../src/test/org/apache/solr/cloud/TestConfigSetsAPI.java   | 13 ++++++-------
 6 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index f0fc29b..eed1410 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -129,6 +129,8 @@ when told to. The admin UI now tells it to. (Nazerke Seidan, David Smiley)
 
 * SOLR-15414: Use ConfigSet API instead of Zookeeper data node to list out configsets available in Solr Admin UI. (Nazerke Seidan via Eric Pugh)
 
+* SOLR-15421: ConfigSet API also checks for solrconfig.xml when checking the existence of a configset (Andras Salamon via David Smiley)
+
 Other Changes
 ----------------------
 * SOLR-14656: Autoscaling framework removed (Ishan Chattopadhyaya, noble, Ilan Ginzburg)
diff --git a/solr/core/src/java/org/apache/solr/cloud/ConfigSetCmds.java b/solr/core/src/java/org/apache/solr/cloud/ConfigSetCmds.java
index 5d5983a..8568f14 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ConfigSetCmds.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ConfigSetCmds.java
@@ -184,10 +184,6 @@ public class ConfigSetCmds {
   }
 
   private static void deleteConfigSet(String configSetName, boolean force, CoreContainer coreContainer) throws IOException {
-    if (!coreContainer.getConfigSetService().checkConfigExists(configSetName)) {
-      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "ConfigSet does not exist to delete: " + configSetName);
-    }
-
     ZkStateReader zkStateReader = coreContainer.getZkController().getZkStateReader();
 
     for (Map.Entry<String, DocCollection> entry : zkStateReader.getClusterState().getCollectionsMap().entrySet()) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkConfigSetService.java b/solr/core/src/java/org/apache/solr/cloud/ZkConfigSetService.java
index 5c0c22b..3db4efe 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkConfigSetService.java
@@ -142,9 +142,9 @@ public class ZkConfigSetService extends ConfigSetService {
   @Override
   public boolean checkConfigExists(String configName) throws IOException {
     try {
-      Boolean existsConfig = zkClient.exists(CONFIGS_ZKNODE + "/" + configName, true);
-      if (existsConfig == null) return false;
-      return existsConfig;
+      Boolean existsSolrConfigXml = zkClient.exists(CONFIGS_ZKNODE + "/" + configName + "/solrconfig.xml", true);
+      if (existsSolrConfigXml == null) return false;
+      return existsSolrConfigXml;
     } catch (KeeperException | InterruptedException e) {
       throw new IOException("Error checking whether config exists",
               SolrZkClient.checkInterrupted(e));
diff --git a/solr/core/src/java/org/apache/solr/core/FileSystemConfigSetService.java b/solr/core/src/java/org/apache/solr/core/FileSystemConfigSetService.java
index 9db6245..a4029a2 100644
--- a/solr/core/src/java/org/apache/solr/core/FileSystemConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/core/FileSystemConfigSetService.java
@@ -61,8 +61,8 @@ public class FileSystemConfigSetService extends ConfigSetService {
 
   @Override
   public boolean checkConfigExists(String configName) throws IOException {
-    Path configSetDirectory = configSetBase.resolve(configName);
-    return Files.isDirectory(configSetDirectory);
+    Path solrConfigXmlFile= configSetBase.resolve(configName).resolve("solrconfig.xml");
+    return Files.exists(solrConfigXmlFile);
   }
 
   @Override
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
index 82e600e..ab6ac68 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
@@ -547,7 +547,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
             return null;
           }}).when(distribStateManagerMock).makePath(anyString());
 
-    zkClientData.put("/configs/myconfig", new byte[1]);
+    zkClientData.put("/configs/"+CONFIG_NAME, new byte[1]);
+    zkClientData.put("/configs/"+CONFIG_NAME+"/solrconfig.xml", new byte[1]);
 
     when(solrMetricsContextMock.getChildContext(any(Object.class))).thenReturn(solrMetricsContextMock);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
index 1af32d2..45c5806 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
@@ -1121,10 +1121,6 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
     DeleteNoErrorChecking delete = new DeleteNoErrorChecking();
     verifyException(solrClient, delete, NAME);
 
-    // ConfigSet doesn't exist
-    delete.setConfigSetName("configSetBogus");
-    verifyException(solrClient, delete, "ConfigSet does not exist");
-
     // ConfigSet is immutable
     delete.setConfigSetName("configSet");
     verifyException(solrClient, delete, "Requested delete of immutable ConfigSet");
@@ -1148,11 +1144,16 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
     final SolrClient solrClient = getHttpSolrClient(baseUrl);
     final String configSet = "testDelete";
     getConfigSetService().uploadConfig(configSet, configset("configset-2"));
+    assertDelete(solrClient, configSet, true);
+    assertDelete(solrClient, "configSetBogus", false);
+    solrClient.close();
+  }
 
+  private void assertDelete(SolrClient solrClient, String configSet, boolean assertExists) throws IOException, SolrServerException {
     SolrZkClient zkClient = new SolrZkClient(cluster.getZkServer().getZkAddress(),
         AbstractZkTestCase.TIMEOUT, AbstractZkTestCase.TIMEOUT, null);
     try {
-      assertTrue(getConfigSetService().checkConfigExists(configSet));
+      assertEquals(assertExists, getConfigSetService().checkConfigExists(configSet));
 
       Delete delete = new Delete();
       delete.setConfigSetName(configSet);
@@ -1162,8 +1163,6 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
     } finally {
       zkClient.close();
     }
-
-    solrClient.close();
   }
 
   @Test