HBASE-27129 Add a config that allows us to configure region-level storage policies (#4547)

Co-authored-by: Tang Tianhang <tianhang.tang@shopee.com>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
(cherry picked from commit f238a92b6d)
This commit is contained in:
tianhang 2022-08-22 10:06:14 +08:00 committed by Duo Zhang
parent f509e43eaa
commit fc93fbac9a
2 changed files with 20 additions and 0 deletions

View File

@ -251,6 +251,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
public static final String SPLIT_IGNORE_BLOCKING_ENABLED_KEY =
"hbase.hregion.split.ignore.blocking.enabled";
public static final String REGION_STORAGE_POLICY_KEY = "hbase.hregion.block.storage.policy";
public static final String DEFAULT_REGION_STORAGE_POLICY = "NONE";
/**
* This is for for using HRegion as a local storage, where we may put the recovered edits in a
* special place. Once this is set, we will only replay the recovered edits under this directory
@ -976,6 +979,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
coprocessorHost.preOpen();
}
String policyName = this.conf.get(REGION_STORAGE_POLICY_KEY, DEFAULT_REGION_STORAGE_POLICY);
this.fs.setStoragePolicy(policyName.trim());
// Write HRI to a file in case we need to recover hbase:meta
// Only the primary replica should write .regioninfo
if (this.getRegionInfo().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {

View File

@ -225,6 +225,20 @@ public class HRegionFileSystem {
CommonFSUtils.setStoragePolicy(this.fs, getStoreDir(familyName), policyName);
}
/**
* Set storage policy for a whole region. <br>
* <i>"LAZY_PERSIST"</i>, <i>"ALL_SSD"</i>, <i>"ONE_SSD"</i>, <i>"HOT"</i>, <i>"WARM"</i>,
* <i>"COLD"</i> <br>
* <br>
* See {@link org.apache.hadoop.hdfs.protocol.HdfsConstants} for more details.
* @param policyName The name of the storage policy: 'HOT', 'COLD', etc. See hadoop 2.6+
* org.apache.hadoop.hdfs.protocol.HdfsConstants for possible list e.g 'COLD',
* 'WARM', 'HOT', 'ONE_SSD', 'ALL_SSD', 'LAZY_PERSIST'.
*/
public void setStoragePolicy(String policyName) {
CommonFSUtils.setStoragePolicy(this.fs, getRegionDir(), policyName);
}
/**
* Get the storage policy of the directory of CF.
* @param familyName The name of column family.