[ 
https://issues.apache.org/jira/browse/HBASE-27688?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Duo Zhang resolved HBASE-27688.
-------------------------------
    Fix Version/s: 2.6.0
                   3.0.0-alpha-4
                   2.4.17
                   2.5.4
     Hadoop Flags: Reviewed
       Resolution: Fixed

Pushed to branch-2.4+.

Thanks [~alanlemma] for contributing!

> HFile splitting occurs during bulkload, the CREATE_TIME_TS of hfileinfo is 0
> ----------------------------------------------------------------------------
>
>                 Key: HBASE-27688
>                 URL: https://issues.apache.org/jira/browse/HBASE-27688
>             Project: HBase
>          Issue Type: Bug
>            Reporter: alan.zhao
>            Assignee: alan.zhao
>            Priority: Major
>             Fix For: 2.6.0, 3.0.0-alpha-4, 2.4.17, 2.5.4
>
>
> If HFile splitting occurs during bulkload, the CREATE_TIME_TS of hfileinfo 
> =0,When HFile is copied after splitting, CREATE_TIME_TS of the original file 
> is not copied。
> {code:java}
> ##BulkLoadHFilesTool.class 
> /**
>  * Copy half of an HFile into a new HFile.
>  */
> private static void copyHFileHalf(Configuration conf, Path inFile, Path 
> outFile,
>   Reference reference, ColumnFamilyDescriptor familyDescriptor) throws 
> IOException {
>   FileSystem fs = inFile.getFileSystem(conf);
>   CacheConfig cacheConf = CacheConfig.DISABLED;
>   HalfStoreFileReader halfReader = null;
>   StoreFileWriter halfWriter = null;
>   try {
>     。。。
>     HFileContext hFileContext = new 
> HFileContextBuilder().withCompression(compression)
>       .withChecksumType(StoreUtils.getChecksumType(conf))
>       
> .withBytesPerCheckSum(StoreUtils.getBytesPerChecksum(conf)).withBlockSize(blocksize)
>       
> .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding()).withIncludesTags(true)
>       .build();
> // TODO .withCreateTime(EnvironmentEdgeManager.currentTime())      
> halfWriter = new StoreFileWriter.Builder(conf, cacheConf, 
> fs).withFilePath(outFile)
>       .withBloomType(bloomFilterType).withFileContext(hFileContext).build();
>     HFileScanner scanner = halfReader.getScanner(false, false, false);
>     scanner.seekTo();
>     do {
>       halfWriter.append(scanner.getCell());
>     } while (scanner.next());
>     for (Map.Entry<byte[], byte[]> entry : fileInfo.entrySet()) {
>       if (shouldCopyHFileMetaKey(entry.getKey())) {
>         halfWriter.appendFileInfo(entry.getKey(), entry.getValue());
>       }
>     }
>   } finally {
>     。。。
>   }
> } 
> ##get lastMajorCompactionTs metric
>   lastMajorCompactionTs = this.region.getOldestHfileTs(true);
> ...
>   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