[ https://issues.apache.org/jira/browse/HBASE-27636?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
selina.yan updated HBASE-27636: ------------------------------- Summary: The lastMajorCompactionAge is incorrect,when the hfile is generated by the HFileOutputFormat2 class (was: The value of region metric--lastMajorCompactionAge is wrong,when the hfile is buckload file) > The lastMajorCompactionAge is incorrect,when the hfile is generated by the > HFileOutputFormat2 class > --------------------------------------------------------------------------------------------------- > > 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 > Priority: Major > > 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)