apache/hadoop · error · PathIOException

No data returned from GET request

Error message

No data returned from GET request

What it means

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'.

Source

Thrown at hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/impl/ChangeTracker.java:189

      final String operation,
      final long pos) throws PathIOException {
    if (object == null) {
      // no object returned. Either mismatch or something odd.
      if (revisionId != null) {
        // the requirements of the change detection policy wasn't met: the
        // object was not returned.
        versionMismatches.versionMismatchError();
        throw new RemoteFileChangedException(uri, operation,
            String.format(CHANGE_REPORTED_BY_S3
                    + " during %s"
                    + " at position %s."
                    + " %s %s was unavailable",
                operation,
                pos,
                getSource(),
                getRevisionId()));
      } else {
        throw new PathIOException(uri, "No data returned from GET request");
      }
    }

    processMetadata(object, operation);
  }

  /**
   * Process the response from the server for validation against the
   * change policy.
   * @param copyObjectResponse response of a copy operation
   * @throws PathIOException raised on failure
   * @throws RemoteFileChangedException if the remote file has changed.
   */
  public void processResponse(final CopyObjectResponse copyObjectResponse)
      throws PathIOException {
    // ETag (sometimes, depending on encryption and/or multipart) is not the
    // same on the copied object as the original.  Version Id seems to never
    // be the same on the copy.  As such, there isn't really anything that

View on GitHub (pinned to 2add963021)

Solutions

  1. Retry the read: with no revision mismatch implicated, the failure is treated as transient I/O
  2. If it recurs, capture network-level evidence (SDK request id, proxy logs) -- an intermediary may be truncating responses
  3. Check the object still exists at the URI named in the exception
  4. Confirm fs.s3a.change.detection.policy configuration if consistent revision checking was expected but revisionId is null
Defensive patterns

Strategy: retry

Try / catch

try {
  tracker.processResponse(object, operation, pos);
} catch (PathIOException e) {
  if ("No data returned from GET request".equals(e.getMessage())) {
    // empty GET with no revision expectation: transient -- backoff and retry
    throw new RetriableException(e);
  }
  throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/c3cc7c5eb7e68901. Report an issue: GitHub.