Author: llu
Date: Wed Apr 10 08:54:42 2013
New Revision: 1466391
URL: http://svn.apache.org/r1466391
Log:
HADOOP-9467. Metrics2 record filter should check name as well as tags.
(Ganeshan Iyler via llu)
Modified:
hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt
hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/metrics2/MetricsFilter.java
hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/metrics2/filter/TestPatternFilter.java
Modified: hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt?rev=1466391&r1=1466390&r2=1466391&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt (original)
+++ hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt Wed Apr 10
08:54:42 2013
@@ -359,3 +359,6 @@ Branch-hadoop-1-win (branched from branc
HDFS-4413. Secondary namenode won't start if HDFS isn't the default
file system. (Mostafa Elhemali via suresh)
+
+ HADOOP-9467. Metrics2 record filter should check name as well as tags.
+ (Ganeshan Iyler via llu)
Modified:
hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/metrics2/MetricsFilter.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/metrics2/MetricsFilter.java?rev=1466391&r1=1466390&r2=1466391&view=diff
==============================================================================
---
hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/metrics2/MetricsFilter.java
(original)
+++
hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/metrics2/MetricsFilter.java
Wed Apr 10 08:54:42 2013
@@ -54,7 +54,7 @@ public abstract class MetricsFilter impl
* @return true to accept; false otherwise.
*/
public boolean accepts(MetricsRecord record) {
- return accepts(record.tags());
+ return accepts(record.name()) && accepts(record.tags());
}
}
Modified:
hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/metrics2/filter/TestPatternFilter.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/metrics2/filter/TestPatternFilter.java?rev=1466391&r1=1466390&r2=1466391&view=diff
==============================================================================
---
hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/metrics2/filter/TestPatternFilter.java
(original)
+++
hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/metrics2/filter/TestPatternFilter.java
Wed Apr 10 08:54:42 2013
@@ -24,7 +24,9 @@ import java.util.List;
import org.apache.commons.configuration.SubsetConfiguration;
import org.junit.Test;
import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+import org.apache.hadoop.metrics2.MetricsRecord;
import org.apache.hadoop.metrics2.MetricsTag;
import org.apache.hadoop.metrics2.impl.ConfigBuilder;
@@ -37,6 +39,8 @@ public class TestPatternFilter {
SubsetConfiguration empty = new ConfigBuilder().subset("");
shouldAccept(empty, "anything");
shouldAccept(empty, Arrays.asList(new MetricsTag("key", "desc", "value")));
+ shouldAccept(empty, mockMetricsRecord("anything", Arrays.asList(
+ new MetricsTag("key", "desc", "value"))));
}
/**
@@ -49,9 +53,16 @@ public class TestPatternFilter {
shouldAccept(wl, "foo");
shouldAccept(wl, Arrays.asList(new MetricsTag("bar", "", ""),
new MetricsTag("foo", "", "f")));
+ shouldAccept(wl, mockMetricsRecord("foo", Arrays.asList(
+ new MetricsTag("bar", "", ""),
+ new MetricsTag("foo", "", "f"))));
shouldReject(wl, "bar");
shouldReject(wl, Arrays.asList(new MetricsTag("bar", "", "")));
shouldReject(wl, Arrays.asList(new MetricsTag("foo", "", "boo")));
+ shouldReject(wl, mockMetricsRecord("bar", Arrays.asList(
+ new MetricsTag("foo", "", "f"))));
+ shouldReject(wl, mockMetricsRecord("foo", Arrays.asList(
+ new MetricsTag("bar", "", ""))));
}
/**
@@ -63,9 +74,16 @@ public class TestPatternFilter {
.add("p.exclude.tags", "foo:f").subset("p");
shouldAccept(bl, "bar");
shouldAccept(bl, Arrays.asList(new MetricsTag("bar", "", "")));
+ shouldAccept(bl, mockMetricsRecord("bar", Arrays.asList(
+ new MetricsTag("bar", "", ""))));
shouldReject(bl, "foo");
shouldReject(bl, Arrays.asList(new MetricsTag("bar", "", ""),
new MetricsTag("foo", "", "f")));
+ shouldReject(bl, mockMetricsRecord("foo", Arrays.asList(
+ new MetricsTag("bar", "", ""))));
+ shouldReject(bl, mockMetricsRecord("bar", Arrays.asList(
+ new MetricsTag("bar", "", ""),
+ new MetricsTag("foo", "", "f"))));
}
/**
@@ -80,10 +98,18 @@ public class TestPatternFilter {
.add("p.exclude.tags", "bar:b").subset("p");
shouldAccept(c, "foo");
shouldAccept(c, Arrays.asList(new MetricsTag("foo", "", "f")));
+ shouldAccept(c, mockMetricsRecord("foo", Arrays.asList(
+ new MetricsTag("foo", "", "f"))));
shouldReject(c, "bar");
shouldReject(c, Arrays.asList(new MetricsTag("bar", "", "b")));
+ shouldReject(c, mockMetricsRecord("bar", Arrays.asList(
+ new MetricsTag("foo", "", "f"))));
+ shouldReject(c, mockMetricsRecord("foo", Arrays.asList(
+ new MetricsTag("bar", "", "b"))));
shouldAccept(c, "foobar");
shouldAccept(c, Arrays.asList(new MetricsTag("foobar", "", "")));
+ shouldAccept(c, mockMetricsRecord("foobar", Arrays.asList(
+ new MetricsTag("foobar", "", ""))));
}
/**
@@ -97,6 +123,8 @@ public class TestPatternFilter {
.add("p.exclude.tags", "foo:f").subset("p");
shouldAccept(c, "foo");
shouldAccept(c, Arrays.asList(new MetricsTag("foo", "", "f")));
+ shouldAccept(c, mockMetricsRecord("foo", Arrays.asList(
+ new MetricsTag("foo", "", "f"))));
}
static void shouldAccept(SubsetConfiguration conf, String s) {
@@ -109,6 +137,17 @@ public class TestPatternFilter {
assertTrue("accepts "+ tags, newRegexFilter(conf).accepts(tags));
}
+ /**
+ * Asserts that filters with the given configuration accept the given record.
+ *
+ * @param conf SubsetConfiguration containing filter configuration
+ * @param record MetricsRecord to check
+ */
+ static void shouldAccept(SubsetConfiguration conf, MetricsRecord record) {
+ assertTrue("accepts " + record, newGlobFilter(conf).accepts(record));
+ assertTrue("accepts " + record, newRegexFilter(conf).accepts(record));
+ }
+
static void shouldReject(SubsetConfiguration conf, String s) {
assertTrue("rejects "+ s, !newGlobFilter(conf).accepts(s));
assertTrue("rejects "+ s, !newRegexFilter(conf).accepts(s));
@@ -120,6 +159,17 @@ public class TestPatternFilter {
}
/**
+ * Asserts that filters with the given configuration reject the given record.
+ *
+ * @param conf SubsetConfiguration containing filter configuration
+ * @param record MetricsRecord to check
+ */
+ static void shouldReject(SubsetConfiguration conf, MetricsRecord record) {
+ assertTrue("rejects " + record, !newGlobFilter(conf).accepts(record));
+ assertTrue("rejects " + record, !newRegexFilter(conf).accepts(record));
+ }
+
+ /**
* Create a new glob filter with a config object
* @param conf the config object
* @return the filter
@@ -140,4 +190,19 @@ public class TestPatternFilter {
f.init(conf);
return f;
}
+
+ /**
+ * Creates a mock MetricsRecord with the given name and tags.
+ *
+ * @param name String name
+ * @param tags List<MetricsTag> tags
+ * @return MetricsRecord newly created mock
+ */
+ private static MetricsRecord mockMetricsRecord(String name,
+ List<MetricsTag> tags) {
+ MetricsRecord record = mock(MetricsRecord.class);
+ when(record.name()).thenReturn(name);
+ when(record.tags()).thenReturn(tags);
+ return record;
+ }
}