This is an automated email from the ASF dual-hosted git repository.

wchevreuil pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new cc38de1  HBASE-22643 : Delete region without archiving only if 
regiondir is present
cc38de1 is described below

commit cc38de1a391234a176796bbc4ea8a1c5053a4e3d
Author: Viraj Jasani <[email protected]>
AuthorDate: Mon Jul 1 00:08:56 2019 +0530

    HBASE-22643 : Delete region without archiving only if regiondir is present
    
    Signed-off-by: Wellington Chevreuil <[email protected]>
    Signed-off-by: Xu Cang <[email protected]>
---
 .../apache/hadoop/hbase/backup/HFileArchiver.java  |  4 +-
 .../hadoop/hbase/backup/TestHFileArchiving.java    | 44 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/HFileArchiver.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/HFileArchiver.java
index 4fb9f4f..53d2dbb 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/HFileArchiver.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/HFileArchiver.java
@@ -120,7 +120,9 @@ public class HFileArchiver {
     if (tableDir == null || regionDir == null) {
       LOG.error("No archive directory could be found because tabledir (" + 
tableDir
           + ") or regiondir (" + regionDir + "was null. Deleting files 
instead.");
-      deleteRegionWithoutArchiving(fs, regionDir);
+      if (regionDir != null) {
+        deleteRegionWithoutArchiving(fs, regionDir);
+      }
       // we should have archived, but failed to. Doesn't matter if we deleted
       // the archived files correctly or not.
       return false;
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java
index eee0ac3..144cdfd 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java
@@ -526,6 +526,50 @@ public class TestHFileArchiving {
     }
   }
 
+  @Test
+  public void testArchiveRegionTableAndRegionDirsNull() throws IOException {
+    Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");
+    FileSystem fileSystem = UTIL.getTestFileSystem();
+    // Try to archive the file but with null regionDir, can't delete sourceFile
+    assertFalse(HFileArchiver.archiveRegion(fileSystem, rootDir, null, null));
+  }
+
+  @Test
+  public void testArchiveRegionWithTableDirNull() throws IOException {
+    Path regionDir = new Path(FSUtils.getTableDir(new Path("./"),
+            TableName.valueOf(name.getMethodName())), "xyzabc");
+    Path familyDir = new Path(regionDir, "rd");
+    Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");
+    Path file = new Path(familyDir, "1");
+    Path sourceFile = new Path(rootDir, file);
+    FileSystem fileSystem = UTIL.getTestFileSystem();
+    fileSystem.createNewFile(sourceFile);
+    Path sourceRegionDir = new Path(rootDir, regionDir);
+    fileSystem.mkdirs(sourceRegionDir);
+    // Try to archive the file
+    assertFalse(HFileArchiver.archiveRegion(fileSystem, rootDir, null, 
sourceRegionDir));
+    assertFalse(fileSystem.exists(sourceRegionDir));
+  }
+
+  @Test
+  public void testArchiveRegionWithRegionDirNull() throws IOException {
+    Path regionDir = new Path(FSUtils.getTableDir(new Path("./"),
+            TableName.valueOf(name.getMethodName())), "elgn4nf");
+    Path familyDir = new Path(regionDir, "rdar");
+    Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");
+    Path file = new Path(familyDir, "2");
+    Path sourceFile = new Path(rootDir, file);
+    FileSystem fileSystem = UTIL.getTestFileSystem();
+    fileSystem.createNewFile(sourceFile);
+    Path sourceRegionDir = new Path(rootDir, regionDir);
+    fileSystem.mkdirs(sourceRegionDir);
+    // Try to archive the file but with null regionDir, can't delete sourceFile
+    assertFalse(HFileArchiver.archiveRegion(fileSystem, rootDir, 
sourceRegionDir.getParent(),
+            null));
+    assertTrue(fileSystem.exists(sourceRegionDir));
+    fileSystem.delete(sourceRegionDir, true);
+  }
+
   // Avoid passing a null master to CleanerChore, see HBASE-21175
   private HFileCleaner getHFileCleaner(Stoppable stoppable, Configuration conf,
         FileSystem fs, Path archiveDir) throws IOException {

Reply via email to