NazerkeBS commented on a change in pull request #322:
URL: https://github.com/apache/solr/pull/322#discussion_r724023093



##########
File path: solr/core/src/java/org/apache/solr/core/ConfigSetService.java
##########
@@ -78,28 +80,30 @@ private static ConfigSetService instantiate(CoreContainer 
coreContainer) {
     }
   }
 
-  public void bootstrapConfigSet() {
+  private void bootstrapConfigSet(CoreContainer coreContainer) {
     // bootstrap _default conf, bootstrap_confdir and bootstrap_conf if 
provided via system property
-    String confDir = System.getProperty("bootstrap_confdir");
-    boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
     try {
       // _default conf
       bootstrapDefaultConf();
+
       // bootstrap_confdir
+      String confDir = System.getProperty("bootstrap_confdir");
       if (confDir != null) {
         bootstrapConfDir(confDir);
       }
+
       // bootstrap_conf, in SolrCloud mode
+      boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
       if (boostrapConf == true) {
-        if (this instanceof ZkConfigSetService) {
-          bootstrapConf(((ZkConfigSetService) 
this).getZkController().getCoreContainer());
+        if (coreContainer.getZkController() != null) {
+          bootstrapConf(coreContainer);
         }
       }
     } catch (UnsupportedOperationException e) {
-      log.info("config couldn't be uploaded");
+      log.info("Not bootstrapping configSets because they are read-only");

Review comment:
       FileSystemConfigSetService throws UnsupportedOperationException for 
methods like upload, download, etc

##########
File path: solr/core/src/java/org/apache/solr/core/ConfigSetService.java
##########
@@ -87,20 +80,61 @@ private static ConfigSetService instantiate(CoreContainer 
coreContainer) {
     }
   }
 
-  private static void bootstrapDefaultConfigSet(ConfigSetService 
configSetService) throws IOException {
-    if (configSetService.checkConfigExists("_default") == false) {
+  private void bootstrapConfigSet(CoreContainer coreContainer) {
+    // bootstrap _default conf, bootstrap_confdir and bootstrap_conf if 
provided via system property
+    try {
+      // _default conf
+      bootstrapDefaultConf();
+
+      // bootstrap_confdir
+      String confDir = System.getProperty("bootstrap_confdir");
+      if (confDir != null) {
+        bootstrapConfDir(confDir);
+      }
+
+      // bootstrap_conf, in SolrCloud mode
+      boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
+      if (boostrapConf == true) {
+        if (coreContainer.getZkController() != null) {
+          bootstrapConf(coreContainer);
+        }
+      }
+    } catch (UnsupportedOperationException e) {
+      log.info("Not bootstrapping configSets because they are read-only");
+    } catch (IOException e) {
+      throw new SolrException(
+          SolrException.ErrorCode.SERVER_ERROR, "Config couldn't be uploaded 
", e);
+    }
+  }
+
+  private void bootstrapDefaultConf() throws IOException {
+    if (this.checkConfigExists("_default") == false) {
       String configDirPath = getDefaultConfigDirPath();
       if (configDirPath == null) {
         log.warn(
-                "The _default configset could not be uploaded. Please provide 
'solr.default.confdir' parameter that points to a configset {} {}",
-                "intended to be the default. Current 'solr.default.confdir' 
value:",
-                
System.getProperty(SolrDispatchFilter.SOLR_DEFAULT_CONFDIR_ATTRIBUTE));
+            "The _default configset could not be uploaded. Please provide 
'solr.default.confdir' parameter that points to a configset {} {}",
+            "intended to be the default. Current 'solr.default.confdir' 
value:",
+            
System.getProperty(SolrDispatchFilter.SOLR_DEFAULT_CONFDIR_ATTRIBUTE));
       } else {
-        
configSetService.uploadConfig(ConfigSetsHandler.DEFAULT_CONFIGSET_NAME, 
Paths.get(configDirPath));
+        this.uploadConfig(ConfigSetsHandler.DEFAULT_CONFIGSET_NAME, 
Paths.get(configDirPath));
       }
     }
   }
 
+  private void bootstrapConfDir(String confDir) throws IOException {
+    Path configPath = Paths.get(confDir);
+    if (!Files.isDirectory(configPath)) {
+      throw new IllegalArgumentException(
+          String.format(

Review comment:
       I looked up other classes and some of them use String.format, so I 
followed 

##########
File path: solr/core/src/java/org/apache/solr/core/ConfigSetService.java
##########
@@ -78,28 +80,30 @@ private static ConfigSetService instantiate(CoreContainer 
coreContainer) {
     }
   }
 
-  public void bootstrapConfigSet() {
+  private void bootstrapConfigSet(CoreContainer coreContainer) {
     // bootstrap _default conf, bootstrap_confdir and bootstrap_conf if 
provided via system property
-    String confDir = System.getProperty("bootstrap_confdir");
-    boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
     try {
       // _default conf
       bootstrapDefaultConf();
+
       // bootstrap_confdir
+      String confDir = System.getProperty("bootstrap_confdir");
       if (confDir != null) {
         bootstrapConfDir(confDir);
       }
+
       // bootstrap_conf, in SolrCloud mode
+      boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
       if (boostrapConf == true) {
-        if (this instanceof ZkConfigSetService) {
-          bootstrapConf(((ZkConfigSetService) 
this).getZkController().getCoreContainer());
+        if (coreContainer.getZkController() != null) {

Review comment:
       another concern: ZkCli.main() uses ConfigSetService.bootstrapConf(); 
although it is ZkConfigSetService, zkController is null. I tempted to do 
assertion `assert coreContainer.getZkContainer != null` in 
ConfigSetService.bootstrapConf(), but then I saw zkController is not 
instantiated in ZkCli. Maybe it is an edge case ? 

##########
File path: solr/core/src/java/org/apache/solr/core/ConfigSetService.java
##########
@@ -78,28 +80,30 @@ private static ConfigSetService instantiate(CoreContainer 
coreContainer) {
     }
   }
 
-  public void bootstrapConfigSet() {
+  private void bootstrapConfigSet(CoreContainer coreContainer) {
     // bootstrap _default conf, bootstrap_confdir and bootstrap_conf if 
provided via system property
-    String confDir = System.getProperty("bootstrap_confdir");
-    boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
     try {
       // _default conf
       bootstrapDefaultConf();
+
       // bootstrap_confdir
+      String confDir = System.getProperty("bootstrap_confdir");
       if (confDir != null) {
         bootstrapConfDir(confDir);
       }
+
       // bootstrap_conf, in SolrCloud mode
+      boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
       if (boostrapConf == true) {
-        if (this instanceof ZkConfigSetService) {
-          bootstrapConf(((ZkConfigSetService) 
this).getZkController().getCoreContainer());
+        if (coreContainer.getZkController() != null) {

Review comment:
       another concern: ZkCli.main() uses ConfigSetService.bootstrapConf(); 
although it is ZkConfigSetService, zkController is null. I tempted to do 
assertion `assert coreContainer.getZkContainer != null` in 
ConfigSetService.bootstrapConf(), but then I see zkController is not 
instantiated in ZkCli. Maybe edge case;




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to