Skip to content

Commit ce51048

Browse files
Joeysteveloughran
authored andcommitted
HADOOP-16925. MetricsConfig incorrectly loads the configuration whose value is String list in the properties file (#1896)
Contributed by Jiayi Liu
1 parent 033a8bd commit ce51048

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.commons.configuration2.Configuration;
3838
import org.apache.commons.configuration2.PropertiesConfiguration;
3939
import org.apache.commons.configuration2.SubsetConfiguration;
40+
import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
4041
import org.apache.commons.configuration2.ex.ConfigurationException;
4142
import org.apache.commons.configuration2.io.FileHandler;
4243
import org.apache.hadoop.metrics2.MetricsFilter;
@@ -111,6 +112,7 @@ static MetricsConfig loadFirst(String prefix, String... fileNames) {
111112
for (String fname : fileNames) {
112113
try {
113114
PropertiesConfiguration pcf = new PropertiesConfiguration();
115+
pcf.setListDelimiterHandler(new DefaultListDelimiterHandler(','));
114116
FileHandler fh = new FileHandler(pcf);
115117
fh.setFileName(fname);
116118
fh.load();

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,22 @@ private void testInstances(MetricsConfig c) throws Exception {
133133
assertEq(expected, mc2);
134134
}
135135

136+
/**
137+
* Test the config value separated by delimiter
138+
*/
139+
@Test public void testDelimiterConf() {
140+
String filename = getTestFilename("test-metrics2-delimiter");
141+
new ConfigBuilder().add("p1.foo", "p1foo1,p1foo2,p1foo3").save(filename);
142+
143+
MetricsConfig mc = MetricsConfig.create("p1", filename);
144+
Configuration expected = new ConfigBuilder()
145+
.add("foo", "p1foo1")
146+
.add("foo", "p1foo2")
147+
.add("foo", "p1foo3")
148+
.config;
149+
assertEq(expected, mc);
150+
}
151+
136152
/**
137153
* Return a test filename in the class path
138154
* @param basename

0 commit comments

Comments
 (0)