You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2024/12/23 10:04:25 UTC
(hbase) branch branch-2 updated: HBASE-29021 When StoreFileTracker is FILE, unable to recognize StoreFileListFile after upgrade from 2.5 to 2.6 (#6552)
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 b8303e9ba1a HBASE-29021 When StoreFileTracker is FILE, unable to recognize StoreFileListFile after upgrade from 2.5 to 2.6 (#6552)
b8303e9ba1a is described below
commit b8303e9ba1ad9c8ed37fb8b70ae68fd1eb769910
Author: Jaehui Lee <tk...@gmail.com>
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 <zh...@apache.org>
Reviewed-by: Viraj Jasani <vj...@apache.org>
(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());
+ }
}