Index: hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java =================================================================== --- hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java (revision 1463790) +++ hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java (working copy) @@ -25,6 +25,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -57,7 +58,7 @@ // Devs: these APIs are the same contract as their counterparts in // Configuration.java - private static interface ImmutableConfigMap { + private static interface ImmutableConfigMap extends Iterable> { String get(String key); String getRaw(String key); Class getClassByName(String name) throws ClassNotFoundException; @@ -83,6 +84,11 @@ Configuration c = conf; @Override + public Iterator> iterator() { + return c.iterator(); + } + + @Override public String get(String key) { return c.get(key); } @@ -128,6 +134,15 @@ Map m = map; @Override + public Iterator> iterator() { + Map ret = new HashMap(); + for (Map.Entry entry : map.entrySet()) { + ret.put(entry.getKey().toString(), entry.getValue().toString()); + } + return ret.entrySet().iterator(); + } + + @Override public String get(String key) { ImmutableBytesWritable ibw = new ImmutableBytesWritable(Bytes .toBytes(key)); @@ -176,6 +191,11 @@ Map m = map; @Override + public Iterator> iterator() { + return map.entrySet().iterator(); + } + + @Override public String get(String key) { return m.get(key); } @@ -434,7 +454,18 @@ @Override public Iterator> iterator() { - throw new UnsupportedOperationException("Immutable Configuration"); + Map ret = new HashMap(); + if (!configs.isEmpty()) { + for (int i = configs.size() - 1; i >= 0; i--) { + ImmutableConfigMap map = configs.get(i); + Iterator> iter = map.iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + ret.put(entry.getKey(), entry.getValue()); + } + } + } + return ret.entrySet().iterator(); } @Override