Skip to content

Commit a865ce7

Browse files
author
Prathyusha Garre
committed
Fix regionDir in clone snapshots wfw to clone all mob files rightly to mobdir
1 parent 1e06bcc commit a865ce7

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerFactory.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
import java.util.Map;
2323
import org.apache.hadoop.conf.Configuration;
2424
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
25+
import org.apache.hadoop.hbase.client.RegionInfo;
2526
import org.apache.hadoop.hbase.client.TableDescriptor;
2627
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
28+
import org.apache.hadoop.hbase.mob.MobUtils;
2729
import org.apache.hadoop.hbase.procedure2.util.StringUtils;
2830
import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
2931
import org.apache.hadoop.hbase.regionserver.StoreContext;
@@ -118,7 +120,23 @@ public static Class<? extends StoreFileTracker> getTrackerClass(String trackerNa
118120

119121
public static StoreFileTracker create(Configuration conf, boolean isPrimaryReplica,
120122
StoreContext ctx) {
123+
RegionInfo mobRegion = MobUtils.getMobRegionInfo(ctx.getTableName());
124+
Class<? extends StoreFileTracker> tracker;
125+
if (ctx.getRegionInfo().getEncodedName().equals(mobRegion.getEncodedName())) {
126+
tracker = Trackers.DEFAULT.clazz;
127+
} else {
128+
tracker = getTrackerClass(conf);
129+
}
130+
return createSFTInstance(conf, isPrimaryReplica, ctx, tracker);
131+
}
132+
133+
private static StoreFileTracker create(Configuration conf, boolean isPrimaryReplica) {
121134
Class<? extends StoreFileTracker> tracker = getTrackerClass(conf);
135+
return createSFTInstance(conf, isPrimaryReplica, null, tracker);
136+
}
137+
138+
private static StoreFileTracker createSFTInstance(Configuration conf, boolean isPrimaryReplica,
139+
StoreContext ctx, Class<? extends StoreFileTracker> tracker) {
122140
LOG.debug("instantiating StoreFileTracker impl {}", tracker.getName());
123141
return ReflectionUtils.newInstance(tracker, conf, isPrimaryReplica, ctx);
124142
}
@@ -186,7 +204,7 @@ public static TableDescriptor updateWithTrackerConfigs(Configuration conf,
186204
// descriptors with the SFT impl specific configs. By the time this happens, the table has no
187205
// regions nor stores yet, so it can't create a proper StoreContext.
188206
if (StringUtils.isEmpty(descriptor.getValue(TRACKER_IMPL))) {
189-
StoreFileTracker tracker = StoreFileTrackerFactory.create(conf, true, null);
207+
StoreFileTracker tracker = create(conf, true);
190208
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(descriptor);
191209
return tracker.updateWithTrackerConfigs(builder).build();
192210
}

hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,8 +661,7 @@ private void cloneRegion(final RegionInfo newRegionInfo, final Path regionDir,
661661
for (SnapshotRegionManifest.FamilyFiles familyFiles : manifest.getFamilyFilesList()) {
662662
Path familyDir = new Path(regionDir, familyFiles.getFamilyName().toStringUtf8());
663663
List<StoreFileInfo> clonedFiles = new ArrayList<>();
664-
Path regionPath = new Path(tableDir, newRegionInfo.getEncodedName());
665-
HRegionFileSystem regionFS = (fs.exists(regionPath))
664+
HRegionFileSystem regionFS = (fs.exists(regionDir))
666665
? HRegionFileSystem.openRegionFromFileSystem(conf, fs, tableDir, newRegionInfo, false)
667666
: HRegionFileSystem.createRegionOnFileSystem(conf, fs, tableDir, newRegionInfo);
668667

0 commit comments

Comments
 (0)