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

zhangduo pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2 by this push:
     new 6868d803f11 HBASE-28427 FNFE related to 'master:store' when moving 
archived hfiles to global archived dir (#5756)
6868d803f11 is described below

commit 6868d803f11f4d1a615cb1e34c38104729884274
Author: guluo <lupeng_n...@qq.com>
AuthorDate: Mon Mar 18 21:26:15 2024 +0800

    HBASE-28427 FNFE related to 'master:store' when moving archived hfiles to 
global archived dir (#5756)
    
    Signed-off-by: Duo Zhang <zhang...@apache.org>
    (cherry picked from commit 0c1224cc9a844025d483085cd1a4a9c43d17a26f)
---
 .../region/MasterRegionFlusherAndCompactor.java    | 11 ++++++--
 .../hadoop/hbase/regionserver/TestHRegion.java     | 33 ++++++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/region/MasterRegionFlusherAndCompactor.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/region/MasterRegionFlusherAndCompactor.java
index 3d4bfea146e..c06420ea992 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/region/MasterRegionFlusherAndCompactor.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/region/MasterRegionFlusherAndCompactor.java
@@ -142,8 +142,15 @@ class MasterRegionFlusherAndCompactor implements Closeable 
{
       Path globalStoreArchiveDir = 
HFileArchiveUtil.getStoreArchivePathForArchivePath(
         globalArchivePath, region.getRegionInfo(), 
store.getColumnFamilyDescriptor().getName());
       try {
-        MasterRegionUtils.moveFilesUnderDir(fs, storeArchiveDir, 
globalStoreArchiveDir,
-          archivedHFileSuffix);
+        if (fs.exists(storeArchiveDir)) {
+          MasterRegionUtils.moveFilesUnderDir(fs, storeArchiveDir, 
globalStoreArchiveDir,
+            archivedHFileSuffix);
+        } else {
+          LOG.warn(
+            "Archived dir {} does not exist, there is no need to move archived 
hfiles from {} "
+              + "to global dir {} .",
+            storeArchiveDir, storeArchiveDir, globalStoreArchiveDir);
+        }
       } catch (IOException e) {
         LOG.warn("Failed to move archived hfiles from {} to global dir {}", 
storeArchiveDir,
           globalStoreArchiveDir, e);
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
index a69d4f522f6..05993508406 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
@@ -4644,6 +4644,39 @@ public class TestHRegion {
     }
   }
 
+  @Test
+  public void testCloseAndArchiveCompactedFiles() throws IOException {
+    byte[] CF1 = Bytes.toBytes("CF1");
+    byte[] CF2 = Bytes.toBytes("CF2");
+    this.region = initHRegion(tableName, method, CONF, CF1, CF2);
+    for (int i = 0; i < 2; i++) {
+      int index = i;
+      Put put =
+        new Put(Bytes.toBytes(index)).addColumn(CF1, Bytes.toBytes("q"), 
Bytes.toBytes(index));
+      region.put(put);
+      region.flush(true);
+    }
+
+    region.compact(true);
+
+    HStore store1 = region.getStore(CF1);
+    HStore store2 = region.getStore(CF2);
+    store1.closeAndArchiveCompactedFiles();
+    store2.closeAndArchiveCompactedFiles();
+
+    int storefilesCount = 
region.getStores().stream().mapToInt(Store::getStorefilesCount).sum();
+    assertTrue(storefilesCount == 1);
+
+    FileSystem fs = region.getRegionFileSystem().getFileSystem();
+    Configuration conf = region.getReadOnlyConfiguration();
+    RegionInfo regionInfo = region.getRegionInfo();
+    Path store1ArchiveDir = HFileArchiveUtil.getStoreArchivePath(conf, 
regionInfo, CF1);
+    assertTrue(fs.exists(store1ArchiveDir));
+    // The archived dir of CF2 does not exist because this column family has 
no data at all
+    Path store2ArchiveDir = HFileArchiveUtil.getStoreArchivePath(conf, 
regionInfo, CF2);
+    assertFalse(fs.exists(store2ArchiveDir));
+  }
+
   protected class PutThread extends Thread {
     private volatile boolean done;
     private volatile int numPutsFinished = 0;

Reply via email to