selina.yan created HBASE-27636:
----------------------------------
Summary: The value of region metric--lastMajorCompactionAge is
wrong,when the hfile is buckload file
Key: HBASE-27636
URL: https://issues.apache.org/jira/browse/HBASE-27636
Project: HBase
Issue Type: Bug
Components: hbase-connectors
Reporter: selina.yan
Assignee: selina.yan
When HFileOutputFormat2 is used to create an hfile, the fileCreateTime will not
be assigned when creating an hfileContext, resulting in the
lastMajorCompactionAge indicator of the region being the timestamp of the
current time after buckload to hbase.
{code:java}
##HFileOutputFormat2.class
HFileContextBuilder contextBuilder = new HFileContextBuilder()
.withCompression(compression)
.withChecksumType(HStore.getChecksumType(conf))
.withBytesPerCheckSum(HStore.getBytesPerChecksum(conf))
.withBlockSize(blockSize);
if (HFile.getFormatVersion(conf) >= HFile.MIN_FORMAT_VERSION_WITH_TAGS) {
contextBuilder.withIncludesTags(true);
}
contextBuilder.withDataBlockEncoding(encoding);
HFileContext hFileContext = contextBuilder.build();
##get lastMajorCompactionTs metric
long lastMajorCompactionTs = 0L;
try {
lastMajorCompactionTs = this.region.getOldestHfileTs(true);
} catch (IOException ioe) {
LOG.error("Could not load HFile info ", ioe);
}
long now = EnvironmentEdgeManager.currentTime();
return now - lastMajorCompactionTs;
}
...
##
public long getOldestHfileTs(boolean majorCompactionOnly) throws IOException {
long result = Long.MAX_VALUE;
for (HStore store : stores.values()) {
Collection<HStoreFile> storeFiles = store.getStorefiles();
...
for (HStoreFile file : storeFiles) {
StoreFileReader sfReader = file.getReader();
...
result = Math.min(result, reader.getFileContext().getFileCreateTime());
}
}
return result == Long.MAX_VALUE ? 0 : result;
}{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)