Skip to content

Commit 83c29b0

Browse files
author
Prathyusha Garre
committed
Add validate flag to sft load api
1 parent 7550652 commit 83c29b0

File tree

11 files changed

+46
-19
lines changed

11 files changed

+46
-19
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,10 @@ public static Path getMobTableDir(Path rootDir, TableName tableName) {
395395
return CommonFSUtils.getTableDir(getMobHome(rootDir), tableName);
396396
}
397397

398+
public static Path getMobTableDir(Configuration conf, TableName tableName) {
399+
return getMobTableDir(new Path(conf.get(HConstants.HBASE_DIR)), tableName);
400+
}
401+
398402
/**
399403
* Gets the region dir of the mob files. It's
400404
* {HBASE_DIR}/mobdir/data/{namespace}/{tableName}/{regionEncodedName}.

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ protected void doAddCompactionResults(Collection<StoreFileInfo> compactedFiles,
6464
}
6565

6666
@Override
67-
protected List<StoreFileInfo> doLoadStoreFiles(boolean readOnly) throws IOException {
68-
List<StoreFileInfo> files = getStoreFiles(ctx.getFamily().getNameAsString(), true);
67+
protected List<StoreFileInfo> doLoadStoreFiles(boolean readOnly, boolean validate)
68+
throws IOException {
69+
List<StoreFileInfo> files = getStoreFiles(ctx.getFamily().getNameAsString(), validate);
6970
return files != null ? files : Collections.emptyList();
7071
}
7172

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public FileBasedStoreFileTracker(Configuration conf, boolean isPrimaryReplica, S
6767
}
6868

6969
@Override
70-
protected List<StoreFileInfo> doLoadStoreFiles(boolean readOnly) throws IOException {
70+
protected List<StoreFileInfo> doLoadStoreFiles(boolean readOnly, boolean validate)
71+
throws IOException {
7172
StoreFileList list = backedFile.load(readOnly);
7273
if (list == null) {
7374
return Collections.emptyList();

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ public boolean requireWritingToTmpDirFirst() {
6161
}
6262

6363
@Override
64-
protected List<StoreFileInfo> doLoadStoreFiles(boolean readOnly) throws IOException {
65-
List<StoreFileInfo> files = src.doLoadStoreFiles(readOnly);
64+
protected List<StoreFileInfo> doLoadStoreFiles(boolean readOnly, boolean validate)
65+
throws IOException {
66+
List<StoreFileInfo> files = src.doLoadStoreFiles(readOnly, validate);
6667
if (!readOnly) {
6768
dst.doSetStoreFiles(files);
6869
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public interface StoreFileTracker {
5757
*/
5858
List<StoreFileInfo> load() throws IOException;
5959

60+
/**
61+
* Load the store files list when opening a region.
62+
*/
63+
List<StoreFileInfo> load(boolean validate) throws IOException;
64+
6065
/**
6166
* Add new store files.
6267
* <p/>

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ protected StoreFileTrackerBase(Configuration conf, boolean isPrimaryReplica, Sto
8080

8181
@Override
8282
public final List<StoreFileInfo> load() throws IOException {
83-
return doLoadStoreFiles(!isPrimaryReplica);
83+
return load(true);
84+
}
85+
86+
@Override
87+
public final List<StoreFileInfo> load(boolean validate) throws IOException {
88+
return doLoadStoreFiles(!isPrimaryReplica, validate);
8489
}
8590

8691
@Override
@@ -323,7 +328,8 @@ public StoreFileInfo getStoreFileInfo(FileStatus fileStatus, Path initialPath,
323328
* are allowed to do the cleanup work. For secondary replicas, we will set {@code readOnly} to
324329
* {@code true}.
325330
*/
326-
protected abstract List<StoreFileInfo> doLoadStoreFiles(boolean readOnly) throws IOException;
331+
protected abstract List<StoreFileInfo> doLoadStoreFiles(boolean readOnly, boolean validate)
332+
throws IOException;
327333

328334
protected abstract void doAddNewStoreFiles(Collection<StoreFileInfo> newFiles) throws IOException;
329335

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static SnapshotRegionManifest buildManifestFromDisk(final Configuration conf, fi
185185
for (String familyName : familyNames) {
186186
StoreFileTracker sft = StoreFileTrackerFactory.create(conf, htd,
187187
htd.getColumnFamily(familyName.getBytes()), regionFs, false);
188-
List<StoreFileInfo> storeFiles = sft.load();
188+
List<StoreFileInfo> storeFiles = sft.load(false);
189189
if (storeFiles == null) {
190190
LOG.debug("No files under family: " + familyName);
191191
continue;

hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobStoreCompaction.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;
6161
import org.apache.hadoop.hbase.regionserver.BloomType;
6262
import org.apache.hadoop.hbase.regionserver.HRegion;
63+
import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
6364
import org.apache.hadoop.hbase.regionserver.HStore;
6465
import org.apache.hadoop.hbase.regionserver.HStoreFile;
6566
import org.apache.hadoop.hbase.regionserver.InternalScanner;
@@ -331,9 +332,13 @@ private long countMobCellsInMetadata() throws IOException {
331332
CacheConfig cacheConfig = new CacheConfig(copyOfConf);
332333
if (fs.exists(mobDirPath)) {
333334
// TODO: use sft.load() api here
334-
StoreFileTracker sft =
335-
StoreFileTrackerFactory.create(copyOfConf, true, StoreContext.getBuilder()
336-
.withColumnFamilyDescriptor(familyDescriptor).withCacheConfig(cacheConfig).build());
335+
HRegionFileSystem regionFs = HRegionFileSystem.create(copyOfConf, fs,
336+
MobUtils.getMobTableDir(copyOfConf, tableDescriptor.getTableName()),
337+
region.getRegionInfo());
338+
StoreFileTracker sft = StoreFileTrackerFactory.create(copyOfConf, true,
339+
StoreContext.getBuilder().withColumnFamilyDescriptor(familyDescriptor)
340+
.withFamilyStoreDirectoryPath(mobDirPath).withCacheConfig(cacheConfig)
341+
.withRegionFileSystem(regionFs).build());
337342
FileStatus[] files = UTIL.getTestFileSystem().listStatus(mobDirPath);
338343
for (FileStatus file : files) {
339344
HStoreFile sf =

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ public void testHFileLink() throws IOException {
351351
// this should be the SFT for the destination link file path, though it is not
352352
// being used right now, for the next patch file link creation logic also would
353353
// move to SFT interface.
354-
StoreFileTracker sft = StoreFileTrackerFactory.create(conf, true,
354+
StoreFileTracker sft = StoreFileTrackerFactory.create(testConf, true,
355355
StoreContext.getBuilder()
356356
.withFamilyStoreDirectoryPath(new Path(dstHri.getRegionNameAsString(), TEST_FAMILY))
357357
.withRegionFileSystem(dstRegionFs).build());
@@ -416,20 +416,20 @@ public void testReferenceToHFileLink() throws IOException {
416416
RegionInfo splitHriB =
417417
RegionInfoBuilder.newBuilder(hri.getTable()).setStartKey(SPLITKEY).build();
418418

419-
StoreFileTracker sft = StoreFileTrackerFactory.create(conf, true,
419+
StoreFileTracker sft = StoreFileTrackerFactory.create(testConf, true,
420420
StoreContext.getBuilder()
421421
.withFamilyStoreDirectoryPath(new Path(hriClone.getRegionNameAsString(), TEST_FAMILY))
422422
.withRegionFileSystem(cloneRegionFs).build());
423423

424424
HRegionFileSystem splitRegionAFs = HRegionFileSystem.createRegionOnFileSystem(testConf, fs,
425425
CommonFSUtils.getTableDir(testDir, splitHriA.getTable()), splitHriA);
426-
StoreFileTracker sftA = StoreFileTrackerFactory.create(conf, true,
426+
StoreFileTracker sftA = StoreFileTrackerFactory.create(testConf, true,
427427
StoreContext.getBuilder()
428428
.withFamilyStoreDirectoryPath(new Path(splitHriA.getRegionNameAsString(), TEST_FAMILY))
429429
.withRegionFileSystem(splitRegionAFs).build());
430430
HRegionFileSystem splitRegionBFs = HRegionFileSystem.createRegionOnFileSystem(testConf, fs,
431431
CommonFSUtils.getTableDir(testDir, splitHriB.getTable()), splitHriB);
432-
StoreFileTracker sftB = StoreFileTrackerFactory.create(conf, true,
432+
StoreFileTracker sftB = StoreFileTrackerFactory.create(testConf, true,
433433
StoreContext.getBuilder()
434434
.withFamilyStoreDirectoryPath(new Path(splitHriB.getRegionNameAsString(), TEST_FAMILY))
435435
.withRegionFileSystem(splitRegionBFs).build());

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMergesSplitsAddToTracker.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,10 @@ private Pair<StoreFileInfo, String> copyFileInTheStoreDir(HRegion region) throws
221221
Path storeDir = region.getRegionFileSystem().getStoreDir("info");
222222
// gets the single file
223223
HRegionFileSystem regionFs = region.getRegionFileSystem();
224-
StoreFileTracker sft = StoreFileTrackerFactory.create(region.getBaseConf(), true, StoreContext
225-
.getBuilder().withFamilyStoreDirectoryPath(storeDir).withRegionFileSystem(regionFs).build());
224+
StoreFileTracker sft = StoreFileTrackerFactory.create(region.getBaseConf(), true,
225+
StoreContext.getBuilder().withFamilyStoreDirectoryPath(storeDir)
226+
.withColumnFamilyDescriptor(ColumnFamilyDescriptorBuilder.of(FAMILY_NAME))
227+
.withRegionFileSystem(regionFs).build());
226228
List<StoreFileInfo> infos = sft.load();
227229
StoreFileInfo fileInfo = infos.get(0);
228230
// make a copy of the valid file staight into the store dir, so that it's not tracked.
@@ -237,9 +239,10 @@ private void validateDaughterRegionsFiles(HRegion region, String originalFileNam
237239
String untrackedFile) throws IOException {
238240
// verify there's no link for the untracked, copied file in first region
239241
HRegionFileSystem regionFs = region.getRegionFileSystem();
240-
StoreFileTracker sft = StoreFileTrackerFactory.create(region.getBaseConf(), true,
242+
StoreFileTracker sft = StoreFileTrackerFactory.create(regionFs.getFileSystem().getConf(), true,
241243
StoreContext.getBuilder()
242244
.withFamilyStoreDirectoryPath(new Path(regionFs.getRegionDir(), "info"))
245+
.withColumnFamilyDescriptor(ColumnFamilyDescriptorBuilder.of(FAMILY_NAME))
243246
.withRegionFileSystem(regionFs).build());
244247
List<StoreFileInfo> infos = sft.load();
245248
assertThat(infos, everyItem(hasProperty("activeFileName", not(containsString(untrackedFile)))));

0 commit comments

Comments
 (0)