{"record":{"id":"c3cc7c5eb7e68901","repo":"apache/hadoop","slug":"no-data-returned-from-get-request","errorCode":null,"errorMessage":"No data returned from GET request","messagePattern":"No data returned from GET request","errorType":"exception","errorClass":"PathIOException","httpStatus":null,"severity":"error","filePath":"hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/impl/ChangeTracker.java","lineNumber":189,"sourceCode":"      final String operation,\n      final long pos) throws PathIOException {\n    if (object == null) {\n      // no object returned. Either mismatch or something odd.\n      if (revisionId != null) {\n        // the requirements of the change detection policy wasn't met: the\n        // object was not returned.\n        versionMismatches.versionMismatchError();\n        throw new RemoteFileChangedException(uri, operation,\n            String.format(CHANGE_REPORTED_BY_S3\n                    + \" during %s\"\n                    + \" at position %s.\"\n                    + \" %s %s was unavailable\",\n                operation,\n                pos,\n                getSource(),\n                getRevisionId()));\n      } else {\n        throw new PathIOException(uri, \"No data returned from GET request\");\n      }\n    }\n\n    processMetadata(object, operation);\n  }\n\n  /**\n   * Process the response from the server for validation against the\n   * change policy.\n   * @param copyObjectResponse response of a copy operation\n   * @throws PathIOException raised on failure\n   * @throws RemoteFileChangedException if the remote file has changed.\n   */\n  public void processResponse(final CopyObjectResponse copyObjectResponse)\n      throws PathIOException {\n    // ETag (sometimes, depending on encryption and/or multipart) is not the\n    // same on the copied object as the original.  Version Id seems to never\n    // be the same on the copy.  As such, there isn't really anything that","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/impl/ChangeTracker.java#L171-L207","documentation":"PathIOException from ChangeTracker.processResponse when the GET response carries no object while the tracker holds no revision id (revisionId == null), i.e. change detection has no expectation to compare against yet the store still returned nothing. It is the defensive sibling of the RemoteFileChangedException branch: the response is empty, but there is no revision evidence to attribute it to a concurrent modification, so it surfaces as a generic IO failure on the URI with the fixed message 'No data returned from GET request'.","triggerScenarios":"processResponse invoked with a null GetObjectResponse while operating without a recorded revision -- for example a read with change detection effectively inactive (policy none or first response) hitting an empty/aborted response from S3 or an intermediary.","commonSituations":"Transient empty responses from proxies, gateways or S3 itself (throttling, connection resets); object deleted between two phases of an operation when no revision was captured; SDK-level response handling returning null bodies under load.","solutions":["Retry the read: with no revision mismatch implicated, the failure is treated as transient I/O","If it recurs, capture network-level evidence (SDK request id, proxy logs) -- an intermediary may be truncating responses","Check the object still exists at the URI named in the exception","Confirm fs.s3a.change.detection.policy configuration if consistent revision checking was expected but revisionId is null"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  tracker.processResponse(object, operation, pos);\n} catch (PathIOException e) {\n  if (\"No data returned from GET request\".equals(e.getMessage())) {\n    // empty GET with no revision expectation: transient -- backoff and retry\n    throw new RetriableException(e);\n  }\n  throw e;\n}","preventionTips":["Retry transient empty GET responses with exponential backoff before failing the task","Capture SDK request ids when it recurs to correlate with S3 support or proxy logs","Verify the object still exists (HEAD) before retrying to distinguish deletion from transient emptiness"],"tags":["s3a","change-detection","io","transient"],"backgroundTag":"s3-get-request-failed","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}