{"record":{"id":"1e21b26fac102555","repo":"apache/hadoop","slug":"can-t-read-data-from-minimum-number-of-sources-req","errorCode":null,"errorMessage":"Can't read data from minimum number of sources required by reconstruction, block id: {}","messagePattern":"Can't read data from minimum number of sources required by reconstruction, block id: (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/erasurecode/StripedReader.java","lineNumber":346,"sourceCode":"            // number of source DNs required by reconstruction.\n            cancelReads(futures.keySet());\n            clearFuturesAndService();\n            break;\n          }\n        }\n      } catch (InterruptedException e) {\n        LOG.info(\"Read data interrupted.\", e);\n        cancelReads(futures.keySet());\n        clearFuturesAndService();\n        break;\n      }\n    }\n\n    if (nSuccess < minRequiredSources) {\n      String error = \"Can't read data from minimum number of sources \"\n          + \"required by reconstruction, block id: \" +\n          reconstructor.getBlockGroup().getBlockId();\n      throw new IOException(error);\n    }\n\n    return newSuccess;\n  }\n\n  /**\n   * Schedule a read from some new source DN if some DN is corrupted\n   * or slow, this is called from the read iteration.\n   * Initially we may only have <code>minRequiredSources</code> number of\n   * StripedBlockReader.\n   * If the position is at the end of target block, don't need to do\n   * real read, and return the array index of source DN, otherwise -1.\n   *\n   * @param used the used source DNs in this iteration.\n   * @return the array index of source DN if don't need to do real read.\n   */\n  private int scheduleNewRead(BitSet used, int reconstructLength,\n                              CorruptedBlocks corruptedBlocks) {","sourceCodeStart":328,"sourceCodeEnd":364,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/erasurecode/StripedReader.java#L328-L364","documentation":"Error \"Can't read data from minimum number of sources required by reconstruction, block id: {}\" thrown in apache/hadoop.","triggerScenarios":"Erasure-coding read when enough sources are located but reads from the minimum number of sources all fail (I/O errors, corrupt stripes, network timeouts).","commonSituations":"See trigger scenarios.","solutions":["Investigate read failures on the source DataNodes (disk errors, timeouts) in their logs and repair the faulty storage.","Verify network stability between the reconstructing DataNode and the sources.","If the block is corrupt or missing on too many sources, restore it from another replica or rerun reconstruction after sources recover."],"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-23T01:17:44.959Z"}