You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by st...@apache.org on 2014/12/02 07:48:44 UTC
hadoop git commit: HBASE-11301 [optionally] update jmx cache to drop
old metrics (Maysam Yabandeh via stack) -- REAPPLY
Repository: hadoop
Updated Branches:
refs/heads/trunk 4e312a434 -> 74f4d8590
HBASE-11301 [optionally] update jmx cache to drop old metrics (Maysam Yabandeh via stack) -- REAPPLY
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/74f4d859
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/74f4d859
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/74f4d859
Branch: refs/heads/trunk
Commit: 74f4d8590de85eaa92c711010bbc0ff0e33ee2e8
Parents: 4e312a4
Author: stack <st...@duboce.net>
Authored: Mon Dec 1 22:46:57 2014 -0800
Committer: stack <st...@duboce.net>
Committed: Mon Dec 1 22:46:57 2014 -0800
----------------------------------------------------------------------
hadoop-common-project/hadoop-common/CHANGES.txt | 3 ++
.../metrics2/impl/MetricsSourceAdapter.java | 5 +-
.../metrics2/impl/TestMetricsSourceAdapter.java | 51 ++++++++++++++++++++
3 files changed, 56 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/74f4d859/hadoop-common-project/hadoop-common/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt
index b90573e..5e4caa0 100644
--- a/hadoop-common-project/hadoop-common/CHANGES.txt
+++ b/hadoop-common-project/hadoop-common/CHANGES.txt
@@ -404,6 +404,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-11341. KMS support for whitelist key ACLs. (Arun Suresh via wang)
+ HADOOP-11301. [optionally] update jmx cache to drop old metrics
+ (Maysam Yabandeh via stack)
+
OPTIMIZATIONS
HADOOP-11323. WritableComparator#compare keeps reference to byte array.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/74f4d859/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSourceAdapter.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSourceAdapter.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSourceAdapter.java
index cf11e6d..cae9c3d 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSourceAdapter.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSourceAdapter.java
@@ -173,9 +173,8 @@ class MetricsSourceAdapter implements DynamicMBean {
}
synchronized(this) {
- int oldCacheSize = attrCache.size();
- int newCacheSize = updateAttrCache();
- if (oldCacheSize < newCacheSize) {
+ updateAttrCache();
+ if (getAllMetrics) {
updateInfoCache();
}
jmxCacheTS = Time.now();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/74f4d859/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSourceAdapter.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSourceAdapter.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSourceAdapter.java
index 724d449..22b594a 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSourceAdapter.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSourceAdapter.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
+import org.apache.hadoop.metrics2.MetricsCollector;
+import org.apache.hadoop.metrics2.MetricsRecordBuilder;
import org.apache.hadoop.metrics2.MetricsSource;
import org.apache.hadoop.metrics2.MetricsTag;
import org.apache.hadoop.metrics2.annotation.Metric;
@@ -31,10 +33,59 @@ import org.apache.hadoop.metrics2.lib.MetricsAnnotations;
import org.apache.hadoop.metrics2.lib.MetricsRegistry;
import org.apache.hadoop.metrics2.lib.MetricsSourceBuilder;
import org.apache.hadoop.metrics2.lib.MutableCounterLong;
+import static org.apache.hadoop.metrics2.lib.Interns.info;
+import static org.junit.Assert.assertEquals;
+
import org.junit.Test;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+
public class TestMetricsSourceAdapter {
+
+ @Test
+ public void testPurgeOldMetrics() throws Exception {
+ // create test source with a single metric counter of value 1
+ PurgableSource source = new PurgableSource();
+ MetricsSourceBuilder sb = MetricsAnnotations.newSourceBuilder(source);
+ final MetricsSource s = sb.build();
+
+ List<MetricsTag> injectedTags = new ArrayList<MetricsTag>();
+ MetricsSourceAdapter sa = new MetricsSourceAdapter(
+ "tst", "tst", "testdesc", s, injectedTags, null, null, 1, false);
+
+ MBeanInfo info = sa.getMBeanInfo();
+ boolean sawIt = false;
+ for (MBeanAttributeInfo mBeanAttributeInfo : info.getAttributes()) {
+ sawIt |= mBeanAttributeInfo.getName().equals(source.lastKeyName);
+ };
+ assertTrue("The last generated metric is not exported to jmx", sawIt);
+
+ Thread.sleep(1000); // skip JMX cache TTL
+
+ info = sa.getMBeanInfo();
+ sawIt = false;
+ for (MBeanAttributeInfo mBeanAttributeInfo : info.getAttributes()) {
+ sawIt |= mBeanAttributeInfo.getName().equals(source.lastKeyName);
+ };
+ assertTrue("The last generated metric is not exported to jmx", sawIt);
+ }
+
+ //generate a new key per each call
+ class PurgableSource implements MetricsSource {
+ int nextKey = 0;
+ String lastKeyName = null;
+ @Override
+ public void getMetrics(MetricsCollector collector, boolean all) {
+ MetricsRecordBuilder rb =
+ collector.addRecord("purgablesource")
+ .setContext("test");
+ lastKeyName = "key" + nextKey++;
+ rb.addGauge(info(lastKeyName, "desc"), 1);
+ }
+ }
+
@Test
public void testGetMetricsAndJmx() throws Exception {
// create test source with a single metric counter of value 0