@Private
public class DatanodeAdminManager
extends java.lang.Object
A DataNode can be decommissioned in a few situations:
DECOMMISSION_INPROGRESS nodes that become dead do not progress to DECOMMISSIONED until they become live again. This prevents potential durability loss for singly-replicated blocks (see HDFS-6791).
DataNodes can also be put under maintenance state for any short duration maintenance operations. Unlike decommissioning, blocks are not always re-replicated for the DataNodes to enter maintenance state. When the blocks are replicated at least dfs.namenode.maintenance.replication.min, DataNodes transition to IN_MAINTENANCE state. Otherwise, just like decommissioning, DataNodes transition to ENTERING_MAINTENANCE state and wait for the blocks to be sufficiently replicated and then transition to IN_MAINTENANCE state. The block replication factor is relaxed for a maximum of maintenance expiry time. When DataNodes don't transition or join the cluster back by expiry time, blocks are re-replicated just as in decommissioning case as to avoid read or write performance degradation.
This class depends on the FSNamesystem lock for synchronization.
| Modifier and Type | Method | Description |
|---|---|---|
int |
getBlocksPerLock() |
|
int |
getNumNodesChecked() |
|
int |
getNumPendingNodes() |
|
int |
getNumTrackedNodes() |
|
java.util.Queue<DatanodeDescriptor> |
getPendingNodes() |
|
int |
getPendingRepLimit() |
|
protected boolean |
isSufficient(BlockInfo block,
BlockCollection bc,
NumberReplicas numberReplicas,
boolean isDecommission,
boolean isMaintenance) |
Checks whether a block is sufficiently replicated/stored for
DECOMMISSION_INPROGRESS or ENTERING_MAINTENANCE datanodes.
|
protected void |
logBlockReplicationInfo(BlockInfo block,
BlockCollection bc,
DatanodeDescriptor srcNode,
NumberReplicas num,
java.lang.Iterable<DatanodeStorageInfo> storages) |
|
void |
refreshBlocksPerLock(int blocksPerLock,
java.lang.String key) |
|
void |
refreshPendingRepLimit(int pendingRepLimit,
java.lang.String key) |
|
protected void |
setDecommissioned(DatanodeDescriptor dn) |
|
protected void |
setInMaintenance(DatanodeDescriptor dn) |
|
void |
startDecommission(DatanodeDescriptor node) |
Start decommissioning the specified datanode.
|
void |
startMaintenance(DatanodeDescriptor node,
long maintenanceExpireTimeInMS) |
Start maintenance of the specified datanode.
|
void |
stopDecommission(DatanodeDescriptor node) |
Stop decommissioning the specified datanode.
|
void |
stopMaintenance(DatanodeDescriptor node) |
Stop maintenance of the specified datanode.
|
@VisibleForTesting public void startDecommission(DatanodeDescriptor node)
node - @VisibleForTesting public void stopDecommission(DatanodeDescriptor node)
node - @VisibleForTesting public void startMaintenance(DatanodeDescriptor node, long maintenanceExpireTimeInMS)
node - @VisibleForTesting public void stopMaintenance(DatanodeDescriptor node)
node - protected void setDecommissioned(DatanodeDescriptor dn)
protected void setInMaintenance(DatanodeDescriptor dn)
protected boolean isSufficient(BlockInfo block, BlockCollection bc, NumberReplicas numberReplicas, boolean isDecommission, boolean isMaintenance)
protected void logBlockReplicationInfo(BlockInfo block, BlockCollection bc, DatanodeDescriptor srcNode, NumberReplicas num, java.lang.Iterable<DatanodeStorageInfo> storages)
@VisibleForTesting public int getNumPendingNodes()
@VisibleForTesting public int getNumTrackedNodes()
@VisibleForTesting public int getNumNodesChecked()
@VisibleForTesting public java.util.Queue<DatanodeDescriptor> getPendingNodes()
public void refreshPendingRepLimit(int pendingRepLimit,
java.lang.String key)
@VisibleForTesting public int getPendingRepLimit()
public void refreshBlocksPerLock(int blocksPerLock,
java.lang.String key)
@VisibleForTesting public int getBlocksPerLock()
Copyright © 2008–2025 Apache Software Foundation. All rights reserved.