HDFS-11289. [SPS]: Make SPS movement monitor timeouts configurable. Contributed by Uma Maheswara Rao G
This commit is contained in:
parent
81ed364b63
commit
422f870607
|
@ -613,10 +613,19 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
|
||||||
public static final String DFS_MOVER_MAX_NO_MOVE_INTERVAL_KEY = "dfs.mover.max-no-move-interval";
|
public static final String DFS_MOVER_MAX_NO_MOVE_INTERVAL_KEY = "dfs.mover.max-no-move-interval";
|
||||||
public static final int DFS_MOVER_MAX_NO_MOVE_INTERVAL_DEFAULT = 60*1000; // One minute
|
public static final int DFS_MOVER_MAX_NO_MOVE_INTERVAL_DEFAULT = 60*1000; // One minute
|
||||||
|
|
||||||
|
// SPS related configurations
|
||||||
public static final String DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_KEY =
|
public static final String DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_KEY =
|
||||||
"dfs.storage.policy.satisfier.activate";
|
"dfs.storage.policy.satisfier.activate";
|
||||||
public static final boolean DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_DEFAULT =
|
public static final boolean DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_DEFAULT =
|
||||||
true;
|
true;
|
||||||
|
public static final String DFS_STORAGE_POLICY_SATISFIER_RECHECK_TIMEOUT_MILLIS_KEY =
|
||||||
|
"dfs.storage.policy.satisfier.recheck.timeout.millis";
|
||||||
|
public static final int DFS_STORAGE_POLICY_SATISFIER_RECHECK_TIMEOUT_MILLIS_DEFAULT =
|
||||||
|
5 * 60 * 1000;
|
||||||
|
public static final String DFS_STORAGE_POLICY_SATISFIER_SELF_RETRY_TIMEOUT_MILLIS_KEY =
|
||||||
|
"dfs.storage.policy.satisfier.self.retry.timeout.millis";
|
||||||
|
public static final int DFS_STORAGE_POLICY_SATISFIER_SELF_RETRY_TIMEOUT_MILLIS_DEFAULT =
|
||||||
|
30 * 60 * 1000;
|
||||||
|
|
||||||
public static final String DFS_DATANODE_ADDRESS_KEY = "dfs.datanode.address";
|
public static final String DFS_DATANODE_ADDRESS_KEY = "dfs.datanode.address";
|
||||||
public static final int DFS_DATANODE_DEFAULT_PORT = 9866;
|
public static final int DFS_DATANODE_DEFAULT_PORT = 9866;
|
||||||
|
|
|
@ -479,8 +479,8 @@ public class BlockManager implements BlockStatsMXBean {
|
||||||
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_KEY,
|
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_KEY,
|
||||||
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_DEFAULT);
|
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_ACTIVATE_DEFAULT);
|
||||||
if (storagePolicyEnabled && spsEnabled) {
|
if (storagePolicyEnabled && spsEnabled) {
|
||||||
sps = new StoragePolicySatisfier(namesystem,
|
sps = new StoragePolicySatisfier(namesystem, storageMovementNeeded, this,
|
||||||
storageMovementNeeded, this);
|
conf);
|
||||||
} else {
|
} else {
|
||||||
sps = null;
|
sps = null;
|
||||||
LOG.warn(
|
LOG.warn(
|
||||||
|
|
|
@ -64,14 +64,14 @@ public class BlockStorageMovementAttemptedItems {
|
||||||
// It might take anywhere between 5 to 10 minutes before
|
// It might take anywhere between 5 to 10 minutes before
|
||||||
// a request is timed out.
|
// a request is timed out.
|
||||||
//
|
//
|
||||||
private long checkTimeout = 5 * 60 * 1000; // minimum value
|
private long minCheckTimeout = 5 * 60 * 1000; // minimum value
|
||||||
private BlockStorageMovementNeeded blockStorageMovementNeeded;
|
private BlockStorageMovementNeeded blockStorageMovementNeeded;
|
||||||
|
|
||||||
public BlockStorageMovementAttemptedItems(long timeoutPeriod,
|
public BlockStorageMovementAttemptedItems(long recheckTimeout,
|
||||||
long selfRetryTimeout,
|
long selfRetryTimeout,
|
||||||
BlockStorageMovementNeeded unsatisfiedStorageMovementFiles) {
|
BlockStorageMovementNeeded unsatisfiedStorageMovementFiles) {
|
||||||
if (timeoutPeriod > 0) {
|
if (recheckTimeout > 0) {
|
||||||
this.checkTimeout = Math.min(checkTimeout, timeoutPeriod);
|
this.minCheckTimeout = Math.min(minCheckTimeout, recheckTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.selfRetryTimeout = selfRetryTimeout;
|
this.selfRetryTimeout = selfRetryTimeout;
|
||||||
|
@ -196,7 +196,7 @@ public class BlockStorageMovementAttemptedItems {
|
||||||
try {
|
try {
|
||||||
blockStorageMovementResultCheck();
|
blockStorageMovementResultCheck();
|
||||||
blocksStorageMovementUnReportedItemsCheck();
|
blocksStorageMovementUnReportedItemsCheck();
|
||||||
Thread.sleep(checkTimeout);
|
Thread.sleep(minCheckTimeout);
|
||||||
} catch (InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
LOG.info("BlocksStorageMovementAttemptResultMonitor thread "
|
LOG.info("BlocksStorageMovementAttemptResultMonitor thread "
|
||||||
+ "is interrupted.", ie);
|
+ "is interrupted.", ie);
|
||||||
|
|
|
@ -27,7 +27,9 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.StorageType;
|
import org.apache.hadoop.fs.StorageType;
|
||||||
|
import org.apache.hadoop.hdfs.DFSConfigKeys;
|
||||||
import org.apache.hadoop.hdfs.DFSUtil;
|
import org.apache.hadoop.hdfs.DFSUtil;
|
||||||
import org.apache.hadoop.hdfs.protocol.Block;
|
import org.apache.hadoop.hdfs.protocol.Block;
|
||||||
import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;
|
import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;
|
||||||
|
@ -79,15 +81,18 @@ public class StoragePolicySatisfier implements Runnable {
|
||||||
|
|
||||||
public StoragePolicySatisfier(final Namesystem namesystem,
|
public StoragePolicySatisfier(final Namesystem namesystem,
|
||||||
final BlockStorageMovementNeeded storageMovementNeeded,
|
final BlockStorageMovementNeeded storageMovementNeeded,
|
||||||
final BlockManager blkManager) {
|
final BlockManager blkManager, Configuration conf) {
|
||||||
this.namesystem = namesystem;
|
this.namesystem = namesystem;
|
||||||
this.storageMovementNeeded = storageMovementNeeded;
|
this.storageMovementNeeded = storageMovementNeeded;
|
||||||
this.blockManager = blkManager;
|
this.blockManager = blkManager;
|
||||||
// TODO: below selfRetryTimeout and checkTimeout can be configurable later
|
|
||||||
// Now, the default values of selfRetryTimeout and checkTimeout are 30mins
|
|
||||||
// and 5mins respectively
|
|
||||||
this.storageMovementsMonitor = new BlockStorageMovementAttemptedItems(
|
this.storageMovementsMonitor = new BlockStorageMovementAttemptedItems(
|
||||||
5 * 60 * 1000, 30 * 60 * 1000, storageMovementNeeded);
|
conf.getLong(
|
||||||
|
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_RECHECK_TIMEOUT_MILLIS_KEY,
|
||||||
|
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_RECHECK_TIMEOUT_MILLIS_DEFAULT),
|
||||||
|
conf.getLong(
|
||||||
|
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_SELF_RETRY_TIMEOUT_MILLIS_KEY,
|
||||||
|
DFSConfigKeys.DFS_STORAGE_POLICY_SATISFIER_SELF_RETRY_TIMEOUT_MILLIS_DEFAULT),
|
||||||
|
storageMovementNeeded);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -4509,6 +4509,29 @@
|
||||||
</description>
|
</description>
|
||||||
</property>
|
</property>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>dfs.storage.policy.satisfier.recheck.timeout.millis</name>
|
||||||
|
<value>300000</value>
|
||||||
|
<description>
|
||||||
|
Blocks storage movements monitor re-check interval in milliseconds.
|
||||||
|
This check will verify whether any blocks storage movement results arrived from DN
|
||||||
|
and also verify if any of file blocks movements not at all reported to DN
|
||||||
|
since dfs.storage.policy.satisfier.self.retry.timeout.
|
||||||
|
The default value is 5 * 60 * 1000 (5 mins)
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>dfs.storage.policy.satisfier.self.retry.timeout.millis</name>
|
||||||
|
<value>1800000</value>
|
||||||
|
<description>
|
||||||
|
If any of file related block movements not at all reported by coordinator datanode,
|
||||||
|
then after this timeout(in milliseconds), the item will be added back to movement needed list
|
||||||
|
at namenode which will be retried for block movements.
|
||||||
|
The default value is 30 * 60 * 1000 (30 mins)
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
|
||||||
<property>
|
<property>
|
||||||
<name>dfs.pipeline.ecn</name>
|
<name>dfs.pipeline.ecn</name>
|
||||||
<value>false</value>
|
<value>false</value>
|
||||||
|
|
Loading…
Reference in New Issue