ConfX created HADOOP-18815:
------------------------------
Summary: unnecessary NullPointerException encountered when
starting HttpServer2 with prometheus enabled
Key: HADOOP-18815
URL: https://issues.apache.org/jira/browse/HADOOP-18815
Project: Hadoop Common
Issue Type: Bug
Reporter: ConfX
Attachments: reproduce.sh
h2. What happened?
Attempt to start an {{HttpServer2}} failed due to an NPE thrown in
{{{}MetricsSystemImpl{}}}.
h2. Where's the bug?
In line 1278 of {{{}HttpServer2{}}}, if the support for prometheus is enabled
the server registers a prometheus sink:
{noformat}
if (prometheusSupport) {
DefaultMetricsSystem.instance()
.register("prometheus", "Hadoop metrics prometheus exporter",
prometheusMetricsSink);
}{noformat}
However, a problem is that if the MetricsSystemImpl returned by the
DefaultMetricsSystem.instance has not been start nor init, the config of the
metric system would be set to null, thus failing the nullity check at the start
of MetricsSystemImpl.registerSink. A better way of handling this would be to
check in advance if the metric system has been initialized and initialize it if
it has not been initialized.How to reproduce?(1) set
hadoop.prometheus.endpoint.enabled to true (2) run
org.apache.hadoop.http.TestHttpServer#testHttpResonseContainsDenyStacktrace
{noformat}
java.io.IOException: Problem starting http server
...
Caused by: java.lang.NullPointerException: config
at
org.apache.hadoop.thirdparty.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:899)
at
org.apache.hadoop.metrics2.impl.MetricsSystemImpl.registerSink(MetricsSystemImpl.java:298)
at
org.apache.hadoop.metrics2.impl.MetricsSystemImpl.register(MetricsSystemImpl.java:277)
at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:1279)
... 34 more{noformat}
For an easy reproduction, run the reproduce.sh in the attachment.
We are happy to provide a patch if this issue is confirmed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]