HBASE-20670 NPE in HMaster#isInMaintenanceMode
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8c4a66fc Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8c4a66fc Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8c4a66fc Branch: refs/heads/branch-1.4 Commit: 8c4a66fc59dcef4c34e3e84a28af3ad176fb94e4 Parents: 95e5dee Author: Andrew Purtell <apurt...@apache.org> Authored: Fri Jun 1 15:22:18 2018 -0700 Committer: Andrew Purtell <apurt...@apache.org> Committed: Mon Jun 4 13:03:23 2018 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/master/HMaster.java | 25 ++++++++++++++++---- .../hadoop/hbase/master/MasterRpcServices.java | 6 ++++- .../hadoop/hbase/master/MasterServices.java | 5 ++-- 3 files changed, 28 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/8c4a66fc/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 59e4437..b8d8435 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -2697,7 +2697,10 @@ public class HMaster extends HRegionServer implements MasterServices, Server { * @return true if master is in maintenanceMode */ @Override - public boolean isInMaintenanceMode() { + public boolean isInMaintenanceMode() throws IOException { + if (!isInitialized()) { + throw new PleaseHoldException("Master is initializing"); + } return maintenanceModeTracker.isInMaintenanceMode(); } @@ -3195,7 +3198,11 @@ public class HMaster extends HRegionServer implements MasterServices, Server { * @return The state of the load balancer, or false if the load balancer isn't defined. */ public boolean isBalancerOn() { - if (null == loadBalancerTracker || isInMaintenanceMode()) { + try { + if (null == loadBalancerTracker || isInMaintenanceMode()) { + return false; + } + } catch (IOException e) { return false; } return loadBalancerTracker.isBalancerOn(); @@ -3206,8 +3213,12 @@ public class HMaster extends HRegionServer implements MasterServices, Server { * false is returned. */ public boolean isNormalizerOn() { - return (null == regionNormalizerTracker || isInMaintenanceMode()) ? - false: regionNormalizerTracker.isNormalizerOn(); + try { + return (null == regionNormalizerTracker || isInMaintenanceMode()) ? + false: regionNormalizerTracker.isNormalizerOn(); + } catch (IOException e) { + return false; + } } /** @@ -3217,7 +3228,11 @@ public class HMaster extends HRegionServer implements MasterServices, Server { * @return The state of the switch */ public boolean isSplitOrMergeEnabled(Admin.MasterSwitchType switchType) { - if (null == splitOrMergeTracker || isInMaintenanceMode()) { + try { + if (null == splitOrMergeTracker || isInMaintenanceMode()) { + return false; + } + } catch (IOException e) { return false; } return splitOrMergeTracker.isSplitOrMergeEnabled(switchType); http://git-wip-us.apache.org/repos/asf/hbase/blob/8c4a66fc/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 08a2033..416983f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -1456,7 +1456,11 @@ public class MasterRpcServices extends RSRpcServices final RpcController controller, final IsInMaintenanceModeRequest request) throws ServiceException { IsInMaintenanceModeResponse.Builder response = IsInMaintenanceModeResponse.newBuilder(); - response.setInMaintenanceMode(master.isInMaintenanceMode()); + try { + response.setInMaintenanceMode(master.isInMaintenanceMode()); + } catch (IOException e) { + throw new ServiceException(e); + } return response.build(); } http://git-wip-us.apache.org/repos/asf/hbase/blob/8c4a66fc/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java index 7d58070..7312718 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java @@ -341,15 +341,16 @@ public interface MasterServices extends Server { /** * @return true if master is in maintanceMode + * @throws IOException */ - boolean isInMaintenanceMode(); + boolean isInMaintenanceMode() throws IOException; /** * Abort a procedure. * @param procId ID of the procedure * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted? * @return true if aborted, false if procedure already completed or does not exist - * @throws IOException + * @throws IOException */ public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning) throws IOException;