Skip to content

Commit 64245f8

Browse files
committed
split command map into module->command
1 parent 1b2eaa6 commit 64245f8

File tree

1 file changed

+125
-106
lines changed

1 file changed

+125
-106
lines changed

command_policy_manager.go

Lines changed: 125 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -7,113 +7,120 @@ import (
77
"github.com/redis/go-redis/v9/internal/routing"
88
)
99

10-
var defaultPolicies = map[string]*routing.CommandPolicy{
11-
"ft.create": {
12-
Request: routing.ReqDefault,
13-
Response: routing.RespDefaultKeyless,
14-
},
15-
"ft.search": {
16-
Request: routing.ReqDefault,
17-
Response: routing.RespDefaultKeyless,
18-
},
19-
"ft.aggregate": {
20-
Request: routing.ReqDefault,
21-
Response: routing.RespDefaultKeyless,
22-
},
23-
"ft.dictadd": {
24-
Request: routing.ReqDefault,
25-
Response: routing.RespDefaultKeyless,
26-
},
27-
"ft.dictdump": {
28-
Request: routing.ReqDefault,
29-
Response: routing.RespDefaultKeyless,
30-
},
31-
"ft.dictdel": {
32-
Request: routing.ReqDefault,
33-
Response: routing.RespDefaultKeyless,
34-
},
35-
"ft.suglen": {
36-
Request: routing.ReqDefault,
37-
Response: routing.RespDefaultHashSlot,
38-
},
39-
"ft.cursor": {
40-
Request: routing.ReqSpecial,
41-
Response: routing.RespDefaultKeyless,
42-
},
43-
"ft.sugadd": {
44-
Request: routing.ReqDefault,
45-
Response: routing.RespDefaultHashSlot,
46-
},
47-
"ft.sugget": {
48-
Request: routing.ReqDefault,
49-
Response: routing.RespDefaultHashSlot,
50-
},
51-
"ft.sugdel": {
52-
Request: routing.ReqDefault,
53-
Response: routing.RespDefaultHashSlot,
54-
},
55-
"ft.spellcheck": {
56-
Request: routing.ReqDefault,
57-
Response: routing.RespDefaultKeyless,
58-
},
59-
"ft.explain": {
60-
Request: routing.ReqDefault,
61-
Response: routing.RespDefaultKeyless,
62-
},
63-
"ft.explaincli": {
64-
Request: routing.ReqDefault,
65-
Response: routing.RespDefaultKeyless,
66-
},
67-
"ft.aliasadd": {
68-
Request: routing.ReqDefault,
69-
Response: routing.RespDefaultKeyless,
70-
},
71-
"ft.aliasupdate": {
72-
Request: routing.ReqDefault,
73-
Response: routing.RespDefaultKeyless,
74-
},
75-
"ft.aliasdel": {
76-
Request: routing.ReqDefault,
77-
Response: routing.RespDefaultKeyless,
78-
},
79-
"ft.info": {
80-
Request: routing.ReqDefault,
81-
Response: routing.RespDefaultKeyless,
82-
},
83-
"ft.tagvals": {
84-
Request: routing.ReqDefault,
85-
Response: routing.RespDefaultKeyless,
86-
},
87-
"ft.syndump": {
88-
Request: routing.ReqDefault,
89-
Response: routing.RespDefaultKeyless,
90-
},
91-
"ft.synupdate": {
92-
Request: routing.ReqDefault,
93-
Response: routing.RespDefaultKeyless,
94-
},
95-
"ft.profile": {
96-
Request: routing.ReqDefault,
97-
Response: routing.RespDefaultKeyless,
98-
},
99-
"ft.alter": {
100-
Request: routing.ReqDefault,
101-
Response: routing.RespDefaultKeyless,
102-
},
103-
"ft.dropindex": {
104-
Request: routing.ReqDefault,
105-
Response: routing.RespDefaultKeyless,
106-
},
107-
"ft.drop": {
108-
Request: routing.ReqDefault,
109-
Response: routing.RespDefaultKeyless,
10+
type (
11+
module = string
12+
commandName = string
13+
)
14+
15+
var defaultPolicies = map[module]map[commandName]*routing.CommandPolicy{
16+
"ft": {
17+
"create": {
18+
Request: routing.ReqDefault,
19+
Response: routing.RespDefaultKeyless,
20+
},
21+
"search": {
22+
Request: routing.ReqDefault,
23+
Response: routing.RespDefaultKeyless,
24+
},
25+
"aggregate": {
26+
Request: routing.ReqDefault,
27+
Response: routing.RespDefaultKeyless,
28+
},
29+
"dictadd": {
30+
Request: routing.ReqDefault,
31+
Response: routing.RespDefaultKeyless,
32+
},
33+
"dictdump": {
34+
Request: routing.ReqDefault,
35+
Response: routing.RespDefaultKeyless,
36+
},
37+
"dictdel": {
38+
Request: routing.ReqDefault,
39+
Response: routing.RespDefaultKeyless,
40+
},
41+
"suglen": {
42+
Request: routing.ReqDefault,
43+
Response: routing.RespDefaultHashSlot,
44+
},
45+
"cursor": {
46+
Request: routing.ReqSpecial,
47+
Response: routing.RespDefaultKeyless,
48+
},
49+
"sugadd": {
50+
Request: routing.ReqDefault,
51+
Response: routing.RespDefaultHashSlot,
52+
},
53+
"sugget": {
54+
Request: routing.ReqDefault,
55+
Response: routing.RespDefaultHashSlot,
56+
},
57+
"sugdel": {
58+
Request: routing.ReqDefault,
59+
Response: routing.RespDefaultHashSlot,
60+
},
61+
"spellcheck": {
62+
Request: routing.ReqDefault,
63+
Response: routing.RespDefaultKeyless,
64+
},
65+
"explain": {
66+
Request: routing.ReqDefault,
67+
Response: routing.RespDefaultKeyless,
68+
},
69+
"explaincli": {
70+
Request: routing.ReqDefault,
71+
Response: routing.RespDefaultKeyless,
72+
},
73+
"aliasadd": {
74+
Request: routing.ReqDefault,
75+
Response: routing.RespDefaultKeyless,
76+
},
77+
"aliasupdate": {
78+
Request: routing.ReqDefault,
79+
Response: routing.RespDefaultKeyless,
80+
},
81+
"aliasdel": {
82+
Request: routing.ReqDefault,
83+
Response: routing.RespDefaultKeyless,
84+
},
85+
"info": {
86+
Request: routing.ReqDefault,
87+
Response: routing.RespDefaultKeyless,
88+
},
89+
"tagvals": {
90+
Request: routing.ReqDefault,
91+
Response: routing.RespDefaultKeyless,
92+
},
93+
"syndump": {
94+
Request: routing.ReqDefault,
95+
Response: routing.RespDefaultKeyless,
96+
},
97+
"synupdate": {
98+
Request: routing.ReqDefault,
99+
Response: routing.RespDefaultKeyless,
100+
},
101+
"profile": {
102+
Request: routing.ReqDefault,
103+
Response: routing.RespDefaultKeyless,
104+
},
105+
"alter": {
106+
Request: routing.ReqDefault,
107+
Response: routing.RespDefaultKeyless,
108+
},
109+
"dropindex": {
110+
Request: routing.ReqDefault,
111+
Response: routing.RespDefaultKeyless,
112+
},
113+
"drop": {
114+
Request: routing.ReqDefault,
115+
Response: routing.RespDefaultKeyless,
116+
},
110117
},
111118
}
112119

113120
type commandPolicyManager struct {
114121
rwmutex *sync.RWMutex
115-
clientPolicies map[string]*routing.CommandPolicy
116-
overwrittenPolicies map[string]*routing.CommandPolicy
122+
clientPolicies map[module]map[commandName]*routing.CommandPolicy
123+
overwrittenPolicies map[module]map[commandName]*routing.CommandPolicy
117124
}
118125

119126
func newCommandPolicyManager(overwrites interface{}) *commandPolicyManager {
@@ -134,17 +141,29 @@ func (cpm *commandPolicyManager) getCmdPolicy(cmd Cmder) *routing.CommandPolicy
134141
defer cpm.rwmutex.RUnlock()
135142

136143
cmdName := strings.ToLower(cmd.Name())
137-
if policy, ok := cpm.overwrittenPolicies[cmdName]; ok {
144+
145+
module := "code"
146+
command := cmdName
147+
cmdParts := strings.Split(cmdName, ".")
148+
if len(cmdParts) == 2 {
149+
module = cmdParts[0]
150+
command = cmdParts[1]
151+
}
152+
153+
if policy, ok := cpm.overwrittenPolicies[module][command]; ok {
138154
return policy
139155
}
140156

141-
if policy, ok := cpm.clientPolicies[cmdName]; ok {
157+
if policy, ok := cpm.clientPolicies[module][command]; ok {
142158
return policy
143159
}
144160

145-
if policy, ok := defaultPolicies[cmdName]; ok {
161+
if policy, ok := defaultPolicies[module][command]; ok {
146162
return policy
147163
}
148164

149-
return nil
165+
return &routing.CommandPolicy{
166+
Request: routing.ReqDefault,
167+
Response: routing.RespDefaultKeyless,
168+
}
150169
}

0 commit comments

Comments
 (0)