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

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


The following commit(s) were added to refs/heads/branch-2.6 by this push:
     new 9f72972a784 HBASE-29021 When StoreFileTracker is FILE, unable to 
recognize StoreFileListFile after upgrade from 2.5 to 2.6 (#6552)
9f72972a784 is described below

commit 9f72972a784938c29f17da8546b4af6575a60a4f
Author: Jaehui Lee <[email protected]>
AuthorDate: Mon Dec 23 15:40:54 2024 +0900

    HBASE-29021 When StoreFileTracker is FILE, unable to recognize 
StoreFileListFile after upgrade from 2.5 to 2.6 (#6552)
    
    Signed-off-by: Duo Zhang <[email protected]>
    Reviewed-by: Viraj Jasani <[email protected]>
    (cherry picked from commit d1a296580026ded2a0951cf85b87c49b0eff0c4c)
---
 .../storefiletracker/StoreFileListFile.java             |  6 ++++--
 .../storefiletracker/TestStoreFileListFile.java         | 17 +++++++++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
index b6287b076b3..e107688b3d7 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
@@ -84,7 +84,7 @@ class StoreFileListFile {
 
   static final char TRACK_FILE_SEPARATOR = '.';
 
-  static final Pattern TRACK_FILE_PATTERN = Pattern.compile("^f(1|2)\\.\\d+$");
+  static final Pattern TRACK_FILE_PATTERN = 
Pattern.compile("^f(1|2)(\\.\\d+)?$");
 
   // 16 MB, which is big enough for a tracker file
   private static final int MAX_FILE_SIZE = 16 * 1024 * 1024;
@@ -179,7 +179,9 @@ class StoreFileListFile {
         continue;
       }
       List<String> parts = 
Splitter.on(TRACK_FILE_SEPARATOR).splitToList(file.getName());
-      map.computeIfAbsent(Long.parseLong(parts.get(1)), k -> new 
ArrayList<>()).add(file);
+      // For compatibility, set the timestamp to 0 if it is missing in the 
file name.
+      long timestamp = parts.size() > 1 ? Long.parseLong(parts.get(1)) : 0L;
+      map.computeIfAbsent(timestamp, k -> new ArrayList<>()).add(file);
     }
     return map;
   }
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
index c7d3838ecd6..fd47cd27913 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
@@ -239,4 +239,21 @@ public class TestStoreFileListFile {
     assertEquals("Higher store file list version detected, expected " + 
StoreFileListFile.VERSION
       + ", got " + (StoreFileListFile.VERSION + 1), error.getMessage());
   }
+
+  @Test
+  public void testLoadOldPatternTrackFiles() throws IOException {
+    FileSystem fs = FileSystem.get(UTIL.getConfiguration());
+    StoreFileList storeFileList =
+      
StoreFileList.newBuilder().setTimestamp(EnvironmentEdgeManager.currentTime())
+        
.addStoreFile(StoreFileEntry.newBuilder().setName("hehe").setSize(10).build()).build();
+    Path trackFileDir = new Path(testDir, StoreFileListFile.TRACK_FILE_DIR);
+    StoreFileListFile.write(fs, new Path(trackFileDir, 
StoreFileListFile.TRACK_FILE_PREFIX),
+      storeFileList);
+
+    FileStatus trackerFileStatus = getOnlyTrackerFile(fs);
+    assertEquals(StoreFileListFile.TRACK_FILE_PREFIX, 
trackerFileStatus.getPath().getName());
+
+    StoreFileList list = storeFileListFile.load(true);
+    assertEquals(1, list.getStoreFileCount());
+  }
 }

Reply via email to