|
@@ -21,8 +21,10 @@ import com.google.common.annotations.VisibleForTesting;
|
|
|
import com.google.common.base.Preconditions;
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
|
+import org.apache.hadoop.conf.Configuration;
|
|
|
import org.apache.hadoop.fs.StorageType;
|
|
|
import org.apache.hadoop.fs.XAttr;
|
|
|
+import org.apache.hadoop.hdfs.DFSConfigKeys;
|
|
|
import org.apache.hadoop.hdfs.XAttrHelper;
|
|
|
import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;
|
|
|
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
|
@@ -45,50 +47,75 @@ public class BlockStoragePolicySuite {
|
|
|
|
|
|
@VisibleForTesting
|
|
|
public static BlockStoragePolicySuite createDefaultSuite() {
|
|
|
+ return createDefaultSuite(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @VisibleForTesting
|
|
|
+ public static BlockStoragePolicySuite createDefaultSuite(
|
|
|
+ final Configuration conf) {
|
|
|
final BlockStoragePolicy[] policies =
|
|
|
new BlockStoragePolicy[1 << ID_BIT_LENGTH];
|
|
|
- final byte lazyPersistId = HdfsConstants.MEMORY_STORAGE_POLICY_ID;
|
|
|
+ final byte lazyPersistId =
|
|
|
+ HdfsConstants.StoragePolicy.LAZY_PERSIST.value();
|
|
|
policies[lazyPersistId] = new BlockStoragePolicy(lazyPersistId,
|
|
|
- HdfsConstants.MEMORY_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.LAZY_PERSIST.name(),
|
|
|
new StorageType[]{StorageType.RAM_DISK, StorageType.DISK},
|
|
|
new StorageType[]{StorageType.DISK},
|
|
|
new StorageType[]{StorageType.DISK},
|
|
|
true); // Cannot be changed on regular files, but inherited.
|
|
|
- final byte allssdId = HdfsConstants.ALLSSD_STORAGE_POLICY_ID;
|
|
|
+ final byte allssdId = HdfsConstants.StoragePolicy.ALL_SSD.value();
|
|
|
policies[allssdId] = new BlockStoragePolicy(allssdId,
|
|
|
- HdfsConstants.ALLSSD_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.ALL_SSD.name(),
|
|
|
new StorageType[]{StorageType.SSD},
|
|
|
new StorageType[]{StorageType.DISK},
|
|
|
new StorageType[]{StorageType.DISK});
|
|
|
- final byte onessdId = HdfsConstants.ONESSD_STORAGE_POLICY_ID;
|
|
|
+ final byte onessdId = HdfsConstants.StoragePolicy.ONE_SSD.value();
|
|
|
policies[onessdId] = new BlockStoragePolicy(onessdId,
|
|
|
- HdfsConstants.ONESSD_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.ONE_SSD.name(),
|
|
|
new StorageType[]{StorageType.SSD, StorageType.DISK},
|
|
|
new StorageType[]{StorageType.SSD, StorageType.DISK},
|
|
|
new StorageType[]{StorageType.SSD, StorageType.DISK});
|
|
|
- final byte hotId = HdfsConstants.HOT_STORAGE_POLICY_ID;
|
|
|
+ final byte hotId = HdfsConstants.StoragePolicy.HOT.value();
|
|
|
policies[hotId] = new BlockStoragePolicy(hotId,
|
|
|
- HdfsConstants.HOT_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.HOT.name(),
|
|
|
new StorageType[]{StorageType.DISK}, StorageType.EMPTY_ARRAY,
|
|
|
new StorageType[]{StorageType.ARCHIVE});
|
|
|
- final byte warmId = HdfsConstants.WARM_STORAGE_POLICY_ID;
|
|
|
+ final byte warmId = HdfsConstants.StoragePolicy.WARM.value();
|
|
|
policies[warmId] = new BlockStoragePolicy(warmId,
|
|
|
- HdfsConstants.WARM_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.WARM.name(),
|
|
|
new StorageType[]{StorageType.DISK, StorageType.ARCHIVE},
|
|
|
new StorageType[]{StorageType.DISK, StorageType.ARCHIVE},
|
|
|
new StorageType[]{StorageType.DISK, StorageType.ARCHIVE});
|
|
|
- final byte coldId = HdfsConstants.COLD_STORAGE_POLICY_ID;
|
|
|
+ final byte coldId = HdfsConstants.StoragePolicy.COLD.value();
|
|
|
policies[coldId] = new BlockStoragePolicy(coldId,
|
|
|
- HdfsConstants.COLD_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.COLD.name(),
|
|
|
new StorageType[]{StorageType.ARCHIVE}, StorageType.EMPTY_ARRAY,
|
|
|
StorageType.EMPTY_ARRAY);
|
|
|
- final byte providedId = HdfsConstants.PROVIDED_STORAGE_POLICY_ID;
|
|
|
+ final byte providedId = HdfsConstants.StoragePolicy.PROVIDED.value();
|
|
|
policies[providedId] = new BlockStoragePolicy(providedId,
|
|
|
- HdfsConstants.PROVIDED_STORAGE_POLICY_NAME,
|
|
|
+ HdfsConstants.StoragePolicy.PROVIDED.name(),
|
|
|
new StorageType[]{StorageType.PROVIDED, StorageType.DISK},
|
|
|
new StorageType[]{StorageType.PROVIDED, StorageType.DISK},
|
|
|
new StorageType[]{StorageType.PROVIDED, StorageType.DISK});
|
|
|
- return new BlockStoragePolicySuite(hotId, policies);
|
|
|
+
|
|
|
+ return new BlockStoragePolicySuite(getDefaultPolicyID(conf, policies),
|
|
|
+ policies);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static byte getDefaultPolicyID(
|
|
|
+ final Configuration conf, final BlockStoragePolicy[] policies) {
|
|
|
+ if (conf != null) {
|
|
|
+ HdfsConstants.StoragePolicy defaultPolicy = conf.getEnum(
|
|
|
+ DFSConfigKeys.DFS_STORAGE_DEFAULT_POLICY,
|
|
|
+ DFSConfigKeys.DFS_STORAGE_DEFAULT_POLICY_DEFAULT);
|
|
|
+ for (BlockStoragePolicy policy : policies) {
|
|
|
+ if (policy != null &&
|
|
|
+ policy.getName().equalsIgnoreCase(defaultPolicy.name())) {
|
|
|
+ return policy.getId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return DFSConfigKeys.DFS_STORAGE_DEFAULT_POLICY_DEFAULT.value();
|
|
|
}
|
|
|
|
|
|
private final byte defaultPolicyID;
|