Skip to content

Commit

Permalink
fix: sentinel should skip redis Nil error
Browse files Browse the repository at this point in the history
  • Loading branch information
sysulq committed Dec 1, 2022
1 parent c068d7e commit faaecb0
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
10 changes: 8 additions & 2 deletions pkg/client/redis/interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,12 @@ func sentinelInterceptor(compName string, addr string, config *Config, logger *x
}).
setAfterProcess(func(ctx context.Context, cmd redis.Cmder) error {
if entry := sentinel.FromContext(ctx); entry != nil {
entry.Exit(sentinel.WithError(cmd.Err()))
var err error
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
err = cmd.Err()
}

entry.Exit(sentinel.WithError(err))
}

return nil
Expand All @@ -359,7 +364,8 @@ func sentinelInterceptor(compName string, addr string, config *Config, logger *x
if entry := sentinel.FromContext(ctx); entry != nil {
var err error
for _, cmd := range cmds {
if cmd.Err() != nil {
// skip redis.Nil error
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
err = cmd.Err()

break
Expand Down
22 changes: 22 additions & 0 deletions pkg/client/redis/interceptor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/douyu/jupiter/pkg/core/xtrace"
"github.com/douyu/jupiter/pkg/core/xtrace/jaeger"
"github.com/go-redis/redis/v8"
"github.com/stretchr/testify/assert"
)

func Test_Interceptor(t *testing.T) {
Expand Down Expand Up @@ -96,4 +97,25 @@ func Test_Interceptor(t *testing.T) {
client.CmdOnMaster().Get(ctx, "redigo")

})
t.Run("sentinel", func(t *testing.T) {

client, _ := config.Build()
ctx := context.Background()
assert.Equal(t, redis.Nil, client.CmdOnMaster().Get(ctx, "redigo").Err())

time.Sleep(time.Millisecond)

_, err := client.CmdOnMaster().Pipelined(ctx, func(pipeliner redis.Pipeliner) error {
pipeliner.Get(ctx, "redigo")
return nil
})
assert.Equal(t, redis.Nil, err)
assert.Contains(t, client.CmdOnMaster().Do(ctx, "get").Err().Error(), "wrong number of arguments")

_, err = client.CmdOnMaster().Pipelined(ctx, func(pipeliner redis.Pipeliner) error {
pipeliner.Do(ctx, "get")
return nil
})
assert.Contains(t, err, "wrong number of arguments")
})
}

0 comments on commit faaecb0

Please sign in to comment.