redis/jedis · warning · IOException

No response stream available from server

Error message

No response stream available from server (code=${code})

What it means

readResponse() reads the HTTP response body of a REST API call. If reading the normal stream throws and connection.getErrorStream() is also null, there is no body to read, so it throws IOException("No response stream available from server (code=<code>)"). This typically happens when the connection failed before any body was produced.

Solutions

  1. Retry the REST request (transient network issue) — ideally wrap RedisRestAPI calls in a retry with backoff
  2. Increase connect/read timeouts (timeoutMs) if the server is slow
  3. Check cluster/node health and logs for abrupt connection resets
  4. Catch IOException and surface a clear message including the HTTP code from the exception text

Example fix

// before
String body = redisRestAPI.bdbs(); // may throw on flaky network
// after
String body = retry(3, () -> redisRestAPI.bdbs()); // retry transient IOExceptions
Defensive patterns

Strategy: retry

Try / catch

try { body = api.bdbs(); } catch (IOException e) { /* retry with backoff; treat as transient network failure */ }

Prevention

When it happens

Trigger: Server closed the connection abruptly, request timed out at the server, HTTP error with empty body and null error stream, or network interruption between response code and body.

Common situations: Cluster node reset mid-request; firewall/proxy dropping keep-alive connections; REST endpoint under load closing connections without a response body.

Related errors


AI-assisted analysis of redis/jedis@6dac31d4c2 (2026-09-08). Data as JSON: /api/errors/2afba2cf57e501de. Report an issue: GitHub.

Appendix: source

Thrown at src/main/java/redis/clients/jedis/mcf/RedisRestAPI.java:250

      bdbInfoList.add(new RedisRestAPI.BdbInfo(bdbId, endpoints));
    }

    return bdbInfoList;
  }

  static String readResponse(HttpURLConnection connection) throws IOException {
    InputStream inputStream = null;
    try {
      inputStream = connection.getInputStream();
      if (inputStream == null) {
        inputStream = connection.getErrorStream();
      }
    } catch (IOException e) {
      // If there's an error, try to read from error stream
      inputStream = connection.getErrorStream();
    }
    if (inputStream == null) {
      throw new IOException(
          "No response stream available from server (code=" + connection.getResponseCode() + ")");
    }

    StringBuilder response = new StringBuilder();
    byte[] buffer = new byte[1024];
    int bytesRead;

    while ((bytesRead = inputStream.read(buffer)) != -1) {
      response.append(new String(buffer, 0, bytesRead, StandardCharsets.UTF_8));
    }

    inputStream.close();
    return response.toString();
  }

  /**
   * Information about a Redis Enterprise BDB (database) including its endpoints.
   */

View on GitHub (pinned to 6dac31d4c2)