Author: mbautin
Date: Thu Feb  2 23:30:28 2012
New Revision: 1239930

URL: http://svn.apache.org/viewvc?rev=1239930&view=rev
Log:
fix fs.delete(path, false) usage

Summary: Facebook's internal hdfs always fails for fs.delete(path, false). hdfs
0.23 works as expected - it will delete path if it is a file or if it is an
empty directory.  This issue is only applicable to 89-fb, so it does need to be
ported to HBase trunk.

Test Plan: modified unit test. the test fails w/o this diff

Reviewers: kannan, liyintang, pritam

Reviewed By: pritam

CC: hbase-eng@lists

Differential Revision: https://phabricator.fb.com/D400044


Modified:
    
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
    
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestSplitLogManager.java

Modified: 
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java?rev=1239930&r1=1239929&r2=1239930&view=diff
==============================================================================
--- 
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
 (original)
+++ 
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
 Thu Feb  2 23:30:28 2012
@@ -275,17 +275,19 @@ public class SplitLogManager implements 
       for (Path logDir : logDirs) {
         status.setStatus("Cleaning up log directory...");
         try {
-          if (fs.exists(logDir) && !fs.delete(logDir, false)) {
-            LOG.warn("Unable to delete log src dir. Ignoring. " + logDir);
+          if (fs.exists(logDir)) {
+            FileStatus[] files = fs.listStatus(logDir);
+            if (files == null || files.length == 0) {
+              if (fs.delete(logDir, true) == false) {
+                LOG.warn("Unable to delete log src dir. Ignoring. " + logDir);
+              }
+            } else {
+              LOG.warn("returning success without actually splitting and " + 
+                  "deleting all the log files in path " + logDir);
+            }
           }
         } catch (IOException ioe) {
-          FileStatus[] files = fs.listStatus(logDir);
-          if (files != null && files.length > 0) {
-            LOG.warn("returning success without actually splitting and " +
-                "deleting all the log files in path " + logDir);
-          } else {
-            LOG.warn("Unable to delete log src dir. Ignoring. " + logDir, ioe);
-          }
+          LOG.warn("Unable to delete log src dir. Ignoring. " + logDir, ioe);
         }
       }
       tot_mgr_log_split_batch_success.incrementAndGet();

Modified: 
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestSplitLogManager.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestSplitLogManager.java?rev=1239930&r1=1239929&r2=1239930&view=diff
==============================================================================
--- 
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestSplitLogManager.java
 (original)
+++ 
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestSplitLogManager.java
 Thu Feb  2 23:30:28 2012
@@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.master.Sp
 import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;
 import org.apache.hadoop.hbase.zookeeper.ZKSplitLog.TaskState;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.zookeeper.CreateMode;
@@ -436,12 +437,14 @@ public class TestSplitLogManager {
     LOG.info("testEmptyLogDir");
     slm = new SplitLogManager(zkw, conf, stopper, "dummy-master", null);
     slm.finishInitialization();
-    FileSystem fs = TEST_UTIL.getTestFileSystem();
+    MiniDFSCluster cluster = TEST_UTIL.startMiniDFSCluster(1);
+    FileSystem fs = cluster.getFileSystem();
     Path emptyLogDirPath = new Path(fs.getWorkingDirectory(),
         UUID.randomUUID().toString());
     fs.mkdirs(emptyLogDirPath);
     slm.splitLogDistributed(emptyLogDirPath);
     assertFalse(fs.exists(emptyLogDirPath));
+    cluster.shutdown();
   }
 
   @Test


Reply via email to