Skip to content

Commit 52ff2dc

Browse files
committed
proxy: fix issue #1314
Make sure *SCAN commands must be routed to master instances.
1 parent 9851f82 commit 52ff2dc

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

pkg/proxy/forward.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ func (d *forwardHelper) slotsmgrtExecWrapper(s *Slot, hkey []byte, database int3
215215

216216
func (d *forwardHelper) forward2(s *Slot, r *Request) *BackendConn {
217217
var database, seed = r.Database, r.Seed16()
218-
if s.migrate.bc == nil && r.IsReadOnly() && len(s.replicaGroups) != 0 {
218+
if s.migrate.bc == nil && !r.IsMasterOnly() && len(s.replicaGroups) != 0 {
219219
for _, group := range s.replicaGroups {
220220
var i = seed
221221
for _ = range group {

pkg/proxy/mapper.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,19 @@ func (f OpFlag) IsReadOnly() bool {
3737
return (f & mask) == 0
3838
}
3939

40+
func (f OpFlag) IsMasterOnly() bool {
41+
const mask = FlagWrite | FlagMayWrite | FlagMasterOnly
42+
return (f & mask) == 0
43+
}
44+
4045
type OpInfo struct {
4146
Name string
4247
Flag OpFlag
4348
}
4449

4550
const (
4651
FlagWrite = 1 << iota
52+
FlagMasterOnly
4753
FlagMayWrite
4854
FlagNotAllow
4955
)
@@ -104,7 +110,7 @@ func init() {
104110
{"HLEN", 0},
105111
{"HMGET", 0},
106112
{"HMSET", FlagWrite},
107-
{"HSCAN", 0},
113+
{"HSCAN", FlagMasterOnly},
108114
{"HSET", FlagWrite},
109115
{"HSETNX", FlagWrite},
110116
{"HSTRLEN", 0},
@@ -166,7 +172,7 @@ func init() {
166172
{"RPUSHX", FlagWrite},
167173
{"SADD", FlagWrite},
168174
{"SAVE", FlagNotAllow},
169-
{"SCAN", FlagNotAllow},
175+
{"SCAN", FlagMasterOnly | FlagNotAllow},
170176
{"SCARD", 0},
171177
{"SCRIPT", FlagNotAllow},
172178
{"SDIFF", 0},
@@ -185,7 +191,7 @@ func init() {
185191
{"SLOTSCHECK", FlagNotAllow},
186192
{"SLOTSDEL", FlagWrite | FlagNotAllow},
187193
{"SLOTSHASHKEY", 0},
188-
{"SLOTSINFO", 0},
194+
{"SLOTSINFO", FlagMasterOnly},
189195
{"SLOTSMAPPING", 0},
190196
{"SLOTSMGRTONE", FlagWrite | FlagNotAllow},
191197
{"SLOTSMGRTSLOT", FlagWrite | FlagNotAllow},
@@ -203,15 +209,15 @@ func init() {
203209
{"SLOTSRESTORE-ASYNC", FlagWrite | FlagNotAllow},
204210
{"SLOTSRESTORE-ASYNC-AUTH", FlagWrite | FlagNotAllow},
205211
{"SLOTSRESTORE-ASYNC-ACK", FlagWrite | FlagNotAllow},
206-
{"SLOTSSCAN", 0},
212+
{"SLOTSSCAN", FlagMasterOnly},
207213
{"SLOWLOG", FlagNotAllow},
208214
{"SMEMBERS", 0},
209215
{"SMOVE", FlagWrite},
210216
{"SORT", FlagWrite},
211217
{"SPOP", FlagWrite},
212218
{"SRANDMEMBER", 0},
213219
{"SREM", FlagWrite},
214-
{"SSCAN", 0},
220+
{"SSCAN", FlagMasterOnly},
215221
{"STRLEN", 0},
216222
{"SUBSCRIBE", FlagNotAllow},
217223
{"SUBSTR", 0},
@@ -244,7 +250,7 @@ func init() {
244250
{"ZREVRANGEBYLEX", 0},
245251
{"ZREVRANGEBYSCORE", 0},
246252
{"ZREVRANK", 0},
247-
{"ZSCAN", 0},
253+
{"ZSCAN", FlagMasterOnly},
248254
{"ZSCORE", 0},
249255
{"ZUNIONSTORE", FlagWrite},
250256
} {

0 commit comments

Comments
 (0)