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/bdd7782f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/bdd7782f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/bdd7782f Branch: refs/heads/master Commit: bdd7782f054a4740bb63f4d9781ffe083d51e4bf Parents: cd0b85e Author: Stephen Yuan Jiang <[email protected]> Authored: Sat Jul 23 14:47:11 2016 -0700 Committer: Stephen Yuan Jiang <[email protected]> Committed: Sat Jul 23 14:47:11 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/client/Admin.java | 7 + .../hbase/client/ConnectionImplementation.java | 7 + .../apache/hadoop/hbase/client/HBaseAdmin.java | 15 + .../hbase/zookeeper/ZooKeeperWatcher.java | 5 + .../hbase/protobuf/generated/MasterProtos.java | 2574 ++++++++++++------ hbase-protocol/src/main/protobuf/Master.proto | 13 + .../hadoop/hbase/master/CatalogJanitor.java | 11 + .../org/apache/hadoop/hbase/master/HMaster.java | 44 +- .../hadoop/hbase/master/MasterRpcServices.java | 9 + .../hadoop/hbase/master/MasterServices.java | 5 + .../org/apache/hadoop/hbase/util/HBaseFsck.java | 156 +- .../zookeeper/MasterMaintenanceModeTracker.java | 81 + .../hbase/zookeeper/SplitOrMergeTracker.java | 2 - .../hbase/master/MockNoopMasterServices.java | 5 + .../hadoop/hbase/util/TestHBaseFsckOneRS.java | 2 - 15 files changed, 2011 insertions(+), 925 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/bdd7782f/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 df79dcf..0610517 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 @@ -959,6 +959,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/bdd7782f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java index 9b913c8..bb5c996 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java @@ -1416,6 +1416,13 @@ class ConnectionImplementation implements ClusterConnection, Closeable { } @Override + public MasterProtos.IsInMaintenanceModeResponse isMasterInMaintenanceMode( + final RpcController controller, + final MasterProtos.IsInMaintenanceModeRequest request) throws ServiceException { + return stub.isMasterInMaintenanceMode(controller, request); + } + + @Override public MasterProtos.BalanceResponse balance(RpcController controller, MasterProtos.BalanceRequest request) throws ServiceException { return stub.balance(controller, request); http://git-wip-us.apache.org/repos/asf/hbase/blob/bdd7782f/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 074fe7f..29650ef 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 @@ -130,6 +130,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.IsSnapshotDoneRequest; @@ -1933,6 +1935,19 @@ public class HBaseAdmin implements Admin { } @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/bdd7782f/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 7cbfc98..5ef7171 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 @@ -123,6 +123,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"; public final static String META_ZNODE_PREFIX = "meta-region-server"; @@ -194,6 +196,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); @@ -442,6 +445,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")); } /**
