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/40953120
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/40953120
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/40953120

Branch: refs/heads/branch-1
Commit: 409531209ea251e76360ab9873caea12ae82245f
Parents: 3ea999d
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:16 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/40953120/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 a2b43e9..8bff5d2 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
@@ -2710,7 +2710,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();
   }
 
@@ -3208,7 +3211,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();
@@ -3219,8 +3226,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;
+    }
   }
 
   /**
@@ -3230,7 +3241,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/40953120/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 0ccdc27..c238746 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
@@ -1432,7 +1432,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/40953120/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;

Reply via email to