HADOOP-13556. Change Configuration.getPropsWithPrefix to use getProps instead of iterator. (Larry McCay via asuresh)

This commit is contained in:
Arun Suresh 2017-10-11 15:21:21 -07:00
parent 8acdf5c274
commit b6c2c9058e
2 changed files with 21 additions and 3 deletions

View File

@ -2700,11 +2700,14 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
* @return mapping of configuration properties with prefix stripped * @return mapping of configuration properties with prefix stripped
*/ */
public Map<String, String> getPropsWithPrefix(String confPrefix) { public Map<String, String> getPropsWithPrefix(String confPrefix) {
Properties props = getProps();
Enumeration e = props.propertyNames();
Map<String, String> configMap = new HashMap<>(); Map<String, String> configMap = new HashMap<>();
for (Map.Entry<String, String> entry : this) { String name = null;
String name = entry.getKey(); while (e.hasMoreElements()) {
name = (String) e.nextElement();
if (name.startsWith(confPrefix)) { if (name.startsWith(confPrefix)) {
String value = this.get(name); String value = props.getProperty(name);
name = name.substring(confPrefix.length()); name = name.substring(confPrefix.length());
configMap.put(name, value); configMap.put(name, value);
} }

View File

@ -2242,6 +2242,21 @@ public class TestConfiguration {
FileUtil.fullyDelete(tmpDir); FileUtil.fullyDelete(tmpDir);
} }
public void testGettingPropertiesWithPrefix() throws Exception {
Configuration conf = new Configuration();
for (int i = 0; i < 10; i++) {
conf.set("prefix" + ".name" + i, "value");
}
conf.set("different.prefix" + ".name", "value");
Map<String, String> props = conf.getPropsWithPrefix("prefix");
assertEquals(props.size(), 10);
// test call with no properties for a given prefix
props = conf.getPropsWithPrefix("none");
assertNotNull(props.isEmpty());
assertTrue(props.isEmpty());
}
public static void main(String[] argv) throws Exception { public static void main(String[] argv) throws Exception {
junit.textui.TestRunner.main(new String[]{ junit.textui.TestRunner.main(new String[]{
TestConfiguration.class.getName() TestConfiguration.class.getName()