HBASE-3914 ROOT region appeared in two regionserver's onlineRegions at the same time
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1127158 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b488975ddd
commit
06b8461cc5
|
@ -285,6 +285,8 @@ Release 0.90.4 - Unreleased
|
|||
HBASE-3908 TableSplit not implementing "hashCode" problem (Daniel Iancu)
|
||||
HBASE-3915 Binary row keys in hbck and other miscellaneous binary key
|
||||
display issues
|
||||
HBASE-3914 ROOT region appeared in two regionserver's onlineRegions at
|
||||
the same time (Jieshan Bean)
|
||||
|
||||
IMPROVEMENT
|
||||
HBASE-3882 hbase-config.sh needs to be updated so it can auto-detects the
|
||||
|
|
|
@ -73,6 +73,26 @@ public class ServerShutdownHandler extends EventHandler {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Before assign the ROOT region, ensure it haven't
|
||||
* been assigned by other place
|
||||
* <p>
|
||||
* Under some scenarios, the ROOT region can be opened twice, so it seemed online
|
||||
* in two regionserver at the same time.
|
||||
* If the ROOT region has been assigned, so the operation can be canceled.
|
||||
* @throws InterruptedException
|
||||
* @throws IOException
|
||||
* @throws KeeperException
|
||||
*/
|
||||
private void verifyAndAssignRoot()
|
||||
throws InterruptedException, IOException, KeeperException {
|
||||
long timeout = this.server.getConfiguration().
|
||||
getLong("hbase.catalog.verification.timeout", 1000);
|
||||
if (!this.server.getCatalogTracker().verifyRootRegionLocation(timeout)) {
|
||||
this.services.getAssignmentManager().assignRoot();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return True if the server we are processing was carrying <code>-ROOT-</code>
|
||||
*/
|
||||
|
@ -104,10 +124,14 @@ public class ServerShutdownHandler extends EventHandler {
|
|||
// Assign root and meta if we were carrying them.
|
||||
if (isCarryingRoot()) { // -ROOT-
|
||||
try {
|
||||
this.services.getAssignmentManager().assignRoot();
|
||||
verifyAndAssignRoot();
|
||||
} catch (KeeperException e) {
|
||||
this.server.abort("In server shutdown processing, assigning root", e);
|
||||
throw new IOException("Aborting", e);
|
||||
} catch (InterruptedException e1) {
|
||||
LOG.warn("Interrupted while verifying root region's location", e1);
|
||||
Thread.currentThread().interrupt();
|
||||
throw new IOException(e1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue