HBASE-4816 Regionserver wouldn't go down because split happened exactly at same time we issued bulk user region close call on our way out
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1203814 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8df0e84cf7
commit
b5f5e2aeeb
|
@ -435,6 +435,8 @@ Release 0.92.0 - Unreleased
|
|||
HBASE-4793 HBase shell still using deprecated methods removed in HBASE-4436
|
||||
HBASE-4801 alter_status shell prints sensible message at completion
|
||||
HBASE-4796 Race between SplitRegionHandlers for the same region kills the master
|
||||
HBASE-4816 Regionserver wouldn't go down because split happened exactly at same
|
||||
time we issued bulk user region close call on our way out
|
||||
|
||||
TESTS
|
||||
HBASE-4450 test for number of blocks read: to serve as baseline for expected
|
||||
|
|
|
@ -671,7 +671,6 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
|
|||
LOG.info("Closing user regions");
|
||||
closeUserRegions(this.abortRequested);
|
||||
} else if (this.stopping) {
|
||||
LOG.info("Stopping meta regions, if the HRegionServer hosts any");
|
||||
boolean allUserRegionsOffline = areAllUserRegionsOffline();
|
||||
if (allUserRegionsOffline) {
|
||||
// Set stopped if no requests since last time we went around the loop.
|
||||
|
@ -681,6 +680,11 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
|
|||
break;
|
||||
}
|
||||
oldRequestCount = this.requestCount.get();
|
||||
} else {
|
||||
// Make sure all regions have been closed -- some regions may
|
||||
// have not got it because we were splitting at the time of
|
||||
// the call to closeUserRegions.
|
||||
closeUserRegions(this.abortRequested);
|
||||
}
|
||||
LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());
|
||||
}
|
||||
|
@ -1812,6 +1816,8 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
|
|||
|
||||
/**
|
||||
* Schedule closes on all user regions.
|
||||
* Should be safe calling multiple times because it wont' close regions
|
||||
* that are already closed or that are closing.
|
||||
* @param abort Whether we're running an abort.
|
||||
*/
|
||||
void closeUserRegions(final boolean abort) {
|
||||
|
@ -1820,6 +1826,7 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
|
|||
for (Map.Entry<String, HRegion> e: this.onlineRegions.entrySet()) {
|
||||
HRegion r = e.getValue();
|
||||
if (!r.getRegionInfo().isMetaRegion()) {
|
||||
if (r.isClosed() || r.isClosing()) continue;
|
||||
// Don't update zk with this close transition; pass false.
|
||||
closeRegion(r.getRegionInfo(), abort, false);
|
||||
}
|
||||
|
|
|
@ -52,6 +52,11 @@ class SplitRequest implements Runnable {
|
|||
|
||||
@Override
|
||||
public void run() {
|
||||
if (this.server.isStopping() || this.server.isStopped()) {
|
||||
LOG.debug("Skipping split because server is stopping=" +
|
||||
this.server.isStopping() + " or stopped=" + this.server.isStopped());
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final long startTime = System.currentTimeMillis();
|
||||
SplitTransaction st = new SplitTransaction(parent, midKey);
|
||||
|
@ -90,5 +95,4 @@ class SplitRequest implements Runnable {
|
|||
server.checkFileSystem();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue