Skip to content
Open
Show file tree
Hide file tree
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
9 changes: 8 additions & 1 deletion changelog/unreleased/SOLR-18056-urlScheme-csp.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc
title: Improved CloudSolrClient's urlScheme detection by using the scheme of provided Solr URLs, or looking at "solr.ssl.enabled".
title: Improved url scheme detection in client API and core components
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this has become much more vague to a reader of the changelog who is anyone other than you and me. The "title" label is misleading -- add more sentences.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about this "Standardize urlScheme detection with precedence for "solr.ssl.enabled" ?

type: changed
authors:
- name: Vishnu Priya Chandra Sekar
links:
- name: SOLR-18056
url: https://issues.apache.org/jira/browse/SOLR-18056
- name: SOLR-18055
url: https://issues.apache.org/jira/browse/SOLR-18055
important_notes:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the first I've seen of this... and you are the first to attempt to use it :-) Our only references to it thus far don't even truly say what it's for.
Documentation. Seems for "breaking changes" or presumably anything befitting of that label. What you added doesn't qualify IMO.

Well the "deprecated" part does... albeit I think I said it's premature to deprecate that.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, there is no other field I could use for.
Based on this, I will just have a self descriptive title (IMO this is the hardest part) like "Standardize urlScheme detection by prioritizing "solr.ssl.enabled" over solr.xml and cluster property"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

multiple sentences if fine:

# * Be short and focused on the user impact. Multiple sentences is fine!

- Improved CloudSolrClient's urlScheme detection by using the scheme of provided Solr URLs, or looking at "solr.ssl.enabled".
- Improved ZkStateReader's urlScheme detection by giving higher precedence to "solr.ssl.enabled" over cluster property
- Improved HttpShardHandlerFactory's urlScheme detection by giving higher precedence to "solr.ssl.enabled" over explicit configuration (ie., solr.xml)
- Deprecated usage of the cluster property for urlScheme in ZkController, ReplicaMutator, SliceMutator, and SystemInfoProvider; these now rely on ClusterStateProvider#getUrlScheme
1 change: 0 additions & 1 deletion solr/benchmark/src/resources/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
<str name="allowUrls">${solr.tests.security.allow.urls:}</str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:15000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
7 changes: 1 addition & 6 deletions solr/core/src/java/org/apache/solr/cloud/ZkController.java
Original file line number Diff line number Diff line change
Expand Up @@ -365,13 +365,8 @@ public ZkController(
});

zkStateReader.createClusterStateWatchersAndUpdate(); // and reads cluster properties

// note: Can't read cluster properties until createClusterState ^ is called
Comment thread
VishnuPriyaChandraSekar marked this conversation as resolved.
final String urlSchemeFromClusterProp =
zkStateReader.getClusterProperty(ZkStateReader.URL_SCHEME, ZkStateReader.HTTP);
// this must happen after zkStateReader has initialized the cluster props
this.baseURL = URLUtil.getBaseUrlForNodeName(this.nodeName, urlSchemeFromClusterProp);

this.baseURL = zkStateReader.getBaseUrlForNodeName(this.nodeName);
// Now that zkStateReader is available, read OVERSEER_ENABLED.
final boolean overseerEnabled =
Boolean.parseBoolean(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import org.apache.solr.common.params.CollectionAdminParams;
import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.URLUtil;
import org.apache.solr.common.util.Utils;
import org.apache.solr.util.TestInjection;
import org.slf4j.Logger;
Expand Down Expand Up @@ -407,11 +408,8 @@ private ZkWriteCommand updateState(
String nodeName = (String) replicaProps.get(ZkStateReader.NODE_NAME_PROP);
if (nodeName != null) {
String baseUrl =
Utils.getBaseUrlForNodeName(
nodeName,
cloudManager
.getClusterStateProvider()
.getClusterProperty(ZkStateReader.URL_SCHEME, "http"));
URLUtil.getBaseUrlForNodeName(
nodeName, cloudManager.getClusterStateProvider().getUrlScheme());
replicaProps.put(ZkStateReader.BASE_URL_PROP, baseUrl);
}
Replica replica = new Replica(coreNodeName, replicaProps, collectionName, sliceName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionAdminParams;
import org.apache.solr.common.util.URLUtil;
import org.apache.solr.common.util.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -88,11 +89,8 @@ public ZkWriteCommand addReplica(ClusterState clusterState, ZkNodeProps message)
}
String nodeName = message.getStr(ZkStateReader.NODE_NAME_PROP);
String baseUrl =
Utils.getBaseUrlForNodeName(
nodeName,
cloudManager
.getClusterStateProvider()
.getClusterProperty(ZkStateReader.URL_SCHEME, "http"));
URLUtil.getBaseUrlForNodeName(
nodeName, cloudManager.getClusterStateProvider().getUrlScheme());

Map<String, Object> replicaProps =
Utils.makeMap(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,7 @@ public NodeSystemResponse.Security getSecurityInfo() {
}

if (cc != null && cc.getZkController() != null) {
String urlScheme =
cc.getZkController().zkStateReader.getClusterProperty(ZkStateReader.URL_SCHEME, "http");
String urlScheme = cc.getZkController().zkStateReader.getUrlScheme();
info.tls = ZkStateReader.HTTPS.equals(urlScheme);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.EnvUtils;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
Expand Down Expand Up @@ -107,6 +108,9 @@ public class HttpShardHandlerFactory extends ShardHandlerFactory
// URL scheme to be used in distributed search.
static final String INIT_URL_SCHEME = "urlScheme";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious; was urlScheme arg documented in the ref guide or present in a published solr.xml that people use? If so we'll want to keep it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like urlScheme is an optional field in solr.xml [1]. In order to provide backward compatibility, I think the precedence to lookup the urlScheme should be 1) solr.ssl.enabled 2) urlScheme from solr.xml 3) default (null).

[1] https://solr.apache.org/guide/solr/latest/configuration-guide/configuring-solr-xml.html

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree. Thanks for looking into it.


// system property to enable ssl or tls for communication within Solr
static final String SOLR_SSL_ENABLED = "solr.ssl.enabled";

// The core size of the threadpool servicing requests
static final String INIT_CORE_POOL_SIZE = "corePoolSize";

Expand Down Expand Up @@ -225,12 +229,7 @@ private void initReplicaListTransformers(NamedList<?> routingConfig) {
public void init(PluginInfo info) {
StringBuilder sb = new StringBuilder();
NamedList<?> args = info.initArgs;
// note: the sys prop is only used in testing
this.scheme = getParameter(args, INIT_URL_SCHEME, System.getProperty(INIT_URL_SCHEME), sb);
if (this.scheme != null && this.scheme.endsWith("://")) {
this.scheme = this.scheme.replace("://", "");
}

this.scheme = getUrlScheme(args, sb);
String strategy =
getParameter(
args, "metricNameStrategy", UpdateShardHandlerConfig.DEFAULT_METRICNAMESTRATEGY, sb);
Expand Down Expand Up @@ -433,6 +432,31 @@ private String buildUrl(String url) {
return url;
}

/**
* Get url scheme of host
*
* <p>Examples:
*
* <ul>
* <li>Returns {@code "https"} when SSL is enabled via configuration.
* <li>Returns {@code null} when ssl is disabled or no explicit configuration is provided in
* solr.xml.
* </ul>
Comment on lines +437 to +444
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry, this is way too much documentation for a private method

*
* @return http or https or null
*/
private String getUrlScheme(NamedList<?> args, StringBuilder sb) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe prefix with 'init' not 'get' to emphasize this is for initialization and not any method in this class that might want it. On further reflection, there's getParameter called by init() a bunch of times. This method here was merely extracted from init(). You could put it back. Or call it getParameterUrlScheme

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That makes sense :)

final Boolean isSolrSslEnabled = EnvUtils.getPropertyAsBool(SOLR_SSL_ENABLED, null);
if (isSolrSslEnabled != null) {
return isSolrSslEnabled ? "https" : "http";
}
String urlScheme = getParameter(args, INIT_URL_SCHEME, System.getProperty(INIT_URL_SCHEME), sb);
if (urlScheme != null && urlScheme.endsWith("://")) {
urlScheme = urlScheme.replace("://", "");
}
return urlScheme;
}

@Override
public void initializeMetrics(SolrMetricsContext parentContext, Attributes attributes) {
solrMetricsContext = parentContext.getChildContext(this);
Expand Down
1 change: 0 additions & 1 deletion solr/core/src/test-files/solr/solr-jmxreporter.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

<solr>
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@

<shardHandlerFactory name="shardHandlerFactory"
class="org.apache.solr.handler.component.TrackingShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
1 change: 0 additions & 1 deletion solr/core/src/test-files/solr/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
<int name="indexSearcherExecutorThreads">4</int>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:15000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
*/
package org.apache.solr.cloud;

import static org.apache.solr.common.cloud.ZkStateReader.URL_SCHEME;

import java.lang.invoke.MethodHandles;
import java.nio.file.Path;
import java.util.ArrayList;
Expand Down Expand Up @@ -233,7 +231,7 @@ public void testBasic() throws Exception {
elector, "shard2", "collection1", "dummynode1", props, zkController);
elector.setup(context);
elector.joinElection(context, false);
String urlScheme = zkStateReader.getClusterProperty(URL_SCHEME, "http");
String urlScheme = zkStateReader.getUrlScheme();
assertEquals(urlScheme + "://127.0.0.1:80/solr/", getLeaderUrl("collection1", "shard2"));
}

Expand All @@ -259,7 +257,7 @@ public void testCancelElection() throws Exception {

Thread.sleep(1000);

String urlScheme = zkStateReader.getClusterProperty(URL_SCHEME, "http");
String urlScheme = zkStateReader.getUrlScheme();
String url1 = Utils.getBaseUrlForNodeName("127.0.0.1:80_solr", urlScheme) + "/1/";
String url2 = Utils.getBaseUrlForNodeName("127.0.0.1:80_solr", urlScheme) + "/2/";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@

package org.apache.solr.cloud;

import static org.apache.solr.common.cloud.ZkStateReader.HTTP;
import static org.apache.solr.common.cloud.ZkStateReader.URL_SCHEME;

import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.net.URI;
Expand All @@ -39,7 +36,6 @@
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.embedded.JettySolrRunner;
import org.apache.solr.util.SocketProxy;
Expand Down Expand Up @@ -79,10 +75,7 @@ public static void tearDownCluster() {

@Before
public void setupTest() throws Exception {
configureCluster(NODE_COUNT)
.withProperty(ZkStateReader.URL_SCHEME, System.getProperty(URL_SCHEME, HTTP))
.addConfig("conf", configset("cloud-minimal"))
.configure();
configureCluster(NODE_COUNT).addConfig("conf", configset("cloud-minimal")).configure();

// Add proxies
proxies = new HashMap<>(cluster.getJettySolrRunners().size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
import org.apache.solr.embedded.JettyConfig;
import org.apache.solr.embedded.JettySolrRunner;
Expand Down Expand Up @@ -71,7 +70,7 @@ public class TestMiniSolrCloudClusterSSL extends SolrTestCaseJ4 {
}

private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

private static final String SOLR_SSL_ENABLED = "solr.ssl.enabled";
public static final int NUM_SERVERS = 3;
public static final String CONF_NAME = MethodHandles.lookup().lookupClass().getName();

Expand All @@ -86,14 +85,14 @@ public void before() {
"NOTE: This Test ignores the randomized SSL & clientAuth settings selected by base class");
HttpClientUtil.resetHttpClientBuilder(); // also resets SocketFactoryRegistryProvider
HttpJettySolrClient.resetSslContextFactory();
System.clearProperty(ZkStateReader.URL_SCHEME);
System.clearProperty(SOLR_SSL_ENABLED);
}

@After
public void after() {
HttpClientUtil.resetHttpClientBuilder(); // also resets SocketFactoryRegistryProvider
HttpJettySolrClient.resetSslContextFactory();
System.clearProperty(ZkStateReader.URL_SCHEME);
System.clearProperty(SOLR_SSL_ENABLED);
SSLContext.setDefault(DEFAULT_SSL_CONTEXT);
}

Expand All @@ -102,7 +101,7 @@ public void testNoSsl() throws Exception {
HttpClientUtil.setSocketFactoryRegistryProvider(
sslConfig.buildClientSocketFactoryRegistryProvider()); // must be reset
HttpJettySolrClient.setDefaultSSLConfig(sslConfig.buildClientSSLConfig()); // must be reset
System.setProperty(ZkStateReader.URL_SCHEME, "http");
System.setProperty(SOLR_SSL_ENABLED, "false");
checkClusterWithNodeReplacement(sslConfig);
}

Expand All @@ -114,7 +113,7 @@ public void testNoSslButSillyClientAuth() throws Exception {
HttpClientUtil.setSocketFactoryRegistryProvider(
sslConfig.buildClientSocketFactoryRegistryProvider());
HttpJettySolrClient.setDefaultSSLConfig(sslConfig.buildClientSSLConfig());
System.setProperty(ZkStateReader.URL_SCHEME, "http");
System.setProperty(SOLR_SSL_ENABLED, "false");
checkClusterWithNodeReplacement(sslConfig);
}

Expand All @@ -123,7 +122,7 @@ public void testSslAndNoClientAuth() throws Exception {
HttpClientUtil.setSocketFactoryRegistryProvider(
sslConfig.buildClientSocketFactoryRegistryProvider());
HttpJettySolrClient.setDefaultSSLConfig(sslConfig.buildClientSSLConfig());
System.setProperty(ZkStateReader.URL_SCHEME, "https");
System.setProperty(SOLR_SSL_ENABLED, "true");
checkClusterWithNodeReplacement(sslConfig);
}

Expand All @@ -135,7 +134,7 @@ public void testSslAndClientAuth() throws Exception {
HttpClientUtil.setSocketFactoryRegistryProvider(
sslConfig.buildClientSocketFactoryRegistryProvider());
HttpJettySolrClient.setDefaultSSLConfig(sslConfig.buildClientSSLConfig());
System.setProperty(ZkStateReader.URL_SCHEME, "https");
System.setProperty(SOLR_SSL_ENABLED, "true");
checkClusterWithNodeReplacement(sslConfig);
}

Expand All @@ -144,7 +143,7 @@ public void testSslWithCheckPeerName() throws Exception {
HttpClientUtil.setSocketFactoryRegistryProvider(
sslConfig.buildClientSocketFactoryRegistryProvider());
HttpJettySolrClient.setDefaultSSLConfig(sslConfig.buildClientSSLConfig());
System.setProperty(ZkStateReader.URL_SCHEME, "https");
System.setProperty(SOLR_SSL_ENABLED, "true");
checkClusterWithNodeReplacement(sslConfig);
}

Expand Down Expand Up @@ -193,7 +192,7 @@ public void testSslWithInvalidPeerName() throws Exception {
HttpClientUtil.setSocketFactoryRegistryProvider(
sslConfig.buildClientSocketFactoryRegistryProvider());
HttpJettySolrClient.setDefaultSSLConfig(sslConfig.buildClientSSLConfig());
System.setProperty(ZkStateReader.URL_SCHEME, "https");
System.setProperty(SOLR_SSL_ENABLED, "true");
final JettyConfig config =
JettyConfig.builder().withSSLConfig(sslConfig.buildServerSSLConfig()).build();
final MiniSolrCloudCluster cluster =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -995,4 +995,23 @@ public void testFetchLowestSolrVersion_noLiveNodes() throws Exception {
var lowestVersion = reader.fetchLowestSolrVersion();
assertFalse("Expected no lowest version when no live nodes exist", lowestVersion.isPresent());
}

public void testGetUrlScheme_validSystemProperty() {
String expectedUrlScheme = isSSLMode() ? "https" : "http";
assertEquals(expectedUrlScheme, fixture.reader.getUrlScheme());
}

public void testGetUrlScheme_noClusterAndSystemProperty() {
// By default, the base class sets the system property for ssl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rather than the flip flop... you could just add an assumeFalse(isSSLMode()) -- thus effectively disable the test sometimes

if (isSSLMode()) {
System.clearProperty("solr.ssl.enabled");
}
try {
assertEquals("http", fixture.reader.getUrlScheme());
} finally {
if (isSSLMode()) {
System.setProperty("solr.ssl.enabled", "true");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,4 @@
<str name="coreRootDirectory">cores/</str>
<str name="configSetBaseDir"></str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
</shardHandlerFactory>

</solr>
1 change: 0 additions & 1 deletion solr/modules/cuvs/src/test-files/solr/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
<str name="coreRootDirectory">${coreRootDirectory:.}</str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
1 change: 0 additions & 1 deletion solr/modules/language-models/src/test-files/solr/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
<str name="coreRootDirectory">${coreRootDirectory:.}</str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
1 change: 0 additions & 1 deletion solr/modules/ltr/src/test-files/solr/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
<str name="coreRootDirectory">${coreRootDirectory:.}</str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
1 change: 0 additions & 1 deletion solr/modules/opentelemetry/src/test-files/solr/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
<str name="allowUrls">${solr.tests.security.allow.urls:}</str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
1 change: 0 additions & 1 deletion solr/solrj-streaming/src/test-files/solrj/solr/solr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
<str name="allowUrls">${solr.tests.security.allow.urls:}</str>

<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
<int name="socketTimeout">${socketTimeout:90000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
Expand Down
Loading
Loading