HBASE-27688 HFile splitting occurs during bulkload, the CREATE_TIME_TS of hfileinfo is 0 (#5097)
Co-authored-by: alanzhao <alanzhao@126.com> Signed-off-by: Duo Zhang <zhangduo@apache.org>
This commit is contained in:
parent
24653dd105
commit
6920e72f50
|
@ -92,6 +92,7 @@ import org.apache.hadoop.hbase.regionserver.StoreUtils;
|
||||||
import org.apache.hadoop.hbase.security.UserProvider;
|
import org.apache.hadoop.hbase.security.UserProvider;
|
||||||
import org.apache.hadoop.hbase.security.token.FsDelegationToken;
|
import org.apache.hadoop.hbase.security.token.FsDelegationToken;
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
|
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
|
||||||
import org.apache.hadoop.hbase.util.FSUtils;
|
import org.apache.hadoop.hbase.util.FSUtils;
|
||||||
import org.apache.hadoop.hbase.util.FSVisitor;
|
import org.apache.hadoop.hbase.util.FSVisitor;
|
||||||
import org.apache.hadoop.hbase.util.Pair;
|
import org.apache.hadoop.hbase.util.Pair;
|
||||||
|
@ -1182,7 +1183,7 @@ public class LoadIncrementalHFiles extends Configured implements Tool {
|
||||||
.withChecksumType(StoreUtils.getChecksumType(conf))
|
.withChecksumType(StoreUtils.getChecksumType(conf))
|
||||||
.withBytesPerCheckSum(StoreUtils.getBytesPerChecksum(conf)).withBlockSize(blocksize)
|
.withBytesPerCheckSum(StoreUtils.getBytesPerChecksum(conf)).withBlockSize(blocksize)
|
||||||
.withDataBlockEncoding(familyDescriptor.getDataBlockEncoding()).withIncludesTags(true)
|
.withDataBlockEncoding(familyDescriptor.getDataBlockEncoding()).withIncludesTags(true)
|
||||||
.build();
|
.withCreateTime(EnvironmentEdgeManager.currentTime()).build();
|
||||||
halfWriter = new StoreFileWriter.Builder(conf, cacheConf, fs).withFilePath(outFile)
|
halfWriter = new StoreFileWriter.Builder(conf, cacheConf, fs).withFilePath(outFile)
|
||||||
.withBloomType(bloomFilterType).withFileContext(hFileContext).build();
|
.withBloomType(bloomFilterType).withFileContext(hFileContext).build();
|
||||||
HFileScanner scanner = halfReader.getScanner(false, false, false);
|
HFileScanner scanner = halfReader.getScanner(false, false, false);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.hadoop.hbase.tool;
|
package org.apache.hadoop.hbase.tool;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.greaterThan;
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertThrows;
|
import static org.junit.Assert.assertThrows;
|
||||||
|
@ -61,6 +62,7 @@ import org.apache.hadoop.hbase.testclassification.MiscTests;
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
import org.apache.hadoop.hbase.util.CommonFSUtils;
|
import org.apache.hadoop.hbase.util.CommonFSUtils;
|
||||||
import org.apache.hadoop.hbase.util.HFileTestUtil;
|
import org.apache.hadoop.hbase.util.HFileTestUtil;
|
||||||
|
import org.hamcrest.MatcherAssert;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.ClassRule;
|
import org.junit.ClassRule;
|
||||||
|
@ -568,6 +570,39 @@ public class TestLoadIncrementalHFiles {
|
||||||
assertEquals(1000, rowCount);
|
assertEquals(1000, rowCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method tests that the create_time property of the HFile produced by the splitstorefile
|
||||||
|
* method is greater than 0 HBASE-27688
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testSplitStoreFileWithCreateTimeTS() throws IOException {
|
||||||
|
Path dir = util.getDataTestDirOnTestFS("testSplitStoreFileWithCreateTimeTS");
|
||||||
|
FileSystem fs = util.getTestFileSystem();
|
||||||
|
Path testIn = new Path(dir, "testhfile");
|
||||||
|
ColumnFamilyDescriptor familyDesc = ColumnFamilyDescriptorBuilder.of(FAMILY);
|
||||||
|
HFileTestUtil.createHFile(util.getConfiguration(), fs, testIn, FAMILY, QUALIFIER,
|
||||||
|
Bytes.toBytes("aaa"), Bytes.toBytes("zzz"), 1000);
|
||||||
|
|
||||||
|
Path bottomOut = new Path(dir, "bottom.out");
|
||||||
|
Path topOut = new Path(dir, "top.out");
|
||||||
|
|
||||||
|
BulkLoadHFilesTool.splitStoreFile(util.getConfiguration(), testIn, familyDesc,
|
||||||
|
Bytes.toBytes("ggg"), bottomOut, topOut);
|
||||||
|
|
||||||
|
verifyHFileCreateTimeTS(bottomOut);
|
||||||
|
verifyHFileCreateTimeTS(topOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyHFileCreateTimeTS(Path p) throws IOException {
|
||||||
|
Configuration conf = util.getConfiguration();
|
||||||
|
|
||||||
|
try (HFile.Reader reader =
|
||||||
|
HFile.createReader(p.getFileSystem(conf), p, new CacheConfig(conf), true, conf)) {
|
||||||
|
long fileCreateTime = reader.getHFileInfo().getHFileContext().getFileCreateTime();
|
||||||
|
MatcherAssert.assertThat(fileCreateTime, greaterThan(0L));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSplitStoreFileWithNoneToNone() throws IOException {
|
public void testSplitStoreFileWithNoneToNone() throws IOException {
|
||||||
testSplitStoreFileWithDifferentEncoding(DataBlockEncoding.NONE, DataBlockEncoding.NONE);
|
testSplitStoreFileWithDifferentEncoding(DataBlockEncoding.NONE, DataBlockEncoding.NONE);
|
||||||
|
|
Loading…
Reference in New Issue