Skip to content

Commit b36f292

Browse files
committed
HADOOP-11301. [optionally] update jmx cache to drop old metrics (Maysam Yabandeh via stack) -- REAPPLY ekoontz#2
1 parent 692d3b8 commit b36f292

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

hadoop-common-project/hadoop-common/CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,9 @@ Release 2.7.0 - UNRELEASED
404404

405405
HADOOP-11341. KMS support for whitelist key ACLs. (Arun Suresh via wang)
406406

407+
HADOOP-11301. [optionally] update jmx cache to drop old metrics
408+
(Maysam Yabandeh via stack)
409+
407410
OPTIMIZATIONS
408411

409412
HADOOP-11323. WritableComparator#compare keeps reference to byte array.

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSourceAdapter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,8 @@ private void updateJmxCache() {
173173
}
174174

175175
synchronized(this) {
176-
int oldCacheSize = attrCache.size();
177-
int newCacheSize = updateAttrCache();
178-
if (oldCacheSize < newCacheSize) {
176+
updateAttrCache();
177+
if (getAllMetrics) {
179178
updateInfoCache();
180179
}
181180
jmxCacheTS = Time.now();

hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSourceAdapter.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.ArrayList;
2424
import java.util.List;
2525

26+
import org.apache.hadoop.metrics2.MetricsCollector;
27+
import org.apache.hadoop.metrics2.MetricsRecordBuilder;
2628
import org.apache.hadoop.metrics2.MetricsSource;
2729
import org.apache.hadoop.metrics2.MetricsTag;
2830
import org.apache.hadoop.metrics2.annotation.Metric;
@@ -31,10 +33,59 @@
3133
import org.apache.hadoop.metrics2.lib.MetricsRegistry;
3234
import org.apache.hadoop.metrics2.lib.MetricsSourceBuilder;
3335
import org.apache.hadoop.metrics2.lib.MutableCounterLong;
36+
import static org.apache.hadoop.metrics2.lib.Interns.info;
37+
import static org.junit.Assert.assertEquals;
38+
3439
import org.junit.Test;
3540

41+
import javax.management.MBeanAttributeInfo;
42+
import javax.management.MBeanInfo;
43+
3644
public class TestMetricsSourceAdapter {
3745

46+
47+
@Test
48+
public void testPurgeOldMetrics() throws Exception {
49+
// create test source with a single metric counter of value 1
50+
PurgableSource source = new PurgableSource();
51+
MetricsSourceBuilder sb = MetricsAnnotations.newSourceBuilder(source);
52+
final MetricsSource s = sb.build();
53+
54+
List<MetricsTag> injectedTags = new ArrayList<MetricsTag>();
55+
MetricsSourceAdapter sa = new MetricsSourceAdapter(
56+
"tst", "tst", "testdesc", s, injectedTags, null, null, 1, false);
57+
58+
MBeanInfo info = sa.getMBeanInfo();
59+
boolean sawIt = false;
60+
for (MBeanAttributeInfo mBeanAttributeInfo : info.getAttributes()) {
61+
sawIt |= mBeanAttributeInfo.getName().equals(source.lastKeyName);
62+
};
63+
assertTrue("The last generated metric is not exported to jmx", sawIt);
64+
65+
Thread.sleep(1000); // skip JMX cache TTL
66+
67+
info = sa.getMBeanInfo();
68+
sawIt = false;
69+
for (MBeanAttributeInfo mBeanAttributeInfo : info.getAttributes()) {
70+
sawIt |= mBeanAttributeInfo.getName().equals(source.lastKeyName);
71+
};
72+
assertTrue("The last generated metric is not exported to jmx", sawIt);
73+
}
74+
75+
//generate a new key per each call
76+
class PurgableSource implements MetricsSource {
77+
int nextKey = 0;
78+
String lastKeyName = null;
79+
@Override
80+
public void getMetrics(MetricsCollector collector, boolean all) {
81+
MetricsRecordBuilder rb =
82+
collector.addRecord("purgablesource")
83+
.setContext("test");
84+
lastKeyName = "key" + nextKey++;
85+
rb.addGauge(info(lastKeyName, "desc"), 1);
86+
}
87+
}
88+
3889
@Test
3990
public void testGetMetricsAndJmx() throws Exception {
4091
// create test source with a single metric counter of value 0

0 commit comments

Comments
 (0)