{"record":{"id":"ea1009cb06436a5e","repo":"apache/hadoop","slug":"shutting-down-writer-and-responder-since-the-down","errorCode":null,"errorMessage":"Shutting down writer and responder since the down streams reported the data sent by this thread is corrupt","messagePattern":"Shutting down writer and responder since the down streams reported the data sent by this thread is corrupt","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java","lineNumber":1665,"sourceCode":"        int h1 = PipelineAck.combineHeader(datanode.getECN(), Status.ERROR,\n            datanode.getSLOWByBlockPoolId(block.getBlockPoolId()));\n        replies = new int[] {h, h1};\n      } else {\n        short ackLen = type == PacketResponderType.LAST_IN_PIPELINE ? 0 : ack\n            .getNumOfReplies();\n        replies = new int[ackLen + 1];\n        replies[0] = myHeader;\n        for (int i = 0; i < ackLen; ++i) {\n          replies[i + 1] = ack.getHeaderFlag(i);\n        }\n        DataNodeFaultInjector.get().markSlow(mirrorAddr, replies);\n        // If the mirror has reported that it received a corrupt packet,\n        // do self-destruct to mark myself bad, instead of making the\n        // mirror node bad. The mirror is guaranteed to be good without\n        // corrupt data on disk.\n        if (ackLen > 0 && PipelineAck.getStatusFromHeader(replies[1]) ==\n          Status.ERROR_CHECKSUM) {\n          throw new IOException(\"Shutting down writer and responder \"\n              + \"since the down streams reported the data sent by this \"\n              + \"thread is corrupt\");\n        }\n      }\n      PipelineAck replyAck = new PipelineAck(seqno, replies,\n          totalAckTimeNanos);\n      if (replyAck.isSuccess()\n          && offsetInBlock > replicaInfo.getBytesAcked()) {\n        replicaInfo.setBytesAcked(offsetInBlock);\n      }\n      // send my ack back to upstream datanode\n      long begin = Time.monotonicNow();\n      DataNodeFaultInjector.get().delay();\n      /* for test only, no-op in production system */\n      DataNodeFaultInjector.get().delaySendingAckToUpstream(inAddr);\n      replyAck.write(upstreamOut);\n      upstreamOut.flush();\n      long duration = Time.monotonicNow() - begin;","sourceCodeStart":1647,"sourceCodeEnd":1683,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java#L1647-L1683","documentation":"Error \"Shutting down writer and responder since the down streams reported the data sent by this thread is corrupt\" thrown in apache/hadoop.","triggerScenarios":"A downstream DataNode in the write pipeline reported that data mirrored from this node is corrupt, so this node shuts down its writer and responder threads.","commonSituations":"Downstream DataNodes reported corrupt data for this block, so the writer shut itself down. Investigate the downstream node logs for the original checksum failure.","solutions":["Investigate the downstream DataNode that reported corruption: check its disks, memory, and network, and replace faulty hardware.","Once the faulty node is fixed or decommissioned, the NameNode will re-replicate the block; no manual repair of this node is needed."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}