From cbfa3f3e988b8a3f142abadfe4f18201b6438ac9 Mon Sep 17 00:00:00 2001 From: Akira Ajisaka Date: Mon, 29 Jul 2019 17:37:26 -0700 Subject: [PATCH] HADOOP-16435. RpcMetrics should not retained forever. Contributed by Zoltan Haindrich. --- .../ipc/metrics/RpcDetailedMetrics.java | 4 +- .../apache/hadoop/ipc/metrics/RpcMetrics.java | 4 +- .../hadoop/ipc/metrics/TestRpcMetrics.java | 60 +++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/metrics/TestRpcMetrics.java diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcDetailedMetrics.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcDetailedMetrics.java index 6461b186a4..67ae4cc4f9 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcDetailedMetrics.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcDetailedMetrics.java @@ -82,5 +82,7 @@ public void addDeferredProcessingTime(String name, long processingTime) { * Shutdown the instrumentation for the process */ //@Override // some instrumentation interface - public void shutdown() {} + public void shutdown() { + DefaultMetricsSystem.instance().unregisterSource(name); + } } diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcMetrics.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcMetrics.java index 06f9244f18..bb4bfcfd08 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcMetrics.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/metrics/RpcMetrics.java @@ -182,7 +182,9 @@ public void incrAuthorizationFailures() { * Shutdown the instrumentation for the process */ //@Override - public void shutdown() {} + public void shutdown() { + DefaultMetricsSystem.instance().unregisterSource(name); + } /** * Increment sent bytes by count diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/metrics/TestRpcMetrics.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/metrics/TestRpcMetrics.java new file mode 100644 index 0000000000..1716433411 --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/metrics/TestRpcMetrics.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.ipc.metrics; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.io.LongWritable; +import org.apache.hadoop.io.Writable; +import org.apache.hadoop.ipc.RPC; +import org.apache.hadoop.ipc.Server; +import org.apache.hadoop.metrics2.MetricsSystem; +import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; +import org.junit.Test; + +public class TestRpcMetrics { + + @Test + public void metricsAreUnregistered() throws Exception { + + Configuration conf = new Configuration(); + Server server = new Server("0.0.0.0", 0, LongWritable.class, 1, conf) { + @Override + public Writable call( + RPC.RpcKind rpcKind, String protocol, Writable param, + long receiveTime) throws Exception { + return null; + } + }; + MetricsSystem metricsSystem = DefaultMetricsSystem.instance(); + RpcMetrics rpcMetrics = server.getRpcMetrics(); + RpcDetailedMetrics rpcDetailedMetrics = server.getRpcDetailedMetrics(); + + assertNotNull(metricsSystem.getSource(rpcMetrics.name())); + assertNotNull(metricsSystem.getSource(rpcDetailedMetrics.name())); + + server.stop(); + + assertNull(metricsSystem.getSource(rpcMetrics.name())); + assertNull(metricsSystem.getSource(rpcDetailedMetrics.name())); + + } + +}