laminelam commented on code in PR #2417:
URL: https://github.com/apache/solr/pull/2417#discussion_r1579968386


##########
solr/core/src/java/org/apache/solr/cli/SolrCLI.java:
##########
@@ -607,6 +611,46 @@ public static String getZkHost(CommandLine cli) throws 
Exception {
     return zkHost;
   }
 
+  public static SolrZkClient getSolrZkClient(CommandLine cli) throws Exception 
{
+    return getSolrZkClient(cli, getZkHost(cli));
+  }
+
+  public static SolrZkClient getSolrZkClient(CommandLine cli, String zkHost) 
throws Exception {
+    if (zkHost == null) {
+      throw new IllegalStateException(
+          "Solr at "
+              + cli.getOptionValue("solrUrl")
+              + " is running in standalone server mode, this command can only 
be used when running in SolrCloud mode.\n");
+    }
+    return new SolrZkClient.Builder()
+        .withUrl(zkHost)
+        .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, 
TimeUnit.MILLISECONDS)
+        .withSolrClassLoader(getSolrResourceLoader())
+        .build();
+  }
+
+  public static CloudHttp2SolrClient getCloudHttp2SolrClient(String zkHost) {
+    return getCloudHttp2SolrClient(zkHost, null);
+  }
+
+  public static CloudHttp2SolrClient getCloudHttp2SolrClient(
+      String zkHost, Http2SolrClient.Builder builder) {
+    return new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), 
Optional.empty())
+        .withSolrClassLoader(getSolrResourceLoader())
+        .withInternalClientBuilder(builder)
+        .build();
+  }
+
+  private static SolrResourceLoader getSolrResourceLoader() {
+    String dir = System.getProperty("solr.solr.home");
+    if (StrUtils.isNullOrEmpty(dir)) {
+      dir = System.getProperty("solr.install.dir");
+    }
+    final SolrResourceLoader loader = new SolrResourceLoader(Paths.get(dir));
+    NodeConfig.initModules(loader, null);

Review Comment:
   Actually I am one the who made that comment. I feel there is a lack of 
separation between NodeConfig, modules and SolrResourceLoader logic. Which may 
have contributed to the situation we're facing here.
   
   As for _SolrResourceLoader_, the main problem is that _solrj_ doesn't have 
access to classes part of _modules_ or _core_. As _SolrZKClient_ is part of 
_solrj_, it needs a way to get access to those classes.
    
   There's some discussion 
[here](https://github.com/apache/solr/pull/826#discussion_r866976673) about 
this issue. That discussion led to the new feature of passing a 
SolrResourceLoader to SolrZKclient after loading the modules.



-- 
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