You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 10:02:31 UTC
[lucene] 13/15: SOLR-12594: MetricsHistoryHandler.getOverseerLeader
fails when hostname contains hyphen.
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch branch_7_4
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit c205d5ac133cd516ab7602588e8e16b9bd1dd9b5
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Aug 2 18:47:58 2018 +0200
SOLR-12594: MetricsHistoryHandler.getOverseerLeader fails when hostname contains hyphen.
---
solr/CHANGES.txt | 1 +
.../org/apache/solr/handler/admin/MetricsHistoryHandler.java | 11 +++++++----
.../solr/metrics/reporters/solr/SolrClusterReporter.java | 11 +++++++----
.../org/apache/solr/metrics/rrd/SolrRrdBackendFactory.java | 9 +++++++--
.../apache/solr/handler/admin/MetricsHistoryHandlerTest.java | 2 +-
5 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index ae65ca9..e031271 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -35,6 +35,7 @@ Bug Fixes
* SOLR-12570: OpenNLPExtractNamedEntitiesUpdateProcessor cannot support multi fields because pattern replacement
doesn't work correctly. (Koji Sekiguchi)
+* SOLR-12594: MetricsHistoryHandler.getOverseerLeader fails when hostname contains hyphen. (ab)
================== 7.4.0 ==================
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
index 419f021..9a46d04 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
@@ -62,6 +62,7 @@ import org.apache.solr.client.solrj.cloud.SolrCloudManager;
import org.apache.solr.client.solrj.cloud.autoscaling.ReplicaInfo;
import org.apache.solr.client.solrj.cloud.autoscaling.VersionedData;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
+import org.apache.solr.cloud.LeaderElector;
import org.apache.solr.cloud.Overseer;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ClusterState;
@@ -332,12 +333,14 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
if (oid == null) {
return null;
}
- String[] ids = oid.split("-");
- if (ids.length != 3) { // unknown format
- log.warn("Unknown format of leader id, skipping: " + oid);
+ String nodeName = null;
+ try {
+ nodeName = LeaderElector.getNodeName(oid);
+ } catch (Exception e) {
+ log.warn("Unknown format of leader id, skipping: " + oid, e);
return null;
}
- return ids[1];
+ return nodeName;
}
private boolean amIOverseerLeader() {
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
index 9e8861e..17390e1 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import org.apache.http.client.HttpClient;
+import org.apache.solr.cloud.LeaderElector;
import org.apache.solr.cloud.Overseer;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.cloud.SolrZkClient;
@@ -270,13 +271,15 @@ public class SolrClusterReporter extends SolrCoreContainerReporter {
if (oid == null) {
return lastKnownUrl;
}
- String[] ids = oid.split("-");
- if (ids.length != 3) { // unknown format
- log.warn("Unknown format of leader id, skipping: " + oid);
+ String nodeName = null;
+ try {
+ nodeName = LeaderElector.getNodeName(oid);
+ } catch (Exception e) {
+ log.warn("Unknown format of leader id, skipping: " + oid, e);
return lastKnownUrl;
}
// convert nodeName back to URL
- String url = zk.getZkStateReader().getBaseUrlForNodeName(ids[1]);
+ String url = zk.getZkStateReader().getBaseUrlForNodeName(nodeName);
// check that it's parseable
try {
new java.net.URL(url);
diff --git a/solr/core/src/java/org/apache/solr/metrics/rrd/SolrRrdBackendFactory.java b/solr/core/src/java/org/apache/solr/metrics/rrd/SolrRrdBackendFactory.java
index a3c6f64..5448d8f 100644
--- a/solr/core/src/java/org/apache/solr/metrics/rrd/SolrRrdBackendFactory.java
+++ b/solr/core/src/java/org/apache/solr/metrics/rrd/SolrRrdBackendFactory.java
@@ -206,7 +206,8 @@ public class SolrRrdBackendFactory extends RrdBackendFactory implements SolrClos
return null;
}
if (o instanceof byte[]) {
- Long time = (Long)doc.getFieldValue("timestamp_l");
+ Object timeObj = doc.getFieldValue("timestamp_l");
+ Long time = timeObj instanceof Number ? ((Number)timeObj).longValue() : Long.parseLong(String.valueOf(timeObj));
return new SolrRrdBackend.SyncData((byte[])o, time);
} else {
throw new SolrServerException("Unexpected value of '" + DATA_FIELD + "' field: " + o.getClass().getName() + ": " + o);
@@ -248,7 +249,11 @@ public class SolrRrdBackendFactory extends RrdBackendFactory implements SolrClos
SolrDocumentList docs = rsp.getResults();
if (docs != null) {
docs.forEach(d -> {
- Long time = (Long)d.getFieldValue("timestamp_l");
+ Object o = d.getFieldValue("timestamp_l");
+ if (o == null) {
+ return;
+ }
+ Long time = o instanceof Number ? ((Number)o).longValue() : Long.parseLong(String.valueOf(o));
Pair<String, Long> p = new Pair<>(((String)d.getFieldValue("id")).substring(idPrefixLength), time);
byName.put(p.first(), p);
});
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java
index 7c84c16..735b427 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java
@@ -58,7 +58,7 @@ public class MetricsHistoryHandlerTest extends SolrCloudTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
- simulated = random().nextBoolean() || true;
+ simulated = random().nextBoolean();
Map<String, Object> args = new HashMap<>();
args.put(MetricsHistoryHandler.SYNC_PERIOD_PROP, 1);
args.put(MetricsHistoryHandler.COLLECT_PERIOD_PROP, 1);