Index: bin/HBase.rb =================================================================== --- bin/HBase.rb (revision 800674) +++ bin/HBase.rb (working copy) @@ -270,6 +270,11 @@ status = @admin.getClusterStatus() if format != nil and format == "detailed" puts("version %s" % [ status.getHBaseVersion() ]) + # Put regions in transition first because usually empty + puts("%d regionsInTransition" % status.getRegionsInTransition().size()) + for k, v in status.getRegionsInTransition() + puts(" %s" % [v]) + end puts("%d live servers" % [ status.getServers() ]) for server in status.getServerInfo() puts(" %s:%d %d" % \ Index: src/java/org/apache/hadoop/hbase/ClusterStatus.java =================================================================== --- src/java/org/apache/hadoop/hbase/ClusterStatus.java (revision 800674) +++ src/java/org/apache/hadoop/hbase/ClusterStatus.java (working copy) @@ -26,6 +26,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import org.apache.hadoop.io.VersionedWritable; @@ -41,6 +43,7 @@ *
  • The number of requests since last report.
  • *
  • Detailed region server loading and resource usage information, * per server and per region.
  • + *
  • Regions in transition at master
  • * */ public class ClusterStatus extends VersionedWritable { @@ -49,6 +52,7 @@ private String hbaseVersion; private Collection liveServerInfo; private Collection deadServers; + private Map intransition; /** * Constructor, for Writable @@ -191,6 +195,14 @@ this.deadServers = deadServers; } + public Map getRegionsInTransition() { + return this.intransition; + } + + public void setRegionsInTransition(final Map m) { + this.intransition = m; + } + // // Writable // @@ -206,6 +218,11 @@ for (String server: deadServers) { out.writeUTF(server); } + out.writeInt(this.intransition.size()); + for (Map.Entry e: this.intransition.entrySet()) { + out.writeUTF(e.getKey()); + out.writeUTF(e.getValue()); + } } public void readFields(DataInput in) throws IOException { @@ -223,5 +240,12 @@ for (int i = 0; i < count; i++) { deadServers.add(in.readUTF()); } + count = in.readInt(); + this.intransition = new HashMap(count); + for (int i = 0; i < count; i++) { + String key = in.readUTF(); + String value = in.readUTF(); + this.intransition.put(key, value); + } } -} +} \ No newline at end of file Index: src/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/java/org/apache/hadoop/hbase/master/HMaster.java (revision 800674) +++ src/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -1053,6 +1053,7 @@ status.setHBaseVersion(VersionInfo.getVersion()); status.setServerInfo(serverManager.serversToServerInfo.values()); status.setDeadServers(serverManager.deadServers); + status.setRegionsInTransition(this.regionManager.getRegionsInTransition()); return status; } Index: src/java/org/apache/hadoop/hbase/master/RegionManager.java =================================================================== --- src/java/org/apache/hadoop/hbase/master/RegionManager.java (revision 800674) +++ src/java/org/apache/hadoop/hbase/master/RegionManager.java (working copy) @@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -1428,6 +1429,20 @@ } } + /** + * @return Snapshot of regionsintransition Map. + */ + Map getRegionsInTransition() { + Map result = new HashMap(); + synchronized (this.regionsInTransition) { + if (this.regionsInTransition.isEmpty()) return result; + for (Map.Entry e: this.regionsInTransition.entrySet()) { + result.put(e.getKey(), e.getValue().toString()); + } + } + return result; + } + /* * State of a Region as it transitions from closed to open, etc. See * note on regionsInTransition data member above for listing of state