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