From 8f9187a42054308dedf9886e6909795eb6882081 Mon Sep 17 00:00:00 2001 From: Prathyusha Garre Date: Tue, 16 Sep 2025 21:35:50 +0530 Subject: [PATCH] HBASE-29598 Fix regionDir in clone snapshots wfw to clone all mob files rightly to mobdir --- .../storefiletracker/StoreFileTrackerFactory.java | 13 +++++++++++-- .../hbase/snapshot/RestoreSnapshotHelper.java | 3 +-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerFactory.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerFactory.java index 828f1974fca7..8f228dd71b19 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerFactory.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerFactory.java @@ -24,6 +24,7 @@ import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.client.TableDescriptorBuilder; +import org.apache.hadoop.hbase.mob.MobUtils; import org.apache.hadoop.hbase.procedure2.util.StringUtils; import org.apache.hadoop.hbase.regionserver.HRegionFileSystem; import org.apache.hadoop.hbase.regionserver.StoreContext; @@ -118,7 +119,15 @@ public static Class getTrackerClass(String trackerNa public static StoreFileTracker create(Configuration conf, boolean isPrimaryReplica, StoreContext ctx) { - Class tracker = getTrackerClass(conf); + Class tracker; + if ( + ctx != null && ctx.getRegionInfo().getEncodedName() + .equals(MobUtils.getMobRegionInfo(ctx.getTableName()).getEncodedName()) + ) { + tracker = Trackers.DEFAULT.clazz; + } else { + tracker = getTrackerClass(conf); + } LOG.debug("instantiating StoreFileTracker impl {}", tracker.getName()); return ReflectionUtils.newInstance(tracker, conf, isPrimaryReplica, ctx); } @@ -186,7 +195,7 @@ public static TableDescriptor updateWithTrackerConfigs(Configuration conf, // descriptors with the SFT impl specific configs. By the time this happens, the table has no // regions nor stores yet, so it can't create a proper StoreContext. if (StringUtils.isEmpty(descriptor.getValue(TRACKER_IMPL))) { - StoreFileTracker tracker = StoreFileTrackerFactory.create(conf, true, null); + StoreFileTracker tracker = create(conf, true, null); TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(descriptor); return tracker.updateWithTrackerConfigs(builder).build(); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java index 3f01432472de..4fd573d63b5e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java @@ -661,8 +661,7 @@ private void cloneRegion(final RegionInfo newRegionInfo, final Path regionDir, for (SnapshotRegionManifest.FamilyFiles familyFiles : manifest.getFamilyFilesList()) { Path familyDir = new Path(regionDir, familyFiles.getFamilyName().toStringUtf8()); List clonedFiles = new ArrayList<>(); - Path regionPath = new Path(tableDir, newRegionInfo.getEncodedName()); - HRegionFileSystem regionFS = (fs.exists(regionPath)) + HRegionFileSystem regionFS = (fs.exists(regionDir)) ? HRegionFileSystem.openRegionFromFileSystem(conf, fs, tableDir, newRegionInfo, false) : HRegionFileSystem.createRegionOnFileSystem(conf, fs, tableDir, newRegionInfo);