Add DisableHelloCmd options

This commit is contained in:
zhangjianfeng_dxm 2023-11-09 13:28:20 +08:00
parent 21bd40a47e
commit 3805610dff
2 changed files with 19 additions and 13 deletions

View File

@ -144,6 +144,10 @@ type Options struct {
// Disable set-lib on connect. Default is false.
DisableIndentity bool
// Disable Hello on connect. Default is false.
// Hello is used to check the server version,but in Enterprise environment with twproxy,it will cause error,return EOF panic.
DisableHelloCmd bool
}
func (opt *Options) init() {

View File

@ -285,19 +285,21 @@ func (c *baseClient) initConn(ctx context.Context, cn *pool.Conn) error {
protocol = 3
}
// for redis-server versions that do not support the HELLO command,
// RESP2 will continue to be used.
if err := conn.Hello(ctx, protocol, username, password, "").Err(); err == nil {
auth = true
} else if !isRedisError(err) {
// When the server responds with the RESP protocol and the result is not a normal
// execution result of the HELLO command, we consider it to be an indication that
// the server does not support the HELLO command.
// The server may be a redis-server that does not support the HELLO command,
// or it could be DragonflyDB or a third-party redis-proxy. They all respond
// with different error string results for unsupported commands, making it
// difficult to rely on error strings to determine all results.
return err
if !c.opt.DisableHelloCmd {
// for redis-server versions that do not support the HELLO command,
// RESP2 will continue to be used.
if err := conn.Hello(ctx, protocol, username, password, "").Err(); err == nil {
auth = true
} else if !isRedisError(err) {
// When the server responds with the RESP protocol and the result is not a normal
// execution result of the HELLO command, we consider it to be an indication that
// the server does not support the HELLO command.
// The server may be a redis-server that does not support the HELLO command,
// or it could be DragonflyDB or a third-party redis-proxy. They all respond
// with different error string results for unsupported commands, making it
// difficult to rely on error strings to determine all results.
return err
}
}
if !c.opt.DisableIndentity {
libName := ""