Skip to content

Commit c1b63a6

Browse files
authored
DBSize,ScriptLoad,ScriptFlush and ScriptExists should use hook (redis#1811)
Signed-off-by: monkey <[email protected]>
1 parent dd4b7eb commit c1b63a6

File tree

1 file changed

+56
-46
lines changed

1 file changed

+56
-46
lines changed

cluster_commands.go

Lines changed: 56 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -8,55 +8,63 @@ import (
88

99
func (c *ClusterClient) DBSize(ctx context.Context) *IntCmd {
1010
cmd := NewIntCmd(ctx, "dbsize")
11-
var size int64
12-
err := c.ForEachMaster(ctx, func(ctx context.Context, master *Client) error {
13-
n, err := master.DBSize(ctx).Result()
11+
_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
12+
var size int64
13+
err := c.ForEachMaster(ctx, func(ctx context.Context, master *Client) error {
14+
n, err := master.DBSize(ctx).Result()
15+
if err != nil {
16+
return err
17+
}
18+
atomic.AddInt64(&size, n)
19+
return nil
20+
})
1421
if err != nil {
15-
return err
22+
cmd.SetErr(err)
23+
} else {
24+
cmd.val = size
1625
}
17-
atomic.AddInt64(&size, n)
1826
return nil
1927
})
20-
if err != nil {
21-
cmd.SetErr(err)
22-
return cmd
23-
}
24-
cmd.val = size
2528
return cmd
2629
}
2730

2831
func (c *ClusterClient) ScriptLoad(ctx context.Context, script string) *StringCmd {
2932
cmd := NewStringCmd(ctx, "script", "load", script)
30-
mu := &sync.Mutex{}
31-
err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
32-
val, err := shard.ScriptLoad(ctx, script).Result()
33+
_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
34+
mu := &sync.Mutex{}
35+
err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
36+
val, err := shard.ScriptLoad(ctx, script).Result()
37+
if err != nil {
38+
return err
39+
}
40+
41+
mu.Lock()
42+
if cmd.Val() == "" {
43+
cmd.val = val
44+
}
45+
mu.Unlock()
46+
47+
return nil
48+
})
3349
if err != nil {
34-
return err
35-
}
36-
37-
mu.Lock()
38-
if cmd.Val() == "" {
39-
cmd.val = val
50+
cmd.SetErr(err)
4051
}
41-
mu.Unlock()
42-
4352
return nil
4453
})
45-
if err != nil {
46-
cmd.SetErr(err)
47-
}
48-
4954
return cmd
5055
}
5156

5257
func (c *ClusterClient) ScriptFlush(ctx context.Context) *StatusCmd {
5358
cmd := NewStatusCmd(ctx, "script", "flush")
54-
_ = c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
55-
shard.ScriptFlush(ctx)
56-
59+
_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
60+
err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
61+
return shard.ScriptFlush(ctx).Err()
62+
})
63+
if err != nil {
64+
cmd.SetErr(err)
65+
}
5766
return nil
5867
})
59-
6068
return cmd
6169
}
6270

@@ -74,26 +82,28 @@ func (c *ClusterClient) ScriptExists(ctx context.Context, hashes ...string) *Boo
7482
result[i] = true
7583
}
7684

77-
mu := &sync.Mutex{}
78-
err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
79-
val, err := shard.ScriptExists(ctx, hashes...).Result()
85+
_ = c.hooks.process(ctx, cmd, func(ctx context.Context, _ Cmder) error {
86+
mu := &sync.Mutex{}
87+
err := c.ForEachShard(ctx, func(ctx context.Context, shard *Client) error {
88+
val, err := shard.ScriptExists(ctx, hashes...).Result()
89+
if err != nil {
90+
return err
91+
}
92+
93+
mu.Lock()
94+
for i, v := range val {
95+
result[i] = result[i] && v
96+
}
97+
mu.Unlock()
98+
99+
return nil
100+
})
80101
if err != nil {
81-
return err
82-
}
83-
84-
mu.Lock()
85-
for i, v := range val {
86-
result[i] = result[i] && v
102+
cmd.SetErr(err)
103+
} else {
104+
cmd.val = result
87105
}
88-
mu.Unlock()
89-
90106
return nil
91107
})
92-
if err != nil {
93-
cmd.SetErr(err)
94-
}
95-
96-
cmd.val = result
97-
98108
return cmd
99109
}

0 commit comments

Comments
 (0)