HBASE-16008 A robust way deal with early termination of HBCK (Stephen Yuan Jiang)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a8dd359d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a8dd359d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a8dd359d Branch: refs/heads/branch-1 Commit: a8dd359d7e2c1f6c92eaed3fdcb6d7455aae4ef8 Parents: 276acdb Author: Stephen Yuan Jiang <[email protected]> Authored: Sat Jul 23 20:21:32 2016 -0700 Committer: Stephen Yuan Jiang <[email protected]> Committed: Sat Jul 23 20:21:32 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/client/Admin.java | 7 + .../hadoop/hbase/client/ConnectionManager.java | 7 + .../apache/hadoop/hbase/client/HBaseAdmin.java | 15 + .../hbase/zookeeper/ZooKeeperWatcher.java | 5 + .../hbase/protobuf/generated/MasterProtos.java | 2562 ++++++++++++------ hbase-protocol/src/main/protobuf/Master.proto | 13 + .../hadoop/hbase/master/CatalogJanitor.java | 11 + .../org/apache/hadoop/hbase/master/HMaster.java | 48 +- .../hadoop/hbase/master/MasterRpcServices.java | 11 + .../hadoop/hbase/master/MasterServices.java | 5 + .../org/apache/hadoop/hbase/util/HBaseFsck.java | 289 +- .../zookeeper/MasterMaintenanceModeTracker.java | 81 + .../hbase/zookeeper/SplitOrMergeTracker.java | 2 - .../hadoop/hbase/master/TestCatalogJanitor.java | 5 + .../apache/hadoop/hbase/util/TestHBaseFsck.java | 5 - 15 files changed, 2062 insertions(+), 1004 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/a8dd359d/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java index a7f93af..d4d9d24 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java @@ -840,6 +840,13 @@ public interface Admin extends Abortable, Closeable { void stopMaster() throws IOException; /** + * Check whether Master is in maintenance mode + * + * @throws IOException if a remote or network exception occurs + */ + boolean isMasterInMaintenanceMode() throws IOException; + + /** * Stop the designated regionserver * * @param hostnamePort Hostname and port delimited by a <code>:</code> as in http://git-wip-us.apache.org/repos/asf/hbase/blob/a8dd359d/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java index b055884..96ebebc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java @@ -1863,6 +1863,13 @@ class ConnectionManager { } @Override + public MasterProtos.IsInMaintenanceModeResponse isMasterInMaintenanceMode( + final RpcController controller, + final MasterProtos.IsInMaintenanceModeRequest request) throws ServiceException { + return stub.isMasterInMaintenanceMode(controller, request); + } + + @Override public BalanceResponse balance(RpcController controller, BalanceRequest request) throws ServiceException { return stub.balance(controller, request); http://git-wip-us.apache.org/repos/asf/hbase/blob/a8dd359d/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index 37d7735..4aff45f 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -125,6 +125,8 @@ import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterSta import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsResponse; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableNamesRequest; +import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsInMaintenanceModeRequest; +import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsInMaintenanceModeResponse; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsProcedureDoneRequest; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsProcedureDoneResponse; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsRestoreSnapshotDoneRequest; @@ -2934,6 +2936,19 @@ public class HBaseAdmin implements Admin { * @throws IOException if a remote or network exception occurs */ @Override + public boolean isMasterInMaintenanceMode() throws IOException { + return executeCallable(new MasterCallable<IsInMaintenanceModeResponse>(getConnection()) { + @Override + public IsInMaintenanceModeResponse call(int callTimeout) throws ServiceException { + PayloadCarryingRpcController controller = rpcControllerFactory.newController(); + controller.setCallTimeout(callTimeout); + return master.isMasterInMaintenanceMode( + controller, IsInMaintenanceModeRequest.newBuilder().build()); + } + }).getInMaintenanceMode(); + } + + @Override public ClusterStatus getClusterStatus() throws IOException { return executeCallable(new MasterCallable<ClusterStatus>(getConnection()) { @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/a8dd359d/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java index 7790c16..ce209d6 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java @@ -126,6 +126,8 @@ public class ZooKeeperWatcher implements Watcher, Abortable, Closeable { public String recoveringRegionsZNode; // znode containing namespace descriptors public static String namespaceZNode = "namespace"; + // znode of indicating master maintenance mode + public static String masterMaintZNode = "masterMaintenance"; // Certain ZooKeeper nodes need to be world-readable public static final ArrayList<ACL> CREATOR_ALL_AND_WORLD_READABLE = @@ -207,6 +209,7 @@ public class ZooKeeperWatcher implements Watcher, Abortable, Closeable { ZKUtil.createAndFailSilent(this, backupMasterAddressesZNode); ZKUtil.createAndFailSilent(this, tableLockZNode); ZKUtil.createAndFailSilent(this, recoveringRegionsZNode); + ZKUtil.createAndFailSilent(this, masterMaintZNode); } catch (KeeperException e) { throw new ZooKeeperConnectionException( prefix("Unexpected KeeperException creating base node"), e); @@ -457,6 +460,8 @@ public class ZooKeeperWatcher implements Watcher, Abortable, Closeable { conf.get("zookeeper.znode.recovering.regions", "recovering-regions")); namespaceZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.namespace", "namespace")); + masterMaintZNode = ZKUtil.joinZNode(baseZNode, + conf.get("zookeeper.znode.masterMaintenance", "master-maintenance")); } /**
