apache/hadoop · warning · UnregisteredNodeException
Data node {nodeID} is attempting to report storage ID {datan
Error message
Data node {nodeID} is attempting to report storage ID {datanodeUuid}. Node {storedNode} is expected to serve this storage. What it means
Message produced by UnregisteredNodeException(DatanodeID, null) thrown in BlockManager.checkBlockReportLease when a datanode sends a full block report whose BlockReportContext carries a lease id, but the NameNode cannot resolve nodeID to a DatanodeDescriptor (getDatanode returns null). Since HDFS-14377 full block reports are lease-coordinated; reporting with an unknown identity means the node is not registered (or was dropped), so the report is rejected with 'Data node X is attempting to report storage ID ... Node null is expected to serve this storage.'
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java:2899
BlockInfoToAdd(BlockInfo stored, Block reported) {
this.stored = stored;
this.reported = reported;
}
}
/**
* Check block report lease.
* @return true if lease exist and not expire
*/
public boolean checkBlockReportLease(BlockReportContext context,
final DatanodeID nodeID) throws UnregisteredNodeException {
if (context == null) {
return true;
}
DatanodeDescriptor node = datanodeManager.getDatanode(nodeID);
if (node == null) {
throw new UnregisteredNodeException(nodeID, null);
}
final long startTime = Time.monotonicNow();
return blockReportLeaseManager.checkLease(node, startTime,
context.getLeaseId());
}
/**
* The given storage is reporting all its blocks.
* Update the (storage{@literal -->}block list) and
* (block{@literal -->}storage list) maps.
*
* @return true if all known storages of the given DN have finished reporting.
* @throws IOException
*/
public boolean processReport(final DatanodeID nodeID,
final DatanodeStorage storage,
final BlockListAsLongs newReport,
BlockReportContext context) throws IOException {View on GitHub (pinned to 2add963021)
Solutions
- Verify the datanode is registered with the active NN: `hdfs dfsadmin -report`; restart the datanode if not
- After NN restart/failover, wait for datanodes to re-register and re-run block reports; the rejected report is retried on the next BR cycle
- Check NN logs for why the node was dropped (denied by include-list, decommission) and fix accordingly
- Ensure only one active NN (split-brain check) so DNs are not reporting to a stale active
Example fix
# before: BR lease check fails post-failover # NN log: ProcessReport ... UnregisteredNodeException: Data node 10.0.0.5 is attempting to report storage ID ... # after: force re-registration with active NN, then next block report succeeds hdfs haadmin -getAllServiceState | grep active # identify active NN hdfs --daemon restart datanode
Defensive patterns
Strategy: retry
Try / catch
// Datanode-side BP service actor pattern:
try {
nn.blockReport(...context with leaseId...);
} catch (UnregisteredNodeException e) {
// re-register with the active NN, then retry the report next cycle
register(); scheduleNextBlockReportImmediately();
} Prevention
- Ensure DNs re-register promptly after NN restart/failover (they do on heartbeat)
- Avoid split-brain: exactly one active NN via HA fencing
- Keep include-lists consistent across HA NNs
- Monitor NN logs for registration/BR lease rejections during failover drills
When it happens
Trigger: Datanode sends a full block report (with non-null BlockReportContext) after the NN restarted/failed over and its registration was lost, or the node was decommissioned/removed; delayed/raced BR RPCs from a previous NN incarnation arriving at a new active NN.
Common situations: NameNode restart or HA failover while datanodes are mid block-report cycle; NN evicted the node (decommission, registration timeout); standby-to-active transition where the DN has not yet re-registered with the new active.
Related errors
- ProcessReport from dead or unregistered node: {nodeID}
- Bad status:
- Datanode {datanode} not found.
- Cannot mark {blk} as corrupt because datanode {dn} ({datanod
- Cannot invalidate {b} because datanode {dn} does not exist.
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/6e5ef6b5c5cea5fe.
Report an issue: GitHub.