Skip to content

Commit f44b325

Browse files
authored
Merge pull request #2109 from go-redis/fix/build
chore: fix build
2 parents 0aa9453 + b0bb514 commit f44b325

17 files changed

+188
-50
lines changed

Makefile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@ fmt:
2626
goimports -w -local github.com/go-redis/redis ./
2727

2828
go_mod_tidy:
29-
go get -u && go mod tidy
3029
set -e; for dir in $(PACKAGE_DIRS); do \
3130
echo "go mod tidy in $${dir}"; \
3231
(cd "$${dir}" && \
33-
go get -u && \
34-
go mod tidy); \
32+
go get -u ./... && \
33+
go mod tidy -compat=1.17); \
3534
done

bench_decode_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func NewClusterClientStub(resp []byte) *ClientStub {
4141

4242
client := NewClusterClient(&ClusterOptions{
4343
PoolSize: 128,
44-
Addrs: []string{"127.0.0.1:6379"},
44+
Addrs: []string{":6379"},
4545
Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) {
4646
return stub.stubConn(initHello), nil
4747
},
@@ -118,7 +118,7 @@ func BenchmarkDecode(b *testing.B) {
118118
}
119119

120120
benchmarks := []Benchmark{
121-
{"single", NewClientStub},
121+
{"server", NewClientStub},
122122
{"cluster", NewClusterClientStub},
123123
}
124124

command.go

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func cmdFirstKeyPos(cmd Cmder, info *CommandInfo) int {
8383
if info != nil {
8484
return int(info.FirstKeyPos)
8585
}
86-
return 0
86+
return 1
8787
}
8888

8989
func cmdString(cmd Cmder, val interface{}) string {
@@ -2649,13 +2649,14 @@ func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error {
26492649

26502650
// subtract start and end.
26512651
nodes := make([]ClusterNode, n-2)
2652+
26522653
for j := 0; j < len(nodes); j++ {
26532654
nn, err := rd.ReadArrayLen()
26542655
if err != nil {
26552656
return err
26562657
}
2657-
if nn != 2 && nn != 3 {
2658-
return fmt.Errorf("got %d elements in cluster info address, expected 2 or 3", nn)
2658+
if nn < 2 || nn > 4 {
2659+
return fmt.Errorf("got %d elements in cluster info address, expected 2, 3, or 4", n)
26592660
}
26602661

26612662
ip, err := rd.ReadString()
@@ -2670,14 +2671,43 @@ func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error {
26702671

26712672
nodes[j].Addr = net.JoinHostPort(ip, port)
26722673

2673-
if nn == 3 {
2674+
if nn >= 3 {
26742675
id, err := rd.ReadString()
26752676
if err != nil {
26762677
return err
26772678
}
26782679
nodes[j].ID = id
26792680
}
2681+
2682+
if nn >= 4 {
2683+
networkingMetadata := make(map[string]string)
2684+
2685+
metadataLength, err := rd.ReadArrayLen()
2686+
if err != nil {
2687+
return err
2688+
}
2689+
2690+
if metadataLength%2 != 0 {
2691+
return fmt.Errorf(
2692+
"got %d elements in metadata, expected an even number", metadataLength)
2693+
}
2694+
2695+
for i := 0; i < metadataLength; i += 2 {
2696+
key, err := rd.ReadString()
2697+
if err != nil {
2698+
return err
2699+
}
2700+
value, err := rd.ReadString()
2701+
if err != nil {
2702+
return err
2703+
}
2704+
networkingMetadata[key] = value
2705+
}
2706+
2707+
nodes[j].NetworkingMetadata = networkingMetadata
2708+
}
26802709
}
2710+
26812711
cmd.val[i] = ClusterSlot{
26822712
Start: int(start),
26832713
End: int(end),
@@ -3136,6 +3166,7 @@ func (cmd *CommandsInfoCmd) String() string {
31363166
func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
31373167
const numArgRedis5 = 6
31383168
const numArgRedis6 = 7
3169+
const numArgRedis7 = 10
31393170

31403171
n, err := rd.ReadArrayLen()
31413172
if err != nil {
@@ -3148,8 +3179,12 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
31483179
if err != nil {
31493180
return err
31503181
}
3151-
if nn != numArgRedis5 && nn != numArgRedis6 {
3152-
return fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 6/7", nn)
3182+
3183+
switch nn {
3184+
case numArgRedis5, numArgRedis6, numArgRedis7:
3185+
// ok
3186+
default:
3187+
return fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 6/7/10", nn)
31533188
}
31543189

31553190
cmdInfo := &CommandInfo{}
@@ -3200,7 +3235,7 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
32003235
}
32013236
cmdInfo.StepCount = int8(stepCount)
32023237

3203-
if nn == numArgRedis6 {
3238+
if nn >= numArgRedis6 {
32043239
aclFlagLen, err := rd.ReadArrayLen()
32053240
if err != nil {
32063241
return err
@@ -3218,6 +3253,18 @@ func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error {
32183253
}
32193254
}
32203255

3256+
if nn >= numArgRedis7 {
3257+
if err := rd.DiscardNext(); err != nil {
3258+
return err
3259+
}
3260+
if err := rd.DiscardNext(); err != nil {
3261+
return err
3262+
}
3263+
if err := rd.DiscardNext(); err != nil {
3264+
return err
3265+
}
3266+
}
3267+
32213268
cmd.val[cmdInfo.Name] = cmdInfo
32223269
}
32233270

commands.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ type Cmdable interface {
310310
ClientKillByFilter(ctx context.Context, keys ...string) *IntCmd
311311
ClientList(ctx context.Context) *StringCmd
312312
ClientPause(ctx context.Context, dur time.Duration) *BoolCmd
313+
ClientUnpause(ctx context.Context) *BoolCmd
313314
ClientID(ctx context.Context) *IntCmd
314315
ClientUnblock(ctx context.Context, id int64) *IntCmd
315316
ClientUnblockWithError(ctx context.Context, id int64) *IntCmd
@@ -2818,6 +2819,12 @@ func (c cmdable) ClientPause(ctx context.Context, dur time.Duration) *BoolCmd {
28182819
return cmd
28192820
}
28202821

2822+
func (c cmdable) ClientUnpause(ctx context.Context) *BoolCmd {
2823+
cmd := NewBoolCmd(ctx, "client", "unpause")
2824+
_ = c(ctx, cmd)
2825+
return cmd
2826+
}
2827+
28212828
func (c cmdable) ClientID(ctx context.Context) *IntCmd {
28222829
cmd := NewIntCmd(ctx, "client", "id")
28232830
_ = c(ctx, cmd)

extra/redisotel/redisotel_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ package redisotel_test
22

33
import (
44
"context"
5-
semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
65
"testing"
76

8-
"github.com/go-redis/redis/extra/redisotel/v8"
9-
"github.com/go-redis/redis/v8"
7+
semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
8+
109
"go.opentelemetry.io/otel"
1110
sdktrace "go.opentelemetry.io/otel/sdk/trace"
1211
"go.opentelemetry.io/otel/trace"
12+
13+
"github.com/go-redis/redis/extra/redisotel/v8"
14+
"github.com/go-redis/redis/v8"
1315
)
1416

1517
func TestNew(t *testing.T) {

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.17
44

55
require (
66
github.com/cespare/xxhash/v2 v2.1.2
7+
github.com/davecgh/go-spew v1.1.1
78
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
89
github.com/onsi/ginkgo v1.16.5
910
github.com/onsi/gomega v1.19.0

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
44
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
55
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
66
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
78
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
89
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
910
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=

internal/pool/conn_check.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
//go:build linux || darwin || dragonfly || freebsd || netbsd || openbsd || solaris || illumos
12
// +build linux darwin dragonfly freebsd netbsd openbsd solaris illumos
23

34
package pool
@@ -46,4 +47,4 @@ func connCheck(conn net.Conn) error {
4647
}
4748

4849
return sysErr
49-
}
50+
}

internal/pool/conn_check_dummy.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
//go:build !linux && !darwin && !dragonfly && !freebsd && !netbsd && !openbsd && !solaris && !illumos
12
// +build !linux,!darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!illumos
23

34
package pool
@@ -6,4 +7,4 @@ import "net"
67

78
func connCheck(conn net.Conn) error {
89
return nil
9-
}
10+
}

internal/pool/main_test.go

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ package pool_test
22

33
import (
44
"context"
5+
"fmt"
56
"net"
67
"sync"
8+
"syscall"
79
"testing"
10+
"time"
811

912
. "github.com/onsi/ginkgo"
1013
. "github.com/onsi/gomega"
@@ -32,5 +35,89 @@ func perform(n int, cbs ...func(int)) {
3235
}
3336

3437
func dummyDialer(context.Context) (net.Conn, error) {
35-
return &net.TCPConn{}, nil
38+
return newDummyConn(), nil
39+
}
40+
41+
func newDummyConn() net.Conn {
42+
return &dummyConn{
43+
rawConn: new(dummyRawConn),
44+
}
45+
}
46+
47+
var (
48+
_ net.Conn = (*dummyConn)(nil)
49+
_ syscall.Conn = (*dummyConn)(nil)
50+
)
51+
52+
type dummyConn struct {
53+
rawConn *dummyRawConn
54+
}
55+
56+
func (d *dummyConn) SyscallConn() (syscall.RawConn, error) {
57+
return d.rawConn, nil
58+
}
59+
60+
var errDummy = fmt.Errorf("dummyConn err")
61+
62+
func (d *dummyConn) Read(b []byte) (n int, err error) {
63+
return 0, errDummy
64+
}
65+
66+
func (d *dummyConn) Write(b []byte) (n int, err error) {
67+
return 0, errDummy
68+
}
69+
70+
func (d *dummyConn) Close() error {
71+
d.rawConn.Close()
72+
return nil
73+
}
74+
75+
func (d *dummyConn) LocalAddr() net.Addr {
76+
return &net.TCPAddr{}
77+
}
78+
79+
func (d *dummyConn) RemoteAddr() net.Addr {
80+
return &net.TCPAddr{}
81+
}
82+
83+
func (d *dummyConn) SetDeadline(t time.Time) error {
84+
return nil
85+
}
86+
87+
func (d *dummyConn) SetReadDeadline(t time.Time) error {
88+
return nil
89+
}
90+
91+
func (d *dummyConn) SetWriteDeadline(t time.Time) error {
92+
return nil
93+
}
94+
95+
var _ syscall.RawConn = (*dummyRawConn)(nil)
96+
97+
type dummyRawConn struct {
98+
mu sync.Mutex
99+
closed bool
100+
}
101+
102+
func (d *dummyRawConn) Control(f func(fd uintptr)) error {
103+
return nil
104+
}
105+
106+
func (d *dummyRawConn) Read(f func(fd uintptr) (done bool)) error {
107+
d.mu.Lock()
108+
defer d.mu.Unlock()
109+
if d.closed {
110+
return fmt.Errorf("dummyRawConn closed")
111+
}
112+
return nil
113+
}
114+
115+
func (d *dummyRawConn) Write(f func(fd uintptr) (done bool)) error {
116+
return nil
117+
}
118+
119+
func (d *dummyRawConn) Close() {
120+
d.mu.Lock()
121+
d.closed = true
122+
d.mu.Unlock()
36123
}

0 commit comments

Comments
 (0)