Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 29 additions & 21 deletions solr/core/src/java/org/apache/solr/cli/CLIUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -233,34 +233,42 @@ public static String normalizeSolrUrl(CommandLine cli) throws Exception {
"Neither --solr-connection, --zk-host or --solr-url parameters, nor SOLR_CONNECTION, ZK_HOST env var provided, so assuming solr url is "
+ solrUrl
+ ".");
} else if (!solrConnection.isZookeeper()) {
// HTTP form (e.g. `-s http://host:port`): the connection string already names a Solr URL,
// so use it directly without spinning up a CloudSolrClient.
solrUrl = normalizeSolrUrl(solrConnection.quorumItems().get(0), false);
} else {
var builder =
new HttpJettySolrClient.Builder()
.withOptionalBasicAuthCredentials(
cli.getOptionValue(CommonCLIOptions.CREDENTIALS_OPTION));
try (CloudSolrClient cloudSolrClient = getCloudSolrClient(solrConnection, builder)) {
Set<String> liveNodes = cloudSolrClient.getClusterState().getLiveNodes();
if (liveNodes.isEmpty())
throw new IllegalStateException(
"No live nodes found! Cannot determine 'solrUrl' from SolrCloud: "
+ solrConnection);

String firstLiveNode = liveNodes.iterator().next();
String urlScheme =
cloudSolrClient.getClusterStateProvider().getClusterProperty("urlScheme", "http");
solrUrl = URLUtil.getBaseUrlForNodeName(firstLiveNode, urlScheme, false);
solrUrl = normalizeSolrUrl(solrUrl, false);
}
solrUrl =
solrUrlFromConnection(
solrConnection, cli.getOptionValue(CommonCLIOptions.CREDENTIALS_OPTION));
}
}
solrUrl = normalizeSolrUrl(solrUrl);
return solrUrl;
}

/**
* Resolves a base Solr URL from a parsed connection. The HTTP form (e.g. {@code -s
* http://host:port}) already names a Solr URL, so it is used directly without spinning up a
* CloudSolrClient; the ZooKeeper form queries the cluster for a live node's base URL.
*/
public static String solrUrlFromConnection(
CloudSolrClient.CloudSolrClientConnection solrConnection, String credentials)
throws Exception {
if (!solrConnection.isZookeeper()) {
return normalizeSolrUrl(solrConnection.quorumItems().get(0), false);
}
var builder = new HttpJettySolrClient.Builder().withOptionalBasicAuthCredentials(credentials);
try (CloudSolrClient cloudSolrClient = getCloudSolrClient(solrConnection, builder)) {
Set<String> liveNodes = cloudSolrClient.getClusterState().getLiveNodes();
if (liveNodes.isEmpty())
Comment thread
janhoy marked this conversation as resolved.
throw new IllegalStateException(
"No live nodes found! Cannot determine 'solrUrl' from SolrCloud: " + solrConnection);

String firstLiveNode = liveNodes.iterator().next();
String urlScheme =
cloudSolrClient.getClusterStateProvider().getClusterProperty("urlScheme", "http");
return normalizeSolrUrl(
URLUtil.getBaseUrlForNodeName(firstLiveNode, urlScheme, false), false);
}
}

/**
* Returns true if the user supplied any of the connection-related CLI options ({@code
* --solr-url}, {@code --solr-connection}, or {@code --zk-host}). Use this to gate logic that
Expand Down
Loading