xieyupei created HBASE-28177:
--------------------------------
Summary: mobStore directory do not set storage policy like normal
store directory
Key: HBASE-28177
URL: https://issues.apache.org/jira/browse/HBASE-28177
Project: HBase
Issue Type: Bug
Components: mob
Affects Versions: 2.5.6
Reporter: xieyupei
Assignee: xieyupei
We set block storage policy for store directory only in the HStore, but
mobStore path is generate in the HMobStore. I write a test case to describe
this bug in TestHRegionFileSystem.
{code:java}
@Test
public void testMobStoreStoragePolicy() throws Exception {
TEST_UTIL = new HBaseTestingUtil();
Configuration conf = TEST_UTIL.getConfiguration();
TEST_UTIL.startMiniCluster();
Table table = TEST_UTIL.createTable(TABLE_NAME, FAMILIES);
assertEquals("Should start with empty table", 0, TEST_UTIL.countRows(table));
HRegionFileSystem regionFs = getHRegionFS(TEST_UTIL.getConnection(), table,
conf);
try (Admin admin = TEST_UTIL.getConnection().getAdmin()) {
ColumnFamilyDescriptorBuilder cfdA =
ColumnFamilyDescriptorBuilder.newBuilder(FAMILIES[0]);
cfdA.setValue(HStore.BLOCK_STORAGE_POLICY_KEY, "ONE_SSD");
cfdA.setMobEnabled(true);
cfdA.setMobThreshold(2L);
admin.modifyColumnFamily(TABLE_NAME, cfdA.build());
while (
TEST_UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager().getRegionStates()
.hasRegionsInTransition()
) {
Thread.sleep(200);
LOG.debug("Waiting on table to finish schema altering");
}
// flush memstore snapshot into 3 files
for (long i = 0; i < 3; i++) {
Put put = new Put(Bytes.toBytes(i));
put.addColumn(FAMILIES[0], Bytes.toBytes(i), Bytes.toBytes(i));
put.addColumn(FAMILIES[0], Bytes.toBytes(i + "qf"), Bytes.toBytes(i +
"value"));
table.put(put);
admin.flush(TABLE_NAME);
}
// there should be 3 files in store dir
FileSystem fs = TEST_UTIL.getDFSCluster().getFileSystem();
Path storePath = regionFs.getStoreDir(Bytes.toString(FAMILIES[0]));
Path mobStorePath = MobUtils.getMobFamilyPath(conf, TABLE_NAME,
Bytes.toString(FAMILIES[0]));
FileStatus[] storeFiles = CommonFSUtils.listStatus(fs, storePath);
FileStatus[] mobStoreFiles = CommonFSUtils.listStatus(fs, mobStorePath);
assertNotNull(storeFiles);
assertEquals(3, storeFiles.length);
assertNotNull(mobStoreFiles);
assertEquals(3, mobStoreFiles.length);
for (FileStatus status : storeFiles) {
assertEquals("ONE_SSD",
((HFileSystem)
regionFs.getFileSystem()).getStoragePolicyName(status.getPath()));
}
for (FileStatus status : mobStoreFiles) {
assertEquals("ONE_SSD",
((HFileSystem)
regionFs.getFileSystem()).getStoragePolicyName(status.getPath()));
}
} finally {
table.close();
TEST_UTIL.deleteTable(TABLE_NAME);
TEST_UTIL.shutdownMiniCluster();
}
}{code}
Also we can get storage policy in shell like this:
{code:java}
root@hbase-master:/usr/local/hadoop# ./bin/hdfs storagepolicies
-getStoragePolicy -path
/hbase/data/default/member/a645c7c2b31371449331a4e4106b073b/info
The storage policy of
/hbase/data/default/member/a645c7c2b31371449331a4e4106b073b/info:
BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[],
replicationFallbacks=[ARCHIVE]}
root@hbase-master:/usr/local/hadoop# ./bin/hdfs storagepolicies
-getStoragePolicy -path
/hbase/mobdir/data/default/member/288b5f8af920a8190cc07bad277debb5/info
The storage policy of
/hbase/mobdir/data/default/member/288b5f8af920a8190cc07bad277debb5/info is
unspecified {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)