[
https://issues.apache.org/jira/browse/HBASE-28177?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated HBASE-28177:
-----------------------------------
Labels: pull-request-available (was: )
> 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
> Priority: Minor
> Labels: pull-request-available
>
> 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)