You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2012/01/10 18:38:25 UTC
svn commit: r1229654 - in /hbase/branches/0.90: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
Author: ramkrishna
Date: Tue Jan 10 17:38:24 2012
New Revision: 1229654
URL: http://svn.apache.org/viewvc?rev=1229654&view=rev
Log:
HBASE-5137 MasterFileSystem.splitLog() should abort even if waitOnSafeMode() throws IOException (Ram)
Modified:
hbase/branches/0.90/CHANGES.txt
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1229654&r1=1229653&r2=1229654&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Tue Jan 10 17:38:24 2012
@@ -120,6 +120,7 @@ Release 0.90.5 - Dec 22, 2011
(Chunhui Shen)
HBASE-4773 HBaseAdmin may leak ZooKeeper connections (Xufeng)
HBASE-4900 Fix javadoc warnings out on 0.90 branch
+ HBASE-5137 MasterFileSystem.splitLog() should abort even if waitOnSafeMode() throws IOException (Ram)
IMPROVEMENT
HBASE-4205 Enhance HTable javadoc (Eric Charles)
Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java?rev=1229654&r1=1229653&r2=1229654&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/MasterFileSystem.java Tue Jan 10 17:38:24 2012
@@ -191,29 +191,40 @@ public class MasterFileSystem {
this.splitLogLock.lock();
long splitTime = 0, splitLogSize = 0;
Path logDir = new Path(this.rootdir, HLog.getHLogDirectoryName(serverName));
- try {
- HLogSplitter splitter = HLogSplitter.createLogSplitter(
- conf, rootdir, logDir, oldLogDir, this.fs);
+ boolean retrySplitting = !conf.getBoolean("hbase.hlog.split.skip.errors",
+ true);
+ do {
try {
- // If FS is in safe mode, just wait till out of it.
- FSUtils.waitOnSafeMode(conf,
- conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 1000));
- splitter.splitLog();
- } catch (OrphanHLogAfterSplitException e) {
- LOG.warn("Retrying splitting because of:", e);
- // An HLogSplitter instance can only be used once. Get new instance.
- splitter = HLogSplitter.createLogSplitter(conf, rootdir, logDir,
- oldLogDir, this.fs);
- splitter.splitLog();
+ HLogSplitter splitter = HLogSplitter.createLogSplitter(conf, rootdir,
+ logDir, oldLogDir, this.fs);
+ try {
+ // If FS is in safe mode, just wait till out of it.
+ FSUtils.waitOnSafeMode(conf, conf.getInt(
+ HConstants.THREAD_WAKE_FREQUENCY, 1000));
+ splitter.splitLog();
+ } catch (OrphanHLogAfterSplitException e) {
+ LOG.warn("Retrying splitting because of:", e);
+ // An HLogSplitter instance can only be used once. Get new instance.
+ splitter = HLogSplitter.createLogSplitter(conf, rootdir, logDir,
+ oldLogDir, this.fs);
+ splitter.splitLog();
+ }
+ splitTime = splitter.getTime();
+ splitLogSize = splitter.getSize();
+ retrySplitting = false;
+ } catch (IOException e) {
+ if (checkFileSystem() && retrySplitting) {
+ LOG.info("Retrying failed log splitting " + logDir.toString());
+ }
+ else {
+ LOG.fatal("Failed splitting " + logDir.toString(), e);
+ master.abort(
+ "Shutting down HBase cluster: file system not available", e);
+ }
+ } finally {
+ this.splitLogLock.unlock();
}
- splitTime = splitter.getTime();
- splitLogSize = splitter.getSize();
- } catch (IOException e) {
- checkFileSystem();
- LOG.error("Failed splitting " + logDir.toString(), e);
- } finally {
- this.splitLogLock.unlock();
- }
+ } while (retrySplitting);
if (this.metrics != null) {
this.metrics.addSplit(splitTime, splitLogSize);
}