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)

Reply via email to