You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2012/09/07 22:34:59 UTC
svn commit: r1382163 -
/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
Author: tedyu
Date: Fri Sep 7 20:34:59 2012
New Revision: 1382163
URL: http://svn.apache.org/viewvc?rev=1382163&view=rev
Log:
HBASE-6713 Stopping META/ROOT RS may take 50mins when some region is splitting (Chunhui)
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1382163&r1=1382162&r2=1382163&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Fri Sep 7 20:34:59 2012
@@ -766,17 +766,29 @@ public class HRegionServer implements HR
// Just skip out w/o closing regions. Used when testing.
} else if (abortRequested) {
if (this.fsOk) {
- closeAllRegions(abortRequested); // Don't leave any open file handles
+ closeUserRegions(abortRequested); // Don't leave any open file handles
}
LOG.info("aborting server " + this.serverNameFromMasterPOV);
} else {
- closeAllRegions(abortRequested);
+ closeUserRegions(abortRequested);
closeAllScanners();
LOG.info("stopping server " + this.serverNameFromMasterPOV);
}
// Interrupt catalog tracker here in case any regions being opened out in
// handlers are stuck waiting on meta or root.
if (this.catalogTracker != null) this.catalogTracker.stop();
+
+ // Closing the compactSplit thread before closing meta regions
+ if (!this.killed && containsMetaTableRegions()) {
+ if (!abortRequested || this.fsOk) {
+ if (this.compactSplitThread != null) {
+ this.compactSplitThread.join();
+ this.compactSplitThread = null;
+ }
+ closeMetaTableRegions(abortRequested);
+ }
+ }
+
if (!this.killed && this.fsOk) {
waitOnAllRegionsToClose(abortRequested);
LOG.info("stopping server " + this.serverNameFromMasterPOV +
@@ -811,11 +823,16 @@ public class HRegionServer implements HR
LOG.info(Thread.currentThread().getName() + " exiting");
}
+ private boolean containsMetaTableRegions() {
+ return onlineRegions.containsKey(HRegionInfo.ROOT_REGIONINFO.getEncodedName())
+ || onlineRegions.containsKey(HRegionInfo.FIRST_META_REGIONINFO.getEncodedName());
+ }
+
private boolean areAllUserRegionsOffline() {
if (getNumberOfOnlineRegions() > 2) return false;
boolean allUserRegionsOffline = true;
for (Map.Entry<String, HRegion> e: this.onlineRegions.entrySet()) {
- if (!e.getValue().getRegionInfo().isMetaRegion()) {
+ if (!e.getValue().getRegionInfo().isMetaTable()) {
allUserRegionsOffline = false;
break;
}
@@ -1890,7 +1907,14 @@ public class HRegionServer implements HR
*/
protected void closeAllRegions(final boolean abort) {
closeUserRegions(abort);
- // Only root and meta should remain. Are we carrying root or meta?
+ closeMetaTableRegions(abort);
+ }
+
+ /**
+ * Close root and meta regions if we carry them
+ * @param abort Whether we're running an abort.
+ */
+ void closeMetaTableRegions(final boolean abort) {
HRegion meta = null;
HRegion root = null;
this.lock.writeLock().lock();
@@ -1922,7 +1946,7 @@ public class HRegionServer implements HR
try {
for (Map.Entry<String, HRegion> e: this.onlineRegions.entrySet()) {
HRegion r = e.getValue();
- if (!r.getRegionInfo().isMetaRegion() && r.isAvailable()) {
+ if (!r.getRegionInfo().isMetaTable() && r.isAvailable()) {
// Don't update zk with this close transition; pass false.
closeRegion(r.getRegionInfo(), abort, false);
}