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());
+ }
}