Skip to content

Commit d0860c1

Browse files
committed
HADOOP-9467. Metrics2 record filter should check name as well as tags. (Ganeshan Iyler via llu)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1466377 13f79535-47bb-0310-9956-ffa450edef68
1 parent b9d6da8 commit d0860c1

File tree

3 files changed

+67
-1
lines changed

3 files changed

+67
-1
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,9 @@ Release 2.0.4-alpha - UNRELEASED
629629

630630
BUG FIXES
631631

632+
HADOOP-9467. Metrics2 record filter should check name as well as tags.
633+
(Ganeshan Iyler via llu)
634+
632635
HADOOP-9406. hadoop-client leaks dependency on JDK tools jar. (tucu)
633636

634637
HADOOP-9301. hadoop client servlet/jsp/jetty/tomcat JARs creating

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public abstract class MetricsFilter implements MetricsPlugin {
5757
* @return true to accept; false otherwise.
5858
*/
5959
public boolean accepts(MetricsRecord record) {
60-
return accepts(record.tags());
60+
return accepts(record.name()) && accepts(record.tags());
6161
}
6262

6363
}

hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/filter/TestPatternFilter.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import org.apache.commons.configuration.SubsetConfiguration;
2525
import org.junit.Test;
2626
import static org.junit.Assert.*;
27+
import static org.mockito.Mockito.*;
2728

29+
import org.apache.hadoop.metrics2.MetricsRecord;
2830
import org.apache.hadoop.metrics2.MetricsTag;
2931
import org.apache.hadoop.metrics2.impl.ConfigBuilder;
3032
import static org.apache.hadoop.metrics2.lib.Interns.*;
@@ -38,6 +40,8 @@ public class TestPatternFilter {
3840
SubsetConfiguration empty = new ConfigBuilder().subset("");
3941
shouldAccept(empty, "anything");
4042
shouldAccept(empty, Arrays.asList(tag("key", "desc", "value")));
43+
shouldAccept(empty, mockMetricsRecord("anything", Arrays.asList(
44+
tag("key", "desc", "value"))));
4145
}
4246

4347
/**
@@ -50,9 +54,15 @@ public class TestPatternFilter {
5054
shouldAccept(wl, "foo");
5155
shouldAccept(wl, Arrays.asList(tag("bar", "", ""),
5256
tag("foo", "", "f")));
57+
shouldAccept(wl, mockMetricsRecord("foo", Arrays.asList(
58+
tag("bar", "", ""), tag("foo", "", "f"))));
5359
shouldReject(wl, "bar");
5460
shouldReject(wl, Arrays.asList(tag("bar", "", "")));
5561
shouldReject(wl, Arrays.asList(tag("foo", "", "boo")));
62+
shouldReject(wl, mockMetricsRecord("bar", Arrays.asList(
63+
tag("foo", "", "f"))));
64+
shouldReject(wl, mockMetricsRecord("foo", Arrays.asList(
65+
tag("bar", "", ""))));
5666
}
5767

5868
/**
@@ -64,9 +74,15 @@ public class TestPatternFilter {
6474
.add("p.exclude.tags", "foo:f").subset("p");
6575
shouldAccept(bl, "bar");
6676
shouldAccept(bl, Arrays.asList(tag("bar", "", "")));
77+
shouldAccept(bl, mockMetricsRecord("bar", Arrays.asList(
78+
tag("bar", "", ""))));
6779
shouldReject(bl, "foo");
6880
shouldReject(bl, Arrays.asList(tag("bar", "", ""),
6981
tag("foo", "", "f")));
82+
shouldReject(bl, mockMetricsRecord("foo", Arrays.asList(
83+
tag("bar", "", ""))));
84+
shouldReject(bl, mockMetricsRecord("bar", Arrays.asList(
85+
tag("bar", "", ""), tag("foo", "", "f"))));
7086
}
7187

7288
/**
@@ -81,10 +97,18 @@ public class TestPatternFilter {
8197
.add("p.exclude.tags", "bar:b").subset("p");
8298
shouldAccept(c, "foo");
8399
shouldAccept(c, Arrays.asList(tag("foo", "", "f")));
100+
shouldAccept(c, mockMetricsRecord("foo", Arrays.asList(
101+
tag("foo", "", "f"))));
84102
shouldReject(c, "bar");
85103
shouldReject(c, Arrays.asList(tag("bar", "", "b")));
104+
shouldReject(c, mockMetricsRecord("bar", Arrays.asList(
105+
tag("foo", "", "f"))));
106+
shouldReject(c, mockMetricsRecord("foo", Arrays.asList(
107+
tag("bar", "", "b"))));
86108
shouldAccept(c, "foobar");
87109
shouldAccept(c, Arrays.asList(tag("foobar", "", "")));
110+
shouldAccept(c, mockMetricsRecord("foobar", Arrays.asList(
111+
tag("foobar", "", ""))));
88112
}
89113

90114
/**
@@ -98,6 +122,8 @@ public class TestPatternFilter {
98122
.add("p.exclude.tags", "foo:f").subset("p");
99123
shouldAccept(c, "foo");
100124
shouldAccept(c, Arrays.asList(tag("foo", "", "f")));
125+
shouldAccept(c, mockMetricsRecord("foo", Arrays.asList(
126+
tag("foo", "", "f"))));
101127
}
102128

103129
static void shouldAccept(SubsetConfiguration conf, String s) {
@@ -110,6 +136,17 @@ static void shouldAccept(SubsetConfiguration conf, List<MetricsTag> tags) {
110136
assertTrue("accepts "+ tags, newRegexFilter(conf).accepts(tags));
111137
}
112138

139+
/**
140+
* Asserts that filters with the given configuration accept the given record.
141+
*
142+
* @param conf SubsetConfiguration containing filter configuration
143+
* @param record MetricsRecord to check
144+
*/
145+
static void shouldAccept(SubsetConfiguration conf, MetricsRecord record) {
146+
assertTrue("accepts " + record, newGlobFilter(conf).accepts(record));
147+
assertTrue("accepts " + record, newRegexFilter(conf).accepts(record));
148+
}
149+
113150
static void shouldReject(SubsetConfiguration conf, String s) {
114151
assertTrue("rejects "+ s, !newGlobFilter(conf).accepts(s));
115152
assertTrue("rejects "+ s, !newRegexFilter(conf).accepts(s));
@@ -120,6 +157,17 @@ static void shouldReject(SubsetConfiguration conf, List<MetricsTag> tags) {
120157
assertTrue("rejects "+ tags, !newRegexFilter(conf).accepts(tags));
121158
}
122159

160+
/**
161+
* Asserts that filters with the given configuration reject the given record.
162+
*
163+
* @param conf SubsetConfiguration containing filter configuration
164+
* @param record MetricsRecord to check
165+
*/
166+
static void shouldReject(SubsetConfiguration conf, MetricsRecord record) {
167+
assertTrue("rejects " + record, !newGlobFilter(conf).accepts(record));
168+
assertTrue("rejects " + record, !newRegexFilter(conf).accepts(record));
169+
}
170+
123171
/**
124172
* Create a new glob filter with a config object
125173
* @param conf the config object
@@ -141,4 +189,19 @@ public static RegexFilter newRegexFilter(SubsetConfiguration conf) {
141189
f.init(conf);
142190
return f;
143191
}
192+
193+
/**
194+
* Creates a mock MetricsRecord with the given name and tags.
195+
*
196+
* @param name String name
197+
* @param tags List<MetricsTag> tags
198+
* @return MetricsRecord newly created mock
199+
*/
200+
private static MetricsRecord mockMetricsRecord(String name,
201+
List<MetricsTag> tags) {
202+
MetricsRecord record = mock(MetricsRecord.class);
203+
when(record.name()).thenReturn(name);
204+
when(record.tags()).thenReturn(tags);
205+
return record;
206+
}
144207
}

0 commit comments

Comments
 (0)