redis-rb / redis-client

Simple low level client for Redis 6+
MIT License
124 stars 60 forks source link

Regression in v0.15.0: Cannot connect to Redis Sentinel with no `requirepass` set #140

Closed stanhu closed 1 year ago

stanhu commented 1 year ago

In v0.14.0, I was able to do this:

require 'redis'
sentinels = [{host: 'my-redis-host', port: 26379}]
redis = Redis.new(url: 'redis://:PASSWORD@gstg-redis:6379', sentinels: sentinels, role: :master)
redis.info

However, with v0.15.0 (most likely due to https://github.com/redis-rb/redis-client/pull/110), I now see:

/usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/connection_mixin.rb:61:in `call_pipelined': ERR AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct? (RedisClient::CommandError)
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:709:in `block in connect'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/middlewares.rb:16:in `call'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:708:in `connect'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:670:in `raw_connection'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:637:in `ensure_connected'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:218:in `call'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:128:in `block in resolve_master'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:170:in `block in each_sentinel'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:166:in `each'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:166:in `each_sentinel'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:127:in `resolve_master'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:119:in `block in config'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:117:in `synchronize'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:117:in `config'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/sentinel_config.rb:69:in `host'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/ruby_connection.rb:117:in `connect'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/ruby_connection.rb:49:in `initialize'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:684:in `new'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:684:in `block in connect'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client/middlewares.rb:12:in `connect'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:683:in `connect'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:670:in `raw_connection'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:637:in `ensure_connected'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-client-0.16.0/lib/redis_client.rb:233:in `call_v'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-5.0.7/lib/redis.rb:167:in `block in send_command'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-5.0.7/lib/redis.rb:166:in `synchronize'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-5.0.7/lib/redis.rb:166:in `send_command'
    from /usr/lib/ruby/gems/3.0.0/gems/redis-5.0.7/lib/redis/commands/strings.rb:95:in `set'

We have this config:

  1. Redis instances have requirepass set.
  2. Redis Sentinel instances do NOT have requirepass set.

Is this setup no longer supported?

stanhu commented 1 year ago

Oh, this might be related to https://github.com/redis/redis-rb/issues/1213#issuecomment-1683764044 and https://github.com/redis-rb/redis-client/pull/137.

stanhu commented 1 year ago

I've validated https://github.com/redis-rb/redis-client/pull/137 fixes the issue, so I'll close this issue.

@byroot Would you be so kind as to release a new version? Thanks!

casperisfine commented 1 year ago

Yeah, I'm due for one.

casperisfine commented 1 year ago

0.17.0 is out https://rubygems.org/gems/redis-client/versions/0.17.0

stanhu commented 1 year ago

Thanks so much! 0.17.0 works.