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 {