redis/redis ยท critical
Node %s replied with error: %s
Error message
Node %s replied with error: %s
What it means
Same AUTH-failure path as error 30, but reached when redis-benchmark connects through a Unix domain socket (hostsocket != NULL) instead of TCP. The message prints the socket path in place of the IP:port pair and otherwise terminates the run identically.
Source
Thrown at src/redis-benchmark.c:254
if (config.tls==1) {
const char *err = NULL;
if (cliSecureConnection(ctx, config.sslconfig, &err) == REDIS_ERR && err) {
fprintf(stderr, "Could not negotiate a TLS connection: %s\n", err);
goto cleanup;
}
}
if (config.conn_info.auth == NULL)
return ctx;
if (config.conn_info.user == NULL)
reply = redisCommand(ctx,"AUTH %s", config.conn_info.auth);
else
reply = redisCommand(ctx,"AUTH %s %s", config.conn_info.user, config.conn_info.auth);
if (reply != NULL) {
if (reply->type == REDIS_REPLY_ERROR) {
if (hostsocket == NULL)
fprintf(stderr, "Node %s:%d replied with error:\n%s\n", ip, port, reply->str);
else
fprintf(stderr, "Node %s replied with error:\n%s\n", hostsocket, reply->str);
freeReplyObject(reply);
redisFree(ctx);
exit(1);
}
freeReplyObject(reply);
return ctx;
}
fprintf(stderr, "ERROR: failed to fetch reply from ");
if (hostsocket == NULL)
fprintf(stderr, "%s:%d\n", ip, port);
else
fprintf(stderr, "%s\n", hostsocket);
cleanup:
freeReplyObject(reply);
redisFree(ctx);
return NULL;
}
View on GitHub (pinned to 3acc0c49cf)
Solutions
- Confirm the socket exists and its owner matches the user running the benchmark: ls -l /var/run/redis/redis-server.sock
- Test auth over the socket: redis-cli -s /var/run/redis/redis-server.sock -a <password> --no-auth-warning ping
- If ACLs are in use, add --user <username> to the benchmark invocation
- Restart Redis to recreate the socket if it is stale from a prior process
Example fix
# before redis-benchmark -s /var/run/redis/redis-server.sock -a oldpass # after redis-benchmark -s /var/run/redis/redis-server.sock --user default -a 'newpass'
Defensive patterns
Strategy: validation
Validate before calling
/* Same pre-flight AUTH probe, but for a unix-socket target. */
redisReply *probe = redisCommand(ctx, "AUTH %s %s",
config.conn_info.user ? config.conn_info.user : "default",
config.conn_info.auth);
if (probe != NULL && probe->type == REDIS_REPLY_ERROR) {
fprintf(stderr, "auth rejected on socket %s: %s\n", hostsocket, probe->str);
freeReplyObject(probe); redisFree(ctx); return NULL;
} Prevention
- Confirm the unix socket path is correct and owned by the right Redis instance before probing AUTH.
- Run the isolated AUTH probe against the socket target; a socket may point to a differently-configured Redis than the TCP port.
- Distinguish NOAUTH from WRONGPASS in the reply string and only treat credential errors as fatal.
- Validate file permissions on the socket: an unprivileged user may get a permission error that looks like an auth error.
When it happens
Trigger: Running redis-benchmark with -s /var/run/redis/redis-server.sock and an AUTH that the server rejects. The branch at src/redis-benchmark.c:253-254 is taken because hostsocket is non-NULL.
Common situations: Socket permissions changed, socket protected by a different ACL user than the TCP listener, Redis restarted with a new requirepass but the old socket path still in use, or a misconfigured supervisord unit pointing -s at a stale socket from a previous instance.
Related errors
- Node %s:%d replied with error: %s
- ERROR: failed to fetch reply from %s:%d
- Error: %s
- Could not connect to Redis at %s: %s\n
- All clients disconnected... aborting.\n
AI-assisted analysis of redis/redis@3acc0c49cf (2026-08-01).
Data as JSON: /data/errors/6464fa9a99ff345e.json.
Report an issue: GitHub.