Author: garyh
Date: Tue Jun 21 00:20:29 2011
New Revision: 1137830

URL: http://svn.apache.org/viewvc?rev=1137830&view=rev
Log:
HBASE-4011  Add MasterObserver hook for post active master initialization

Modified:
    hbase/trunk/CHANGES.txt
    
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
    
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
    
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java

Modified: hbase/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1137830&r1=1137829&r2=1137830&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Tue Jun 21 00:20:29 2011
@@ -269,6 +269,7 @@ Release 0.91.0 - Unreleased
                periodically (Li Pi)
    HBASE-3789  Cleanup the locking contention in the master
    HBASE-3927  Display total uncompressed byte size of a region in web UI
+   HBASE-4011  New MasterObserver hook: post startup of active master
 
   TASKS
    HBASE-3559  Move report of split to master OFF the heartbeat channel

Modified: 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java?rev=1137830&r1=1137829&r2=1137830&view=diff
==============================================================================
--- 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
 (original)
+++ 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
 Tue Jun 21 00:20:29 2011
@@ -162,6 +162,11 @@ public class BaseMasterObserver implemen
   }
 
   @Override
+  public void postStartMaster(ObserverContext<MasterCoprocessorEnvironment> 
ctx)
+      throws IOException {
+  }
+
+  @Override
   public void start(CoprocessorEnvironment ctx) throws IOException {
   }
 

Modified: 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java?rev=1137830&r1=1137829&r2=1137830&view=diff
==============================================================================
--- 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
 (original)
+++ 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
 Tue Jun 21 00:20:29 2011
@@ -217,4 +217,12 @@ public interface MasterObserver extends 
    */
   void preStopMaster(final ObserverContext<MasterCoprocessorEnvironment> ctx)
       throws IOException;
+
+  /**
+   * Called immediately after an active master instance has completed
+   * initialization.  Will not be called on standby master instances unless
+   * they take over the active role.
+   */
+  void postStartMaster(final ObserverContext<MasterCoprocessorEnvironment> ctx)
+      throws IOException;
 }

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1137830&r1=1137829&r2=1137830&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Tue 
Jun 21 00:20:29 2011
@@ -468,6 +468,15 @@ implements HMasterInterface, HMasterRegi
     status.markComplete("Initialization successful");
     LOG.info("Master has completed initialization");
     initialized = true;
+
+    if (this.cpHost != null) {
+      // don't let cp initialization errors kill the master
+      try {
+        this.cpHost.postStartMaster();
+      } catch (IOException ioe) {
+        LOG.error("Coprocessor postStartMaster() hook failed", ioe);
+      }
+    }
   }
 
   public boolean isMetaHRIUpdated()

Modified: 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java?rev=1137830&r1=1137829&r2=1137830&view=diff
==============================================================================
--- 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
 (original)
+++ 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
 Tue Jun 21 00:20:29 2011
@@ -466,4 +466,16 @@ public class MasterCoprocessorHost
     }
   }
 
+  void postStartMaster() throws IOException {
+    ObserverContext<MasterCoprocessorEnvironment> ctx = null;
+    for (MasterEnvironment env: coprocessors) {
+      if (env.getInstance() instanceof MasterObserver) {
+        ctx = ObserverContext.createAndPrepare(env, ctx);
+        ((MasterObserver)env.getInstance()).postStartMaster(ctx);
+        if (ctx.shouldComplete()) {
+          break;
+        }
+      }
+    }
+  }
 }

Modified: 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java?rev=1137830&r1=1137829&r2=1137830&view=diff
==============================================================================
--- 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
 (original)
+++ 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
 Tue Jun 21 00:20:29 2011
@@ -86,6 +86,7 @@ public class TestMasterObserver {
     private boolean postBalanceSwitchCalled;
     private boolean preShutdownCalled;
     private boolean preStopMasterCalled;
+    private boolean postStartMasterCalled;
     private boolean startCalled;
     private boolean stopCalled;
 
@@ -313,6 +314,16 @@ public class TestMasterObserver {
     }
 
     @Override
+    public void postStartMaster(ObserverContext<MasterCoprocessorEnvironment> 
ctx)
+        throws IOException {
+      postStartMasterCalled = true;
+    }
+
+    public boolean wasStartMasterCalled() {
+      return postStartMasterCalled;
+    }
+
+    @Override
     public void start(CoprocessorEnvironment env) throws IOException {
       startCalled = true;
     }
@@ -360,6 +371,8 @@ public class TestMasterObserver {
 
     // check basic lifecycle
     assertTrue("MasterObserver should have been started", cp.wasStarted());
+    assertTrue("postStartMaster() hook should have been called",
+        cp.wasStartMasterCalled());
   }
 
   @Test


Reply via email to