You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2008/12/27 00:25:24 UTC
svn commit: r729562 - in /hadoop/hbase/branches/0.19_on_hadoop_0.18: ./
src/java/org/apache/hadoop/hbase/regionserver/
src/java/org/apache/hadoop/hbase/util/
Author: apurtell
Date: Fri Dec 26 15:25:24 2008
New Revision: 729562
URL: http://svn.apache.org/viewvc?rev=729562&view=rev
Log:
merge up to trunk (revision 729561)
Modified:
hadoop/hbase/branches/0.19_on_hadoop_0.18/CHANGES.txt
hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/MemcacheFlusher.java
hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/util/Threads.java
Modified: hadoop/hbase/branches/0.19_on_hadoop_0.18/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19_on_hadoop_0.18/CHANGES.txt?rev=729562&r1=729561&r2=729562&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19_on_hadoop_0.18/CHANGES.txt (original)
+++ hadoop/hbase/branches/0.19_on_hadoop_0.18/CHANGES.txt Fri Dec 26 15:25:24 2008
@@ -117,6 +117,7 @@
(Tim Sell via Stack)
HBASE-543, HBASE-1046, HBase-1051 A region's state is kept in several places
in the master opening the possibility for race conditions
+ HBASE-1072 Change Thread.join on exit to a timed Thread.join
IMPROVEMENTS
HBASE-901 Add a limit to key length, check key and value length on client side
@@ -189,6 +190,7 @@
HBASE-1069 Show whether HRegion major compacts or not in INFO level
HBASE-1066 Master should support close/open/reassignment/enable/disable
operations on individual regions
+ HBASE-1062 Compactions at (re)start on a large table can overwhelm DFS
NEW FEATURES
HBASE-875 Use MurmurHash instead of JenkinsHash [in bloomfilters]
Modified: hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java?rev=729562&r1=729561&r2=729562&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java (original)
+++ hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java Fri Dec 26 15:25:24 2008
@@ -61,7 +61,7 @@
private final HashSet<HRegion> regionsInQueue = new HashSet<HRegion>();
- private int limit = 1;
+ private volatile int limit = 1;
/** @param server */
public CompactSplitThread(HRegionServer server) {
@@ -77,7 +77,6 @@
public void run() {
while (!this.server.isStopRequested() && this.server.isInSafeMode()) {
try {
- LOG.debug("in safe mode, deferring compactions");
Thread.sleep(this.frequency);
} catch (InterruptedException ex) {
continue;
Modified: hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=729562&r1=729561&r2=729562&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Fri Dec 26 15:25:24 2008
@@ -199,6 +199,9 @@
final LogRoller logRoller;
final LogFlusher logFlusher;
+ // safemode processing
+ SafeModeThread safeModeThread;
+
// flag set after we're done setting up server threads (used for testing)
protected volatile boolean isOnline;
@@ -523,7 +526,8 @@
}
join();
- runThread(this.hdfsShutdownThread);
+ runThread(this.hdfsShutdownThread,
+ this.conf.getLong("hbase.dfs.shutdown.wait", 30000));
LOG.info(Thread.currentThread().getName() + " exiting");
}
@@ -531,12 +535,12 @@
* Run and wait on passed thread in HRS context.
* @param t
*/
- public void runThread(final Thread t) {
+ public void runThread(final Thread t, final long dfsShutdownWait) {
if (t == null) {
return;
}
t.start();
- Threads.shutdown(t);
+ Threads.shutdown(t, dfsShutdownWait);
}
/**
@@ -590,14 +594,6 @@
this.logFlusher.setHLog(log);
// Init in here rather than in constructor after thread name has been set
this.metrics = new RegionServerMetrics();
- // start thread for turning off safemode
- if (conf.getInt("hbase.regionserver.safemode.period", 0) < 1) {
- safeMode.set(false);
- compactSplitThread.setLimit(-1);
- LOG.debug("skipping safe mode");
- } else {
- new SafemodeThread().start();
- }
startServiceThreads();
isOnline = true;
} catch (Throwable e) {
@@ -730,13 +726,7 @@
/**
* Thread for toggling safemode after some configurable interval.
*/
- private class SafemodeThread extends Thread {
-
- public void start() {
- // make this thread a daemon so it will not delay any shutdown
- this.setDaemon(true);
- super.start();
- }
+ private class SafeModeThread extends Thread {
public void run() {
// first, wait the required interval before turning off safemode
@@ -745,6 +735,11 @@
try {
Thread.sleep(safemodeInterval);
} catch (InterruptedException ex) {
+ // turn off safemode and limits on the way out due to some kind of
+ // abnormal condition so we do not prevent such things as memcache
+ // flushes and worsen the situation
+ safeMode.set(false);
+ compactSplitThread.setLimit(-1);
if (LOG.isDebugEnabled()) {
LOG.debug(this.getName() + " exiting on interrupt");
}
@@ -763,7 +758,8 @@
2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- -1 };
+ -1
+ };
for (int i = 0; i < limitSteps.length; i++) {
if (LOG.isDebugEnabled()) {
LOG.debug("setting compaction limit to " + limitSteps[i]);
@@ -772,11 +768,11 @@
try {
Thread.sleep(compactionCheckInterval);
} catch (InterruptedException ex) {
+ // unlimit compactions before exiting
+ compactSplitThread.setLimit(-1);
if (LOG.isDebugEnabled()) {
LOG.debug(this.getName() + " exiting on interrupt");
}
- // unlimit compactions before exiting
- compactSplitThread.setLimit(-1);
return;
}
}
@@ -1003,6 +999,18 @@
this.infoServer.setAttribute("regionserver", this);
this.infoServer.start();
}
+
+ // Set up the safe mode handler if safe mode has been configured.
+ if (conf.getInt("hbase.regionserver.safemode.period", 0) < 1) {
+ safeMode.set(false);
+ compactSplitThread.setLimit(-1);
+ LOG.debug("skipping safe mode");
+ } else {
+ this.safeModeThread = new SafeModeThread();
+ Threads.setDaemonThreadRunning(this.safeModeThread, n + ".safeMode",
+ handler);
+ }
+
// Start Server. This service is like leases in that it internally runs
// a thread.
this.server.start();
Modified: hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/MemcacheFlusher.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/MemcacheFlusher.java?rev=729562&r1=729561&r2=729562&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/MemcacheFlusher.java (original)
+++ hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/regionserver/MemcacheFlusher.java Fri Dec 26 15:25:24 2008
@@ -122,7 +122,6 @@
public void run() {
while (!this.server.isStopRequested() && this.server.isInSafeMode()) {
try {
- LOG.debug("in safe mode, deferring memcache flushes");
Thread.sleep(threadWakeFrequency);
} catch (InterruptedException ex) {
continue;
Modified: hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/util/Threads.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/util/Threads.java?rev=729562&r1=729561&r2=729562&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/util/Threads.java (original)
+++ hadoop/hbase/branches/0.19_on_hadoop_0.18/src/java/org/apache/hadoop/hbase/util/Threads.java Fri Dec 26 15:25:24 2008
@@ -63,12 +63,25 @@
* @param t Thread to shutdown
*/
public static void shutdown(final Thread t) {
+ shutdown(t, -1);
+ }
+
+ /**
+ * Shutdown passed thread using isAlive and join.
+ * @param joinwait Pass -1 if we're to wait forever.
+ * @param t Thread to shutdown
+ */
+ public static void shutdown(final Thread t, final long joinwait) {
while (t.isAlive()) {
try {
- t.join();
+ if (joinwait == -1) {
+ t.join();
+ } else {
+ t.join(joinwait);
+ }
} catch (InterruptedException e) {
- LOG.warn(t.getName(), e);
+ LOG.warn(t.getName() + "; joinwait=" + joinwait, e);
}
}
}
-}
+}
\ No newline at end of file