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 5024313cea4..714b5a8aede 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 @@ -480,8 +480,12 @@ public class HMaster extends HRegionServer implements MasterServices, Server { ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId()); this.serverManager = createServerManager(this, this); - metaTableLocator = new MetaTableLocator(); - shortCircuitConnection = createShortCircuitConnection(); + synchronized (this) { + if (shortCircuitConnection == null) { + shortCircuitConnection = createShortCircuitConnection(); + metaTableLocator = new MetaTableLocator(); + } + } // Invalidate all write locks held previously this.tableLockManager.reapWriteLocks(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java index 75def7bb9d7..30590963809 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java @@ -27,8 +27,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.ServerName; @@ -43,7 +41,6 @@ import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; */ @InterfaceAudience.Private public class MasterStatusServlet extends HttpServlet { - private static final Log LOG = LogFactory.getLog(MasterStatusServlet.class); private static final long serialVersionUID = 1L; @Override @@ -88,7 +85,9 @@ public class MasterStatusServlet extends HttpServlet { } private ServerName getMetaLocationOrNull(HMaster master) { - return master.getMetaTableLocator().getMetaRegionLocation(master.getZooKeeper()); + MetaTableLocator metaTableLocator = master.getMetaTableLocator(); + return metaTableLocator == null ? null : + metaTableLocator.getMetaRegionLocation(master.getZooKeeper()); } private Map getFragmentationInfo( diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index eab29e73540..7947c4a6c55 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -637,8 +637,12 @@ public class HRegionServer extends HasThread implements this.abort("Failed to retrieve Cluster ID",e); } - shortCircuitConnection = createShortCircuitConnection(); - metaTableLocator = new MetaTableLocator(); + synchronized (this) { + if (shortCircuitConnection == null) { + shortCircuitConnection = createShortCircuitConnection(); + metaTableLocator = new MetaTableLocator(); + } + } // watch for snapshots and other procedures try {