From 93271bd777dcc1b22ad1f46866170eea9f7c3ede Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Fri, 1 Jun 2018 15:22:18 -0700 Subject: [PATCH] HBASE-20670 NPE in HMaster#isInMaintenanceMode --- .../org/apache/hadoop/hbase/master/HMaster.java | 25 +++++++++++++++++----- .../hadoop/hbase/master/MasterRpcServices.java | 6 +++++- .../apache/hadoop/hbase/master/MasterServices.java | 3 ++- 3 files changed, 27 insertions(+), 7 deletions(-) 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 68b3ce8a53..7068467150 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 @@ -2822,7 +2822,10 @@ public class HMaster extends HRegionServer implements MasterServices { * @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(); } @@ -3359,7 +3362,11 @@ public class HMaster extends HRegionServer implements MasterServices { * @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(); @@ -3370,8 +3377,12 @@ public class HMaster extends HRegionServer implements MasterServices { * 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; + } } /** @@ -3382,7 +3393,11 @@ public class HMaster extends HRegionServer implements MasterServices { */ @Override public boolean isSplitOrMergeEnabled(MasterSwitchType switchType) { - if (null == splitOrMergeTracker || isInMaintenanceMode()) { + try { + if (null == splitOrMergeTracker || isInMaintenanceMode()) { + return false; + } + } catch (IOException e) { return false; } return splitOrMergeTracker.isSplitOrMergeEnabled(switchType); 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 fa4ddf552a..d3202ce3c6 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 @@ -1491,7 +1491,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(); } 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 52046c5149..a6e422907d 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 @@ -352,8 +352,9 @@ public interface MasterServices extends Server { /** * @return true if master is in maintanceMode + * @throws IOException */ - boolean isInMaintenanceMode(); + boolean isInMaintenanceMode() throws IOException; /** * Abort a procedure. -- 2.16.3