Index: src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java (revision 955706) +++ src/main/java/org/apache/hadoop/hbase/master/ZKUnassignedWatcher.java (working copy) @@ -42,13 +42,17 @@ private static final Log LOG = LogFactory.getLog(ZKUnassignedWatcher.class); private ZooKeeperWrapper zkWrapper = null; + String serverName = null; + ServerManager serverManager = null; - public static void start(Configuration conf) throws IOException { - new ZKUnassignedWatcher(conf); + public static void start(Configuration conf, ServerManager serverManager, String serverName) throws IOException { + new ZKUnassignedWatcher(conf, serverManager, serverName); LOG.debug("Started ZKUnassigned watcher"); } - public ZKUnassignedWatcher(Configuration conf) throws IOException { + public ZKUnassignedWatcher(Configuration conf, ServerManager serverManager, String serverName) throws IOException { + this.serverName = serverName; + this.serverManager = serverManager; zkWrapper = ZooKeeperWrapper.getInstance(conf, HMaster.class.getName()); // If the UNASSIGNED ZNode does not exist, create it. @@ -144,12 +148,12 @@ // if the node was CLOSED then handle it if(rsEvent == HBaseEventType.RS2ZK_REGION_CLOSED) { - new MasterCloseRegionHandler(rsEvent, region, data).submit(); + new MasterCloseRegionHandler(rsEvent, serverManager, serverName, region, data).submit(); } // if the region was OPENED then handle that else if(rsEvent == HBaseEventType.RS2ZK_REGION_OPENED || rsEvent == HBaseEventType.RS2ZK_REGION_OPENING) { - new MasterOpenRegionHandler(rsEvent, region, data).submit(); + new MasterOpenRegionHandler(rsEvent, serverManager, serverName, region, data).submit(); } } } Index: src/main/java/org/apache/hadoop/hbase/master/handler/MasterOpenRegionHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/handler/MasterOpenRegionHandler.java (revision 955706) +++ src/main/java/org/apache/hadoop/hbase/master/handler/MasterOpenRegionHandler.java (working copy) @@ -29,6 +29,7 @@ import org.apache.hadoop.hbase.executor.RegionTransitionEventData; import org.apache.hadoop.hbase.executor.HBaseEventHandler; import org.apache.hadoop.hbase.master.HMaster; +import org.apache.hadoop.hbase.master.ServerManager; import org.apache.hadoop.hbase.util.Writables; /** @@ -46,11 +47,17 @@ protected byte[] serializedData; private String regionName; private RegionTransitionEventData hbEventData; + ServerManager serverManager; - public MasterOpenRegionHandler(HBaseEventType eventType, String regionName, byte[] serData) { - super(false, HMaster.MASTER, eventType); + public MasterOpenRegionHandler(HBaseEventType eventType, + ServerManager serverManager, + String serverName, + String regionName, + byte[] serData) { + super(false, serverName, eventType); this.regionName = regionName; this.serializedData = serData; + this.serverManager = serverManager; } /** Index: src/main/java/org/apache/hadoop/hbase/master/handler/MasterCloseRegionHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/handler/MasterCloseRegionHandler.java (revision 955706) +++ src/main/java/org/apache/hadoop/hbase/master/handler/MasterCloseRegionHandler.java (working copy) @@ -26,6 +26,7 @@ import org.apache.hadoop.hbase.executor.RegionTransitionEventData; import org.apache.hadoop.hbase.executor.HBaseEventHandler; import org.apache.hadoop.hbase.master.HMaster; +import org.apache.hadoop.hbase.master.ServerManager; import org.apache.hadoop.hbase.util.Writables; /** @@ -41,11 +42,17 @@ private String regionName; protected byte[] serializedData; RegionTransitionEventData hbEventData; + ServerManager serverManager; - public MasterCloseRegionHandler(HBaseEventType eventType, String regionName, byte[] serializedData) { - super(false, HMaster.MASTER, eventType); + public MasterCloseRegionHandler(HBaseEventType eventType, + ServerManager serverManager, + String serverName, + String regionName, + byte[] serializedData) { + super(false, serverName, eventType); this.regionName = regionName; this.serializedData = serializedData; + this.serverManager = serverManager; } /** Index: src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 955706) +++ src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -217,13 +217,11 @@ // Start the unassigned watcher - which will create the unassgined region // in ZK. This is needed before RegionManager() constructor tries to assign // the root region. - ZKUnassignedWatcher.start(this.conf); - // init the various event handlers - HBaseEventHandler.init(serverManager); + ZKUnassignedWatcher.start(this.conf, serverManager, address.toString()); // start the "close region" executor service - HBaseEventType.RS2ZK_REGION_CLOSED.startMasterExecutorService(MASTER); + HBaseEventType.RS2ZK_REGION_CLOSED.startMasterExecutorService(address.toString()); // start the "open region" executor service - HBaseEventType.RS2ZK_REGION_OPENED.startMasterExecutorService(MASTER); + HBaseEventType.RS2ZK_REGION_OPENED.startMasterExecutorService(address.toString()); // start the region manager Index: src/main/java/org/apache/hadoop/hbase/executor/HBaseEventHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/executor/HBaseEventHandler.java (revision 955706) +++ src/main/java/org/apache/hadoop/hbase/executor/HBaseEventHandler.java (working copy) @@ -60,19 +60,8 @@ // listeners that are called before and after an event is processed protected static List eventHandlerListeners = Collections.synchronizedList(new ArrayList()); - // static instances needed by the handlers - protected static ServerManager serverManager; - + /** - * Note that this has to be called first BEFORE the subclass constructors. - * - * TODO: take out after refactor - */ - public static void init(ServerManager serverManager) { - HBaseEventHandler.serverManager = serverManager; - } - - /** * This interface provides hooks to listen to various events received by the * queue. A class implementing this can listen to the updates by calling * registerListener and stop receiving updates by calling unregisterListener @@ -124,7 +113,7 @@ case RS2ZK_REGION_OPENING: case RS2ZK_REGION_OPENED: - executorServiceType = HBaseExecutorServiceType.MASTER_CLOSEREGION; + executorServiceType = HBaseExecutorServiceType.MASTER_OPENREGION; break; case M2ZK_REGION_OFFLINE: @@ -212,7 +201,11 @@ } // call the main process function - process(); + try { + process(); + } catch(Throwable t) { + LOG.error("Caught throwable while processing event " + eventType, t); + } // fire all afterProcess listeners for(HBaseEventHandlerListener listener : eventHandlerListeners) {