From 7184949ceac0904ba588fd5348492e0e7e8d27a0 Mon Sep 17 00:00:00 2001 From: BukrosSzabolcs Date: Sun, 5 Jun 2022 20:51:28 +0200 Subject: [PATCH] HBASE-27017: MOB snapshot is broken when FileBased SFT is used (#4466) Signed-off-by: Duo Zhang Signed-off-by: Wellington Chevreuil --- .../hadoop/hbase/snapshot/SnapshotManifest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java index e19be3f554b..e578b9f9764 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotManifest.java @@ -36,6 +36,7 @@ import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; +import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.errorhandling.ForeignExceptionSnare; @@ -310,7 +311,17 @@ public final class SnapshotManifest { for (ColumnFamilyDescriptor cfd : htd.getColumnFamilies()) { Object familyData = visitor.familyOpen(regionData, cfd.getName()); monitor.rethrowException(); - StoreFileTracker tracker = StoreFileTrackerFactory.create(conf, htd, cfd, regionFs); + StoreFileTracker tracker = null; + if (isMobRegion) { + // MOB regions are always using the default SFT implementation + ColumnFamilyDescriptor defaultSFTCfd = ColumnFamilyDescriptorBuilder.newBuilder(cfd) + .setValue(StoreFileTrackerFactory.TRACKER_IMPL, + StoreFileTrackerFactory.Trackers.DEFAULT.name()) + .build(); + tracker = StoreFileTrackerFactory.create(conf, htd, defaultSFTCfd, regionFs); + } else { + tracker = StoreFileTrackerFactory.create(conf, htd, cfd, regionFs); + } List storeFiles = tracker.load(); if (storeFiles.isEmpty()) { LOG.debug("No files under family: {}", cfd.getNameAsString());