Skip to content

Commit 1f5b0de

Browse files
committed
HBASE-26064 Introduce a StoreFileTracker to abstract the store file tracking logic
1 parent 83d1bf1 commit 1f5b0de

31 files changed

+706
-257
lines changed

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.util.List;
3030
import java.util.Map.Entry;
3131
import java.util.Optional;
32-
3332
import org.apache.hadoop.conf.Configuration;
3433
import org.apache.hadoop.fs.FileStatus;
3534
import org.apache.hadoop.fs.FileSystem;
@@ -143,17 +142,17 @@ public InternalScanner createScanner(ScanInfo scanInfo, List<StoreFileScanner> s
143142
};
144143

145144
private final CellSinkFactory<StoreFileWriter> writerFactory =
146-
new CellSinkFactory<StoreFileWriter>() {
147-
@Override
148-
public StoreFileWriter createWriter(InternalScanner scanner,
149-
org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails fd,
150-
boolean shouldDropBehind, boolean major) throws IOException {
151-
// make this writer with tags always because of possible new cells with tags.
152-
return store.createWriterInTmp(fd.maxKeyCount,
153-
major ? majorCompactionCompression : minorCompactionCompression,
154-
true, true, true, shouldDropBehind);
155-
}
156-
};
145+
new CellSinkFactory<StoreFileWriter>() {
146+
@Override
147+
public StoreFileWriter createWriter(InternalScanner scanner,
148+
org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails fd,
149+
boolean shouldDropBehind, boolean major) throws IOException {
150+
// make this writer with tags always because of possible new cells with tags.
151+
return store.getStoreEngine().getStoreFileTracker()
152+
.createWriter(createParams(fd, shouldDropBehind, major).includeMVCCReadpoint(true)
153+
.includesTag(true));
154+
}
155+
};
157156

158157
public DefaultMobStoreCompactor(Configuration conf, HStore store) {
159158
super(conf, store);

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.util.HashSet;
2626
import java.util.List;
2727
import java.util.Set;
28-
2928
import org.apache.hadoop.conf.Configuration;
3029
import org.apache.hadoop.fs.Path;
3130
import org.apache.hadoop.hbase.Cell;
@@ -127,8 +126,7 @@ public List<Path> flushSnapshot(MemStoreSnapshot snapshot, long cacheFlushId,
127126
synchronized (flushLock) {
128127
status.setStatus("Flushing " + store + ": creating writer");
129128
// Write the map out to the disk
130-
writer = store.createWriterInTmp(cellsCount, store.getColumnFamilyDescriptor().getCompressionType(),
131-
false, true, true, false);
129+
writer = createWriter(snapshot, true);
132130
IOException e = null;
133131
try {
134132
// It's a mob store, flush the cells in a mob way. This is the difference of flushing

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.hadoop.hbase.regionserver.compactions.DateTieredCompactionPolicy;
3030
import org.apache.hadoop.hbase.regionserver.compactions.DateTieredCompactionRequest;
3131
import org.apache.hadoop.hbase.regionserver.compactions.DateTieredCompactor;
32+
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTracker;
3233
import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;
3334
import org.apache.hadoop.hbase.security.User;
3435

@@ -41,7 +42,7 @@
4142
*/
4243
@InterfaceAudience.Private
4344
public class DateTieredStoreEngine extends StoreEngine<DefaultStoreFlusher,
44-
DateTieredCompactionPolicy, DateTieredCompactor, DefaultStoreFileManager> {
45+
DateTieredCompactionPolicy, DateTieredCompactor, DefaultStoreFileManager, StoreFileTracker> {
4546
@Override
4647
public boolean needsCompaction(List<HStoreFile> filesCompacting) {
4748
return compactionPolicy.needsCompaction(storeFileManager.getStorefiles(),
@@ -62,6 +63,7 @@ protected void createComponents(Configuration conf, HStore store, CellComparator
6263
compactionPolicy.getConf());
6364
this.storeFlusher = new DefaultStoreFlusher(conf, store);
6465
this.compactor = new DateTieredCompactor(conf, store);
66+
this.storeFileTracker = createStoreFileTracker(store);
6567
}
6668

6769
private final class DateTieredCompactionContext extends CompactionContext {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;
3030
import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;
3131
import org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy;
32+
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTracker;
3233
import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;
3334
import org.apache.hadoop.hbase.security.User;
3435
import org.apache.hadoop.hbase.util.ReflectionUtils;
@@ -39,8 +40,8 @@
3940
* their derivatives.
4041
*/
4142
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)
42-
public class DefaultStoreEngine extends StoreEngine<
43-
DefaultStoreFlusher, RatioBasedCompactionPolicy, DefaultCompactor, DefaultStoreFileManager> {
43+
public class DefaultStoreEngine extends StoreEngine<DefaultStoreFlusher,
44+
RatioBasedCompactionPolicy, DefaultCompactor, DefaultStoreFileManager, StoreFileTracker> {
4445

4546
public static final String DEFAULT_STORE_FLUSHER_CLASS_KEY =
4647
"hbase.hstore.defaultengine.storeflusher.class";
@@ -71,6 +72,7 @@ protected void createComponents(
7172
storeFileManager =
7273
new DefaultStoreFileManager(kvComparator, StoreFileComparators.SEQ_ID, conf,
7374
compactionPolicy.getConf());
75+
storeFileTracker = createStoreFileTracker(store);
7476
}
7577

7678
protected void createCompactor(Configuration conf, HStore store) throws IOException {

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,14 @@
2121
import java.io.IOException;
2222
import java.util.ArrayList;
2323
import java.util.List;
24-
25-
import org.apache.yetus.audience.InterfaceAudience;
26-
import org.slf4j.Logger;
27-
import org.slf4j.LoggerFactory;
2824
import org.apache.hadoop.conf.Configuration;
2925
import org.apache.hadoop.fs.Path;
3026
import org.apache.hadoop.hbase.monitoring.MonitoredTask;
3127
import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;
3228
import org.apache.hadoop.util.StringUtils;
29+
import org.apache.yetus.audience.InterfaceAudience;
30+
import org.slf4j.Logger;
31+
import org.slf4j.LoggerFactory;
3332

3433
/**
3534
* Default implementation of StoreFlusher.
@@ -60,9 +59,7 @@ public List<Path> flushSnapshot(MemStoreSnapshot snapshot, long cacheFlushId,
6059
synchronized (flushLock) {
6160
status.setStatus("Flushing " + store + ": creating writer");
6261
// Write the map out to the disk
63-
writer = store.createWriterInTmp(cellsCount,
64-
store.getColumnFamilyDescriptor().getCompressionType(), false, true,
65-
snapshot.isTagsPresent(), false);
62+
writer = createWriter(snapshot, false);
6663
IOException e = null;
6764
try {
6865
performFlush(scanner, writer, throughputController);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ protected KeyValueScanner createScanner(Scan scan, ScanInfo scanInfo,
155155
* Creates the mob store engine.
156156
*/
157157
@Override
158-
protected StoreEngine<?, ?, ?, ?> createStoreEngine(HStore store, Configuration conf,
158+
protected StoreEngine<?, ?, ?, ?, ?> createStoreEngine(HStore store, Configuration conf,
159159
CellComparator cellComparator) throws IOException {
160160
MobStoreEngine engine = new MobStoreEngine();
161161
engine.createComponents(conf, store, cellComparator);

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public Path getRegionDir() {
142142
// Temp Helpers
143143
// ===========================================================================
144144
/** @return {@link Path} to the region's temp directory, used for file creations */
145-
Path getTempDir() {
145+
public Path getTempDir() {
146146
return new Path(getRegionDir(), REGION_TEMP_DIR);
147147
}
148148

@@ -237,11 +237,7 @@ public String getStoragePolicyName(String familyName) {
237237
* @param familyName Column Family Name
238238
* @return a set of {@link StoreFileInfo} for the specified family.
239239
*/
240-
public Collection<StoreFileInfo> getStoreFiles(final byte[] familyName) throws IOException {
241-
return getStoreFiles(Bytes.toString(familyName));
242-
}
243-
244-
public Collection<StoreFileInfo> getStoreFiles(final String familyName) throws IOException {
240+
public List<StoreFileInfo> getStoreFiles(final String familyName) throws IOException {
245241
return getStoreFiles(familyName, true);
246242
}
247243

@@ -251,7 +247,7 @@ public Collection<StoreFileInfo> getStoreFiles(final String familyName) throws I
251247
* @param familyName Column Family Name
252248
* @return a set of {@link StoreFileInfo} for the specified family.
253249
*/
254-
public Collection<StoreFileInfo> getStoreFiles(final String familyName, final boolean validate)
250+
public List<StoreFileInfo> getStoreFiles(final String familyName, final boolean validate)
255251
throws IOException {
256252
Path familyDir = getStoreDir(familyName);
257253
FileStatus[] files = CommonFSUtils.listStatus(this.fs, familyDir);

0 commit comments

Comments
 (0)