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
