apache/seatunnel · warning

Failed to get info from node: {}

Error message

Failed to get info from node: {}

What it means

JedisWrapper.info() traverses every node of a Redis cluster attempting to run the INFO command; when a node fails it logs this warning ('Failed to get info from node: {}') and moves on. If every node fails, a RedisConnectorException (GET_REDIS_INFO_ERROR, 'Failed to get redis info from all node in cluster') is thrown. The warning identifies which specific node was unreachable or errored.

Source

Thrown at seatunnel-connectors-v2/connector-redis/src/main/java/org/apache/seatunnel/connectors/seatunnel/redis/config/JedisWrapper.java:109

    public List<String> zrange(final String key, final long start, final long stop) {
        return jedisCluster.zrange(key, start, stop);
    }

    @Override
    public String info() {
        Map<String, ConnectionPool> nodes = jedisCluster.getClusterNodes();
        if (nodes.isEmpty()) {
            throw new RedisConnectorException(
                    GET_REDIS_INFO_ERROR, "No available nodes in cluster");
        }

        // Traverse all nodes and try to obtain the info
        for (Map.Entry<String, ConnectionPool> entry : nodes.entrySet()) {
            try {
                Jedis jedis = getJedis(entry.getKey());
                return jedis.info();
            } catch (Exception e) {
                log.warn("Failed to get info from node: {}", entry.getKey(), e);
            }
        }

        throw new RedisConnectorException(
                GET_REDIS_INFO_ERROR, "Failed to get redis info from all node in cluster");
    }

    @Override
    public String type(String key) {
        return jedisCluster.type(key);
    }

    public Map<String, ConnectionPool> getClusterNodes() {
        return jedisCluster.getClusterNodes();
    }

    @Override
    public long expire(final String key, final long seconds) {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Check connectivity from the SeaTunnel worker to every cluster node listed by CLUSTER NODES (host/port reachable, not firewalled).
  2. Verify redis auth configuration (password/user) matches the Redis server; test with redis-cli -h <host> -p <port> -a <pass> info.
  3. Ensure at least one cluster node is healthy — the method succeeds as soon as any node returns info; repair or remove dead nodes.
  4. Confirm cluster mode config in SeaTunnel matches the actual Redis deployment (cluster vs standalone/sentinel).
  5. Inspect the attached exception in the warning log for the root cause (timeouts, NOAUTH, connection refused).

Example fix

// before
JedisWrapper wrapper = new JedisWrapper(clusterConfig);
String info = wrapper.info(); // throws if all nodes fail
// after
try {
    String info = wrapper.info();
} catch (RedisConnectorException e) {
    // log per-node warnings above to identify the unhealthy nodes
    log.error("Redis cluster unreachable, check node connectivity/auth", e);
}
Defensive patterns

Strategy: retry

Validate before calling

// before submitting the job, verify the cluster responds
try (Jedis jedis = new Jedis(host, port)) {
    if (password != null) jedis.auth(password);
    jedis.ping();
    String info = jedis.info();
    if (info == null || info.isEmpty()) throw new IllegalStateException("empty INFO");
}

Type guard

boolean isClusterReachable(Set<String> nodes) {
    return nodes != null && !nodes.isEmpty() && nodes.stream().anyMatch(n -> canPing(n));
}

Try / catch

try {
    String info = jedisWrapper.info();
} catch (RedisConnectorException e) {
    if (e.getErrorCode() == GET_REDIS_INFO_ERROR) {
        // inspect per-node warnings logged above, then retry or fail fast
    }
}

Prevention

When it happens

Trigger: Calling JedisWrapper.info() against a Redis cluster where a node is down, connection refused/timed out, requires AUTH the client lacks, or otherwise fails jedis.info(); logged once per failing node before the final exception if all nodes fail.

Common situations: Partial cluster outage or node being rebalanced; Redis node behind firewall/NAT only reachable from some hosts; wrong password (RedisAuthenticationConfig) causing NOAUTH on each node; cluster nodes map stale after topology change; network DNS resolution failures in containerized deployments.

Understand the failure class

Background: ECONNREFUSED and "connection refused" / "could not connect to server" errors: what they mean and how to fix them — this error's family across 44 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/59f03d19a2ffc133. Report an issue: GitHub.