{"record":{"id":"b21c25abeaa479ff","repo":"apache/druid","slug":"recoverable-exception-b21c25","errorCode":null,"errorMessage":"Recoverable exception","messagePattern":"Recoverable exception","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java","lineNumber":162,"sourceCode":"      throw new SegmentLoadingException(e, e.getMessage());\n    }\n  }\n\n  @Nonnull\n  private ByteSource getByteSource(URI uri)\n  {\n    final ByteSource byteSource = new ByteSource()\n    {\n      @Override\n      public InputStream openStream() throws IOException\n      {\n        try {\n          return buildFileObject(uri).openInputStream();\n        }\n        catch (SdkException e) {\n          if (e.getCause() != null) {\n            if (S3Utils.S3RETRY.apply(e)) {\n              throw new IOException(\"Recoverable exception\", e);\n            }\n          }\n          throw new RuntimeException(e);\n        }\n      }\n    };\n    return byteSource;\n  }\n\n  @Override\n  public InputStream getInputStream(URI uri) throws IOException\n  {\n    try {\n      return buildFileObject(uri).openInputStream();\n    }\n    catch (SdkException e) {\n      throw new IOE(e, \"Could not load URI [%s]\", uri);\n    }","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java#L144-L180","documentation":"Retry-signaling wrapper in S3DataSegmentPuller.getByteSource's openStream: reading the S3 object threw an SdkException classified as retryable by S3Utils.S3RETRY (e.g. throttling, transient 5xx), which is rethrown as an IOException labeled 'Recoverable exception' so upstream retry logic can reattempt the stream.","triggerScenarios":"Thrown at extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java:162 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the segment load; the error is transient by design.","If frequent, check S3 request rates/throttling and bucket region versus druid storage config.","Verify S3 credentials and endpoint settings reduce transient failures."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}