You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2020/07/29 08:58:19 UTC
[lucene-solr] branch branch_8_6 updated: SOLR-14671: Parsing
dynamic ZK config sometimes cause NuberFormatException (#1701)
This is an automated email from the ASF dual-hosted git repository.
janhoy pushed a commit to branch branch_8_6
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8_6 by this push:
new 8fdf54a SOLR-14671: Parsing dynamic ZK config sometimes cause NuberFormatException (#1701)
8fdf54a is described below
commit 8fdf54a746afdfba8c640fc2db14ca4c9cd13556
Author: Jan Høydahl <ja...@users.noreply.github.com>
AuthorDate: Wed Jul 29 10:33:02 2020 +0200
SOLR-14671: Parsing dynamic ZK config sometimes cause NuberFormatException (#1701)
(cherry picked from commit ebb5219b1b7d7baba9af6653f946cc1c66b40a93)
---
solr/CHANGES.txt | 2 ++
.../org/apache/solr/handler/admin/ZookeeperStatusHandler.java | 11 +++++++++--
.../org/apache/solr/common/cloud/ZkDynamicConfigTest.java | 9 ++++++++-
.../java/org/apache/solr/common/cloud/ZkDynamicConfig.java | 3 ++-
4 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 288c5dd..e069caf 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -14,6 +14,8 @@ Bug Fixes
* SOLR-14665: Revert SOLR-12845 adding of default autoscaling cluster policy, due to performance
issues. (Ishan Chattopadhyaya, Houston Putman, ab)
+* SOLR-14671: Parsing dynamic ZK config sometimes cause NumberFormatException (janhoy)
+
================== 8.6.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperStatusHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperStatusHandler.java
index 58d827c..c0db4a7 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperStatusHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperStatusHandler.java
@@ -112,7 +112,8 @@ public class ZookeeperStatusHandler extends RequestHandlerBase {
.map(h -> h.resolveClientPortAddress() + ":" + h.clientPort)
.sorted().collect(Collectors.toList());
List<String> dynamicHosts = zkDynamicConfig.getServers().stream()
- .map(h -> h.resolveClientPortAddress() + ":" + h.clientPort)
+ .map(h -> h.resolveClientPortAddress() + ":" +
+ (h.clientPort != null ? h.clientPort : hostsFromConnectionString.getServers().get(0).clientPort))
.sorted().collect(Collectors.toList());
if (!connStringHosts.containsAll(dynamicHosts)) {
errors.add("Your ZK connection string (" + connStringHosts.size() + " hosts) is different from the " +
@@ -120,7 +121,13 @@ public class ZookeeperStatusHandler extends RequestHandlerBase {
"dynamic reconfiguration and will only be able to connect to the zk hosts in your connection string.");
status = STATUS_YELLOW;
}
- zookeepers = zkDynamicConfig; // Clone input
+ if (zkDynamicConfig.getServers().get(0).clientPort != null) {
+ // If we have dynamic config with client ports, use this list to iterate servers
+ zookeepers = zkDynamicConfig;
+ } else {
+ // Use list from connection string since client port is missing on dynamic config from ZK
+ zookeepers = hostsFromConnectionString;
+ }
}
final Map<String, Object> zkStatus = new HashMap<>();
final List<Object> details = new ArrayList<>();
diff --git a/solr/core/src/test/org/apache/solr/common/cloud/ZkDynamicConfigTest.java b/solr/core/src/test/org/apache/solr/common/cloud/ZkDynamicConfigTest.java
index 87b4772..55e9354 100644
--- a/solr/core/src/test/org/apache/solr/common/cloud/ZkDynamicConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/common/cloud/ZkDynamicConfigTest.java
@@ -29,8 +29,9 @@ public class ZkDynamicConfigTest extends SolrTestCaseJ4 {
"server.1=zoo1:2780:2783:participant;0.0.0.0:2181\n" +
"server.2=zoo2:2781:2784:participant|zoo3:2783;2181\n" +
"server.3=zoo3:2782:2785;zoo3-client:2181\n" +
+ "server.4=zoo4:2783:2786:participant\n" + // this assumes clientPort specified in static config
"version=400000003");
- assertEquals(3, parsed.size());
+ assertEquals(4, parsed.size());
assertEquals("zoo1", parsed.getServers().get(0).address);
assertEquals(Integer.valueOf(2780), parsed.getServers().get(0).leaderPort);
@@ -50,6 +51,12 @@ public class ZkDynamicConfigTest extends SolrTestCaseJ4 {
assertNull(parsed.getServers().get(2).role);
assertEquals("zoo3-client", parsed.getServers().get(2).clientPortAddress);
assertEquals("zoo3-client", parsed.getServers().get(2).resolveClientPortAddress());
+
+ // client address/port optional if clientPort specified in static config file (back-compat mode)
+ assertEquals("participant", parsed.getServers().get(3).role);
+ assertEquals(null, parsed.getServers().get(3).clientPortAddress);
+ assertEquals("zoo4", parsed.getServers().get(3).resolveClientPortAddress());
+ assertEquals(null, parsed.getServers().get(3).clientPort);
}
@Test(expected = SolrException.class)
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkDynamicConfig.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkDynamicConfig.java
index ad265a3..eae32d8 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkDynamicConfig.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkDynamicConfig.java
@@ -132,6 +132,7 @@ public class ZkDynamicConfig {
if (!m.matches()) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Could not parse dynamic zk config line: " + line);
}
+ String clientPortStr = m.group("clientPort");
return new Server(
Integer.parseInt(m.group("serverId")),
m.group("address"),
@@ -139,7 +140,7 @@ public class ZkDynamicConfig {
Integer.parseInt(m.group("leaderElectionPort")),
m.group("role"),
m.group("clientPortAddress"),
- Integer.parseInt(m.group("clientPort"))
+ clientPortStr != null ? Integer.parseInt(clientPortStr) : null
);
}
}