apache/hadoop · error · IllegalArgumentException

requested read length is more than will fit after requested

Error message

requested read length is more than will fit after requested offset in buffer

What it means

Error "requested read length is more than will fit after requested offset in buffer" thrown in apache/hadoop.

Source

Thrown at hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsInputStream.java:667

  int readRemote(long position, byte[] b, int offset, int length, TracingContext tracingContext) throws IOException {
    if (position < 0) {
      throw new IllegalArgumentException("attempting to read from negative offset");
    }
    if (!(shouldRestrictGpsOnOpenFile() && isFirstRead()) && position >= contentLength) {
      return -1;  // Hadoop prefers -1 to EOFException
    }
    if (b == null) {
      throw new IllegalArgumentException("null byte array passed in to read() method");
    }
    if (offset >= b.length) {
      throw new IllegalArgumentException("offset greater than length of array");
    }
    if (length < 0) {
      throw new IllegalArgumentException("requested read length is less than zero");
    }
    if (length > (b.length - offset)) {
      throw new IllegalArgumentException("requested read length is more than will fit after requested offset in buffer");
    }
    final AbfsRestOperation op;
    AbfsPerfTracker tracker = client.getAbfsPerfTracker();
    try (AbfsPerfInfo perfInfo = new AbfsPerfInfo(tracker, "readRemote", "read")) {
      if (streamStatistics != null) {
        streamStatistics.remoteReadOperation();
      }
      LOG.trace("Trigger client.read for path={} position={} offset={} length={}", path, position, offset, length);
      tracingContext.setPosition(String.valueOf(position));
      op = client.read(path, position, b, offset, length,
          tolerateOobAppends ? "*" : eTag, cachedSasToken.get(),
          contextEncryptionAdapter, tracingContext);

      // Update metadata on first read if restrictGpsOnOpenFile is enabled
      if (shouldRestrictGpsOnOpenFile() && isFirstRead()) {
        if (client.checkIsDir(op.getResult())) {
          throw directoryReadException();
        }

View on GitHub (pinned to 2add963021)

Solutions

  1. Reduce the requested length so offset + length <= buffer.length.
  2. Fix offset/length computations in the caller.

When it happens

Trigger: read() requests more bytes than fit in the destination array from the given offset.

Common situations: See trigger scenarios.


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