You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/06/06 08:26:23 UTC

svn commit: r1346748 [1/3] - in /hbase/trunk/hbase-server/src: main/java/org/apache/hadoop/hbase/ main/java/org/apache/hadoop/hbase/client/ main/java/org/apache/hadoop/hbase/ipc/ main/java/org/apache/hadoop/hbase/master/ main/java/org/apache/hadoop/hba...

Author: stack
Date: Wed Jun  6 06:26:22 2012
New Revision: 1346748

URL: http://svn.apache.org/viewvc?rev=1346748&view=rev
Log:
HBASE-6038 Add getClusterStatus PB-based call to HMasterInterface

Added:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ClusterStatusProtos.java
    hbase/trunk/hbase-server/src/main/protobuf/ClusterId.proto
    hbase/trunk/hbase-server/src/main/protobuf/ClusterStatus.proto
    hbase/trunk/hbase-server/src/main/protobuf/FS.proto
Removed:
    hbase/trunk/hbase-server/src/protobuf/ClusterId.proto
    hbase/trunk/hbase-server/src/protobuf/FS.proto
Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HServerLoad.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
    hbase/trunk/hbase-server/src/main/protobuf/Master.proto
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java Wed Jun  6 06:26:22 2012
@@ -28,12 +28,20 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.HashSet;
 import org.apache.hadoop.hbase.HServerLoad;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos;
+import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.LiveServerInfo;
+import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionInTransition;
+import org.apache.hadoop.hbase.protobuf.generated.FSProtos.HBaseVersionFileContent;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
 import org.apache.hadoop.hbase.ServerLoad;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -43,6 +51,8 @@ import org.apache.hadoop.hbase.util.Byte
 import org.apache.hadoop.io.VersionMismatchException;
 import org.apache.hadoop.io.VersionedWritable;
 
+import com.google.protobuf.ByteString;
+
 /**
  * Status information on the HBase cluster.
  * <p>
@@ -78,7 +88,7 @@ public class ClusterStatus extends Versi
   private static final byte VERSION = 2;
 
   private String hbaseVersion;
-  private Map<ServerName, HServerLoad> liveServers;
+  private Map<ServerName, ServerLoad> liveServers;
   private Collection<ServerName> deadServers;
   private ServerName master;
   private Collection<ServerName> backupMasters;
@@ -88,7 +98,9 @@ public class ClusterStatus extends Versi
 
   /**
    * Constructor, for Writable
+   * @deprecated Used by Writables and Writables are going away.
    */
+  @Deprecated
   public ClusterStatus() {
     super();
   }
@@ -102,40 +114,7 @@ public class ClusterStatus extends Versi
       final String[] masterCoprocessors) {
     this.hbaseVersion = hbaseVersion;
 
-    // TODO: This conversion of ServerLoad to HServerLoad is temporary,
-    // will be cleaned up in HBASE-5445.  Using the ClusterStatus proto brings
-    // in a lot of other changes, so it makes sense to break this up.
-    Map<ServerName, HServerLoad> convertedLoad =
-      new HashMap<ServerName,HServerLoad>();
-    for (Map.Entry<ServerName,ServerLoad> entry : servers.entrySet()) {
-      ServerLoad sl = entry.getValue();
-
-      Map<byte[],RegionLoad> regionLoad = new HashMap<byte[],RegionLoad>();
-      for (HBaseProtos.RegionLoad rl : sl.getRegionLoadsList()) {
-        Set<String> regionCoprocessors = new HashSet<String>();
-        for (HBaseProtos.Coprocessor coprocessor
-            : rl.getCoprocessorsList()) {
-          regionCoprocessors.add(coprocessor.getName());
-        }
-
-        byte [] regionName = rl.getRegionSpecifier().getValue().toByteArray();
-        RegionLoad converted = new RegionLoad(regionName,
-          rl.getStores(),rl.getStorefiles(),rl.getStoreUncompressedSizeMB(),
-          rl.getStorefileSizeMB(),rl.getMemstoreSizeMB(),
-          rl.getStorefileIndexSizeMB(),rl.getRootIndexSizeKB(),
-          rl.getTotalStaticIndexSizeKB(),rl.getTotalStaticBloomSizeKB(),
-          rl.getReadRequestsCount(),rl.getWriteRequestsCount(),
-          rl.getTotalCompactingKVs(),rl.getCurrentCompactedKVs(),
-          regionCoprocessors);
-        regionLoad.put(regionName, converted);
-      }
-
-      HServerLoad hsl = new HServerLoad(sl.getTotalNumberOfRequests(),
-        sl.getRequestsPerSecond(),sl.getUsedHeapMB(),sl.getMaxHeapMB(),
-        regionLoad,new HashSet<String>(Arrays.asList(masterCoprocessors)));
-      convertedLoad.put(entry.getKey(), hsl);
-    }
-    this.liveServers = convertedLoad;
+    this.liveServers = servers;
     this.deadServers = deadServers;
     this.master = master;
     this.backupMasters = backupMasters;
@@ -178,8 +157,8 @@ public class ClusterStatus extends Versi
    */
   public int getRegionsCount() {
     int count = 0;
-    for (Map.Entry<ServerName, HServerLoad> e: this.liveServers.entrySet()) {
-      count += e.getValue().getNumberOfRegions();
+    for (Map.Entry<ServerName, ServerLoad> e: this.liveServers.entrySet()) {
+      count += e.getValue().getRegionLoadsCount();
     }
     return count;
   }
@@ -189,8 +168,8 @@ public class ClusterStatus extends Versi
    */
   public int getRequestsCount() {
     int count = 0;
-    for (Map.Entry<ServerName, HServerLoad> e: this.liveServers.entrySet()) {
-      count += e.getValue().getNumberOfRequests();
+    for (Map.Entry<ServerName, ServerLoad> e: this.liveServers.entrySet()) {
+      count += e.getValue().getTotalNumberOfRequests();
     }
     return count;
   }
@@ -281,7 +260,7 @@ public class ClusterStatus extends Versi
    * @return Server's load or null if not found.
    */
   public HServerLoad getLoad(final ServerName sn) {
-    return this.liveServers.get(sn);
+    return HServerLoad.convert(this.liveServers.get(sn));
   }
 
   public Map<String, RegionState> getRegionsInTransition() {
@@ -296,95 +275,74 @@ public class ClusterStatus extends Versi
      return masterCoprocessors;
   }
 
-  //
-  // Writable
-  //
-
-  public void write(DataOutput out) throws IOException {
-    super.write(out);
-    out.writeUTF(hbaseVersion);
-    out.writeInt(getServersSize());
-    for (Map.Entry<ServerName, HServerLoad> e: this.liveServers.entrySet()) {
-      Bytes.writeByteArray(out, e.getKey().getVersionedBytes());
-      e.getValue().write(out);
-    }
-    out.writeInt(deadServers.size());
-    for (ServerName server: deadServers) {
-      Bytes.writeByteArray(out, server.getVersionedBytes());
-    }
-    out.writeInt(this.intransition.size());
-    for (Map.Entry<String, RegionState> e: this.intransition.entrySet()) {
-      out.writeUTF(e.getKey());
-      e.getValue().write(out);
-    }
-    out.writeUTF(clusterId);
-    out.writeInt(masterCoprocessors.length);
-    for(String masterCoprocessor: masterCoprocessors) {
-      out.writeUTF(masterCoprocessor);
-    }
-    Bytes.writeByteArray(out, this.master.getVersionedBytes());
-    out.writeInt(this.backupMasters.size());
-    for (ServerName backupMaster: this.backupMasters) {
-      Bytes.writeByteArray(out, backupMaster.getVersionedBytes());
-    }
-  }
-
-  public void readFields(DataInput in) throws IOException {
-    int version = getVersion();
-    try {
-      super.readFields(in);
-    } catch (VersionMismatchException e) {
-      /*
-       * No API in VersionMismatchException to get the expected and found
-       * versions.  We use the only tool available to us: toString(), whose
-       * output has a dependency on hadoop-common.  Boo.
-       */
-      int startIndex = e.toString().lastIndexOf('v') + 1;
-      version = Integer.parseInt(e.toString().substring(startIndex));
-    }
-    hbaseVersion = in.readUTF();
-    int count = in.readInt();
-    this.liveServers = new HashMap<ServerName, HServerLoad>(count);
-    for (int i = 0; i < count; i++) {
-      byte [] versionedBytes = Bytes.readByteArray(in);
-      HServerLoad hsl = new HServerLoad();
-      hsl.readFields(in);
-      this.liveServers.put(ServerName.parseVersionedServerName(versionedBytes), hsl);
-    }
-    count = in.readInt();
-    deadServers = new ArrayList<ServerName>(count);
-    for (int i = 0; i < count; i++) {
-      deadServers.add(ServerName.parseVersionedServerName(Bytes.readByteArray(in)));
-    }
-    count = in.readInt();
-    this.intransition = new TreeMap<String, RegionState>();
-    for (int i = 0; i < count; i++) {
-      String key = in.readUTF();
-      RegionState regionState = new RegionState();
-      regionState.readFields(in);
-      this.intransition.put(key, regionState);
-    }
-    this.clusterId = in.readUTF();
-    int masterCoprocessorsLength = in.readInt();
-    masterCoprocessors = new String[masterCoprocessorsLength];
-    for(int i = 0; i < masterCoprocessorsLength; i++) {
-      masterCoprocessors[i] = in.readUTF();
-    }
-    // Only read extra fields for master and backup masters if
-    // version indicates that we should do so, else use defaults
-    if (version >= VERSION_MASTER_BACKUPMASTERS) {
-      this.master = ServerName.parseVersionedServerName(
-                      Bytes.readByteArray(in));
-      count = in.readInt();
-      this.backupMasters = new ArrayList<ServerName>(count);
-      for (int i = 0; i < count; i++) {
-        this.backupMasters.add(ServerName.parseVersionedServerName(
-                                 Bytes.readByteArray(in)));
-      }
-    } else {
-      this.master = new ServerName(ServerName.UNKNOWN_SERVERNAME, -1,
-                                   ServerName.NON_STARTCODE);
-      this.backupMasters = new ArrayList<ServerName>(0);
-    }
+   /**
+    * Convert a ClutserStatus to a protobuf ClusterStatus
+    *
+    * @return the protobuf ClusterStatus
+    */
+  public ClusterStatusProtos.ClusterStatus convert() {
+    ClusterStatusProtos.ClusterStatus.Builder builder = ClusterStatusProtos.ClusterStatus.newBuilder();
+    builder.setHbaseVersion(HBaseVersionFileContent.newBuilder().setVersion(getHBaseVersion()));
+
+    for (Map.Entry<ServerName, ServerLoad> entry : liveServers.entrySet()) {
+      LiveServerInfo.Builder lsi =
+        LiveServerInfo.newBuilder().setServer(ProtobufUtil.toServerName(entry.getKey()));
+      lsi.setServerLoad(entry.getValue().getServerLoadPB());
+      builder.addLiveServers(lsi.build());
+    }
+    for (ServerName deadServer : getDeadServerNames()) {
+      builder.addDeadServers(ProtobufUtil.toServerName(deadServer));
+    }
+    for (Map.Entry<String, RegionState> rit : getRegionsInTransition().entrySet()) {
+      ClusterStatusProtos.RegionState rs = rit.getValue().convert();
+      RegionSpecifier.Builder spec =
+        RegionSpecifier.newBuilder().setType(RegionSpecifierType.REGION_NAME);
+      spec.setValue(ByteString.copyFrom(Bytes.toBytes(rit.getKey())));
+
+      RegionInTransition pbRIT =
+        RegionInTransition.newBuilder().setSpec(spec.build()).setRegionState(rs).build();
+      builder.addRegionsInTransition(pbRIT);
+    }
+    builder.setClusterId(new ClusterId(getClusterId()).convert());
+    for (String coprocessor : getMasterCoprocessors()) {
+      builder.addMasterCoprocessors(HBaseProtos.Coprocessor.newBuilder().setName(coprocessor));
+    }
+    builder.setMaster(
+      ProtobufUtil.toServerName(getMaster()));
+    for (ServerName backup : getBackupMasters()) {
+      builder.addBackupMasters(ProtobufUtil.toServerName(backup));
+    }
+    return builder.build();
+  }
+
+  /**
+   * Convert a protobuf ClusterStatus to a ClusterStatus
+   *
+   * @param proto the protobuf ClusterStatus
+   * @return the converted ClusterStatus
+   */
+  public static ClusterStatus convert(ClusterStatusProtos.ClusterStatus proto) {
+    Map<ServerName, ServerLoad> servers = new HashMap<ServerName, ServerLoad>();
+    for (LiveServerInfo lsi : proto.getLiveServersList()) {
+      servers.put(ProtobufUtil.toServerName(lsi.getServer()), new ServerLoad(lsi.getServerLoad()));
+    }
+    Collection<ServerName> deadServers = new LinkedList<ServerName>();
+    for (HBaseProtos.ServerName sn : proto.getDeadServersList()) {
+      deadServers.add(ProtobufUtil.toServerName(sn));
+    }
+    Collection<ServerName> backupMasters = new LinkedList<ServerName>();
+    for (HBaseProtos.ServerName sn : proto.getBackupMastersList()) {
+      backupMasters.add(ProtobufUtil.toServerName(sn));
+    }
+    final Map<String, RegionState> rit = new HashMap<String, RegionState>();
+    for (RegionInTransition region : proto.getRegionsInTransitionList()) {
+      String key = new String(region.getSpec().getValue().toByteArray());
+      RegionState value = RegionState.convert(region.getRegionState());
+      rit.put(key,value);
+    }
+    final String[] masterCoprocessors = proto.getMasterCoprocessorsList().toArray(new String[0]);
+    return new ClusterStatus(proto.getHbaseVersion().getVersion(),
+      ClusterId.convert(proto.getClusterId()).toString(),servers,deadServers,
+      ProtobufUtil.toServerName(proto.getMaster()),backupMasters,rit,masterCoprocessors);
   }
 }

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java Wed Jun  6 06:26:22 2012
@@ -835,7 +835,6 @@ implements WritableComparable<HRegionInf
   /**
    * Convert a HRegionInfo to a RegionInfo
    *
-   * @param info the HRegionInfo to convert
    * @return the converted RegionInfo
    */
   RegionInfo convert() {

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HServerLoad.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HServerLoad.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HServerLoad.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HServerLoad.java Wed Jun  6 06:26:22 2012
@@ -24,6 +24,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
@@ -31,6 +33,7 @@ import java.util.TreeSet;
 
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Strings;
 import org.apache.hadoop.io.VersionedWritable;
@@ -709,8 +712,44 @@ implements WritableComparable<HServerLoa
     return count;
   }
 
+  public static HServerLoad convert(ServerLoad sl) {
+  // TODO: This conversion of ServerLoad to HServerLoad is temporary,
+  // will be cleaned up in HBASE-5445.  Using the ClusterStatus proto brings
+  // in a lot of other changes, so it makes sense to break this up.
+    Map<byte[],RegionLoad> regionLoad = new HashMap<byte[],RegionLoad>();
+    for (HBaseProtos.RegionLoad rl : sl.getRegionLoadsList()) {
+      Set<String> regionCoprocessors = new HashSet<String>();
+      for (HBaseProtos.Coprocessor coprocessor
+          : rl.getCoprocessorsList()) {
+        regionCoprocessors.add(coprocessor.getName());
+      }
+
+      byte [] regionName = rl.getRegionSpecifier().getValue().toByteArray();
+      RegionLoad converted = new RegionLoad(regionName,
+        rl.getStores(),rl.getStorefiles(),rl.getStoreUncompressedSizeMB(),
+        rl.getStorefileSizeMB(),rl.getMemstoreSizeMB(),
+        rl.getStorefileIndexSizeMB(),rl.getRootIndexSizeKB(),
+        rl.getTotalStaticIndexSizeKB(),rl.getTotalStaticBloomSizeKB(),
+        rl.getReadRequestsCount(),rl.getWriteRequestsCount(),
+        rl.getTotalCompactingKVs(),rl.getCurrentCompactedKVs(),
+        regionCoprocessors);
+      regionLoad.put(regionName, converted);
+    }
+
+    Set<String> coprocessors =
+      new HashSet<String>(Arrays.asList(ServerLoad.getRegionServerCoprocessors(sl)));
+    HServerLoad hsl = new HServerLoad(sl.getTotalNumberOfRequests(),
+      sl.getRequestsPerSecond(),sl.getUsedHeapMB(),sl.getMaxHeapMB(),
+      regionLoad,coprocessors);
+
+    return hsl;
+  }
   // Writable
 
+  /**
+   * @deprecated Writables are going away.
+   */
+  @Deprecated
   public void readFields(DataInput in) throws IOException {
     super.readFields(in);
     int version = in.readByte();
@@ -731,6 +770,10 @@ implements WritableComparable<HServerLoa
     }
   }
 
+  /**
+   * @deprecated Writables are going away.
+   */
+  @Deprecated
   public void write(DataOutput out) throws IOException {
     super.write(out);
     out.writeByte(VERSION);

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Wed Jun  6 06:26:22 2012
@@ -88,6 +88,7 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyColumnRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AssignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MoveRegionRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.SetBalancerRunningRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.UnassignRegionRequest;
@@ -1710,8 +1711,9 @@ public class HBaseAdmin implements Abort
   public ClusterStatus getClusterStatus() throws IOException {
     return execute(new MasterCallable<ClusterStatus>() {
       @Override
-      public ClusterStatus call() {
-        return master.getClusterStatus();
+      public ClusterStatus call() throws ServiceException {
+        GetClusterStatusRequest req = RequestConverter.buildGetClusterStatusRequest();
+        return ClusterStatus.convert(master.getClusterStatus(null,req).getClusterStatus());
       }
     });
   }

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java Wed Jun  6 06:26:22 2012
@@ -65,6 +65,8 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ShutdownResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusResponse;
 import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.security.TokenInfo;
 import org.apache.hadoop.hbase.security.KerberosInfo;
@@ -240,9 +242,13 @@ public interface HMasterInterface extend
 
   /**
    * Return cluster status.
+   * @param controller Unused (set to null).
+   * @param req GetClusterStatusRequest
    * @return status object
+   * @throws ServiceException
    */
-  public ClusterStatus getClusterStatus();
+  public GetClusterStatusResponse getClusterStatus(RpcController controller, GetClusterStatusRequest req)
+  throws ServiceException;
 
   /**
    * Offline a region from the assignment manager's in-memory state.  The

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Wed Jun  6 06:26:22 2012
@@ -73,6 +73,7 @@ import org.apache.hadoop.hbase.master.ha
 import org.apache.hadoop.hbase.master.handler.ServerShutdownHandler;
 import org.apache.hadoop.hbase.master.handler.SplitRegionHandler;
 import org.apache.hadoop.hbase.master.metrics.MasterMetrics;
+import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos;
 import org.apache.hadoop.hbase.regionserver.RegionAlreadyInTransitionException;
 import org.apache.hadoop.hbase.regionserver.RegionOpeningState;
 import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;
@@ -3511,6 +3512,97 @@ public class AssignmentManager extends Z
         + ", server=" + serverName;
     }
 
+    /**
+     * Convert a RegionState to an HBaseProtos.RegionState
+     *
+     * @return the converted HBaseProtos.RegionState
+     */
+    public ClusterStatusProtos.RegionState convert() {
+      ClusterStatusProtos.RegionState.Builder regionState = ClusterStatusProtos.RegionState.newBuilder();
+      ClusterStatusProtos.RegionState.State rs;
+      switch (regionState.getState()) {
+      case OFFLINE:
+        rs = ClusterStatusProtos.RegionState.State.OFFLINE;
+        break;
+      case PENDING_OPEN:
+        rs = ClusterStatusProtos.RegionState.State.PENDING_OPEN;
+        break;
+      case OPENING:
+        rs = ClusterStatusProtos.RegionState.State.OPENING;
+        break;
+      case OPEN:
+        rs = ClusterStatusProtos.RegionState.State.OPEN;
+        break;
+      case PENDING_CLOSE:
+        rs = ClusterStatusProtos.RegionState.State.PENDING_CLOSE;
+    	break;
+      case CLOSING:
+        rs = ClusterStatusProtos.RegionState.State.CLOSING;
+        break;
+      case CLOSED:
+        rs = ClusterStatusProtos.RegionState.State.CLOSED;
+        break;
+      case SPLITTING:
+        rs = ClusterStatusProtos.RegionState.State.SPLITTING;
+        break;
+      case SPLIT:
+        rs = ClusterStatusProtos.RegionState.State.SPLIT;
+        break;
+      default:
+        throw new IllegalStateException("");
+      }
+      regionState.setRegionInfo(HRegionInfo.convert(region));
+      regionState.setState(rs);
+      regionState.setStamp(getStamp());
+      return regionState.build();
+    }
+
+    /**
+     * Convert a protobuf HBaseProtos.RegionState to a RegionState
+     *
+     * @return the RegionState
+     */
+    public static RegionState convert(ClusterStatusProtos.RegionState proto) {
+      RegionState.State state;
+      switch (proto.getState()) {
+      case OFFLINE:
+        state = State.OFFLINE;
+        break;
+      case PENDING_OPEN:
+        state = State.PENDING_OPEN;
+        break;
+      case OPENING:
+        state = State.OPENING;
+        break;
+      case OPEN:
+        state = State.OPEN;
+        break;
+      case PENDING_CLOSE:
+        state = State.PENDING_CLOSE;
+    	break;
+      case CLOSING:
+        state = State.CLOSING;
+        break;
+      case CLOSED:
+        state = State.CLOSED;
+        break;
+      case SPLITTING:
+        state = State.SPLITTING;
+        break;
+      case SPLIT:
+        state = State.SPLIT;
+        break;
+      default:
+        throw new IllegalStateException("");
+      }
+
+      return new RegionState(HRegionInfo.convert(proto.getRegionInfo()),state,proto.getStamp(),null);
+    }
+
+    /**
+     * @deprecated Writables are going away
+     */
+    @Deprecated
     @Override
     public void readFields(DataInput in) throws IOException {
       region = new HRegionInfo();
@@ -3519,6 +3611,10 @@ public class AssignmentManager extends Z
       stamp.set(in.readLong());
     }
 
+    /**
+     * @deprecated Writables are going away
+     */
+    @Deprecated
     @Override
     public void write(DataOutput out) throws IOException {
       region.write(out);

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Wed Jun  6 06:26:22 2012
@@ -168,6 +168,8 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ShutdownResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusResponse;
 import com.google.protobuf.ServiceException;
 
 /**
@@ -1627,6 +1629,13 @@ Server {
     }
   }
 
+  @Override
+  public GetClusterStatusResponse getClusterStatus(RpcController controller, GetClusterStatusRequest req)
+  throws ServiceException {
+    GetClusterStatusResponse.Builder response = GetClusterStatusResponse.newBuilder();
+    response.setClusterStatus(getClusterStatus().convert());
+    return response.build();
+  }
   /**
    * @return cluster status
    */

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java Wed Jun  6 06:26:22 2012
@@ -274,7 +274,7 @@ public class ServerManager {
 
   /**
    * @param serverName
-   * @return HServerLoad if serverName is known else null
+   * @return ServerLoad if serverName is known else null
    */
   public ServerLoad getLoad(final ServerName serverName) {
     return this.onlineServers.get(serverName);
@@ -282,7 +282,7 @@ public class ServerManager {
 
   /**
    * @param address
-   * @return HServerLoad if serverName is known else null
+   * @return ServerLoad if serverName is known else null
    * @deprecated Use {@link #getLoad(HServerAddress)}
    */
   public ServerLoad getLoad(final HServerAddress address) {

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java?rev=1346748&r1=1346747&r2=1346748&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java Wed Jun  6 06:26:22 2012
@@ -97,6 +97,7 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.BalanceRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.SetBalancerRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
 import org.apache.hadoop.hbase.regionserver.wal.HLog;
 import org.apache.hadoop.hbase.regionserver.wal.HLogKey;
 import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
@@ -1101,4 +1102,13 @@ public final class RequestConverter {
   public static SetBalancerRunningRequest buildLoadBalancerIsRequest(boolean on, boolean synchronous) {
     return SetBalancerRunningRequest.newBuilder().setOn(on).setSynchronous(synchronous).build();
   }
+
+  /**
+   * Creates a protocol buffer GetClusterStatusRequest
+   *
+   * @return A GetClusterStatusRequest
+   */
+  public static GetClusterStatusRequest buildGetClusterStatusRequest() {
+    return GetClusterStatusRequest.newBuilder().build();
+  }
 }