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);
     }