{"record":{"id":"6e5ef6b5c5cea5fe","repo":"apache/hadoop","slug":"data-node-nodeid-is-attempting-to-report-storage","errorCode":null,"errorMessage":"Data node {nodeID} is attempting to report storage ID {datanodeUuid}. Node {storedNode} is expected to serve this storage.","messagePattern":"Data node (.+?) is attempting to report storage ID (.+?)\\. Node (.+?) is expected to serve this storage\\.","errorType":"exception","errorClass":"UnregisteredNodeException","httpStatus":null,"severity":"warning","filePath":"hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java","lineNumber":2899,"sourceCode":"\n    BlockInfoToAdd(BlockInfo stored, Block reported) {\n      this.stored = stored;\n      this.reported = reported;\n    }\n  }\n\n  /**\n   * Check block report lease.\n   * @return true if lease exist and not expire\n   */\n  public boolean checkBlockReportLease(BlockReportContext context,\n      final DatanodeID nodeID) throws UnregisteredNodeException {\n    if (context == null) {\n      return true;\n    }\n    DatanodeDescriptor node = datanodeManager.getDatanode(nodeID);\n    if (node == null) {\n      throw new UnregisteredNodeException(nodeID, null);\n    }\n    final long startTime = Time.monotonicNow();\n    return blockReportLeaseManager.checkLease(node, startTime,\n        context.getLeaseId());\n  }\n\n  /**\n   * The given storage is reporting all its blocks.\n   * Update the (storage{@literal -->}block list) and\n   * (block{@literal -->}storage list) maps.\n   *\n   * @return true if all known storages of the given DN have finished reporting.\n   * @throws IOException\n   */\n  public boolean processReport(final DatanodeID nodeID,\n      final DatanodeStorage storage,\n      final BlockListAsLongs newReport,\n      BlockReportContext context) throws IOException {","sourceCodeStart":2881,"sourceCodeEnd":2917,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java#L2881-L2917","documentation":"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.'","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before: BR lease check fails post-failover\n# NN log: ProcessReport ... UnregisteredNodeException: Data node 10.0.0.5 is attempting to report storage ID ...\n\n# after: force re-registration with active NN, then next block report succeeds\nhdfs haadmin -getAllServiceState | grep active   # identify active NN\nhdfs --daemon restart datanode","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Datanode-side BP service actor pattern:\ntry {\n  nn.blockReport(...context with leaseId...);\n} catch (UnregisteredNodeException e) {\n  // re-register with the active NN, then retry the report next cycle\n  register(); scheduleNextBlockReportImmediately();\n}","preventionTips":["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"],"tags":["hdfs","block-report","lease","datanode-registration","namenode-ha"],"backgroundTag":"unregistered-datanode","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}