@@ -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
113120type 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
119126func 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