Skip to content

Commit 6b40d42

Browse files
committed
fixbug-限流sql
1 parent ad9d132 commit 6b40d42

File tree

2 files changed

+85
-8
lines changed

2 files changed

+85
-8
lines changed

store/postgresql/ratelimit_config.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,18 @@ func (rls *rateLimitStore) enableRateLimit(limit *model.RateLimit) error {
137137
}()
138138

139139
etimeStr := limitToEtimeStr(limit)
140-
str := fmt.Sprintf(
141-
`update ratelimit_config set disable = $1, revision = $2, mtime = $3, etime=%s where id = $4`, etimeStr)
140+
disable := 0
141+
if limit.Disable {
142+
disable = 1
143+
}
144+
145+
str := "update ratelimit_config set disable = $1, revision = $2, mtime = $3, " +
146+
"etime = $4 where id = $5"
142147
stmt, err := tx.Prepare(str)
143148
if err != nil {
144149
return err
145150
}
146-
if _, err = stmt.Exec(limit.Disable, limit.Revision, GetCurrentTimeFormat(), limit.ID); err != nil {
151+
if _, err = stmt.Exec(disable, limit.Revision, GetCurrentTimeFormat(), etimeStr, limit.ID); err != nil {
147152
log.Errorf("[Store][database] update rate limit(%+v), sql %s, err: %s", limit, str, err)
148153
return err
149154
}
@@ -152,6 +157,7 @@ func (rls *rateLimitStore) enableRateLimit(limit *model.RateLimit) error {
152157
log.Errorf("[Store][database] update rate limit(%+v) commit tx err: %s", limit, err.Error())
153158
return err
154159
}
160+
155161
return nil
156162
}
157163

@@ -168,14 +174,19 @@ func (rls *rateLimitStore) updateRateLimit(limit *model.RateLimit) error {
168174
}()
169175

170176
etimeStr := limitToEtimeStr(limit)
171-
str := fmt.Sprintf(`update ratelimit_config set name = $1, service_id = $2, disable = $3, method= $4,
172-
labels = $5, priority = $6, rule = $7, revision = $8, mtime = $9, etime=%s where id = $10`, etimeStr)
177+
disable := 0
178+
if limit.Disable {
179+
disable = 1
180+
}
181+
str := "update ratelimit_config set name = $1, service_id = $2, disable = $3, " +
182+
"method = $4, labels = $5, priority = $6, rule = $7, revision = $8, " +
183+
"mtime = $9, etime = $10 where id = $11"
173184
stmt, err := tx.Prepare(str)
174185
if err != nil {
175186
return err
176187
}
177-
if _, err = stmt.Exec(limit.Name, limit.ServiceID, limit.Disable, limit.Method, limit.Labels,
178-
limit.Priority, limit.Rule, limit.Revision, GetCurrentTimeFormat(), limit.ID); err != nil {
188+
if _, err = stmt.Exec(limit.Name, limit.ServiceID, disable, limit.Method, limit.Labels,
189+
limit.Priority, limit.Rule, limit.Revision, GetCurrentTimeFormat(), etimeStr, limit.ID); err != nil {
179190
log.Errorf("[Store][database] update rate limit(%+v), sql %s, err: %s", limit, str, err)
180191
return err
181192
}
@@ -313,8 +324,9 @@ func fetchRateLimitCacheRows(rows *sql.Rows) ([]*model.RateLimit, error) {
313324
rateLimit model.RateLimit
314325
serviceID string
315326
flag int
327+
disable int
316328
)
317-
err := rows.Scan(&rateLimit.ID, &rateLimit.Name, &rateLimit.Disable, &serviceID, &rateLimit.Method,
329+
err := rows.Scan(&rateLimit.ID, &rateLimit.Name, &disable, &serviceID, &rateLimit.Method,
318330
&rateLimit.Labels, &rateLimit.Priority, &rateLimit.Rule, &rateLimit.Revision, &flag,
319331
&rateLimit.CreateTime, &rateLimit.ModifyTime, &rateLimit.EnableTime)
320332
if err != nil {
@@ -325,6 +337,10 @@ func fetchRateLimitCacheRows(rows *sql.Rows) ([]*model.RateLimit, error) {
325337
if flag == 1 {
326338
rateLimit.Valid = false
327339
}
340+
rateLimit.Disable = false
341+
if disable == 1 {
342+
rateLimit.Disable = true
343+
}
328344
rateLimit.ServiceID = serviceID
329345

330346
rateLimits = append(rateLimits, &rateLimit)

store/postgresql/ratelimit_config_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,64 @@ func TestCreateRateLimit(t *testing.T) {
4040
err := obj.rateLimitStore.CreateRateLimit(conf)
4141
fmt.Printf("err: %+v\n", err)
4242
}
43+
44+
func TestUpdateRateLimit(t *testing.T) {
45+
obj := initConf()
46+
47+
// Method: Labels: Priority:0 Rule:{"service":{"value":"polaris.limiter"},"namespace":{"value":"Polaris"},"type":1,"amounts":[{"maxAmount":{"value":1},"validDuration":{"seconds":1}}],"action":{"value":"REJECT"},"disable":{},"regex_combine":{"value":true},"method":{"value":{}},"arguments":[{"key":"aa","value":{"value":{"value":"2"}}}],"name":{"value":"aa"},"max_queue_delay":{"value":1}} Revision:52df77fff7c14ec9a5a8306d381091fc Disable:false Valid:false CreateTime:0001-01-01 00:00:00 +0000 UTC ModifyTime:0001-01-01 00:00:00 +0000 UTC EnableTime:0001-01-01 00:00:00 +0000 UTC}),
48+
conf := &model.RateLimit{
49+
ID: "d7af189c1986413ab928d501db200600",
50+
Name: "aa",
51+
Disable: true,
52+
ServiceID: "",
53+
Method: "",
54+
Labels: "",
55+
Priority: 1,
56+
Revision: "4444",
57+
}
58+
err := obj.rateLimitStore.UpdateRateLimit(conf)
59+
fmt.Printf("err: %+v\n", err)
60+
}
61+
62+
func TestEnableRateLimit(t *testing.T) {
63+
obj := initConf()
64+
65+
// Method: Labels: Priority:0 Rule:{"service":{"value":"polaris.limiter"},"namespace":{"value":"Polaris"},"type":1,"amounts":[{"maxAmount":{"value":1},"validDuration":{"seconds":1}}],"action":{"value":"REJECT"},"disable":{},"regex_combine":{"value":true},"method":{"value":{}},"arguments":[{"key":"aa","value":{"value":{"value":"2"}}}],"name":{"value":"aa"},"max_queue_delay":{"value":1}} Revision:52df77fff7c14ec9a5a8306d381091fc Disable:false Valid:false CreateTime:0001-01-01 00:00:00 +0000 UTC ModifyTime:0001-01-01 00:00:00 +0000 UTC EnableTime:0001-01-01 00:00:00 +0000 UTC}),
66+
conf := &model.RateLimit{
67+
ID: "d7af189c1986413ab928d501db200600",
68+
Name: "aa",
69+
Disable: true,
70+
ServiceID: "",
71+
Method: "",
72+
Labels: "",
73+
Priority: 1,
74+
Revision: "4444",
75+
}
76+
err := obj.rateLimitStore.EnableRateLimit(conf)
77+
fmt.Printf("err: %+v\n", err)
78+
}
79+
80+
func TestDeleteRateLimit(t *testing.T) {
81+
obj := initConf()
82+
83+
// Method: Labels: Priority:0 Rule:{"service":{"value":"polaris.limiter"},"namespace":{"value":"Polaris"},"type":1,"amounts":[{"maxAmount":{"value":1},"validDuration":{"seconds":1}}],"action":{"value":"REJECT"},"disable":{},"regex_combine":{"value":true},"method":{"value":{}},"arguments":[{"key":"aa","value":{"value":{"value":"2"}}}],"name":{"value":"aa"},"max_queue_delay":{"value":1}} Revision:52df77fff7c14ec9a5a8306d381091fc Disable:false Valid:false CreateTime:0001-01-01 00:00:00 +0000 UTC ModifyTime:0001-01-01 00:00:00 +0000 UTC EnableTime:0001-01-01 00:00:00 +0000 UTC}),
84+
conf := &model.RateLimit{
85+
ID: "d7af189c1986413ab928d501db200600",
86+
Name: "aa",
87+
Disable: true,
88+
ServiceID: "",
89+
Method: "",
90+
Labels: "",
91+
Priority: 1,
92+
Revision: "4444",
93+
}
94+
err := obj.rateLimitStore.DeleteRateLimit(conf)
95+
fmt.Printf("err: %+v\n", err)
96+
}
97+
98+
func TestGetRateLimitWithID(t *testing.T) {
99+
obj := initConf()
100+
101+
ret, err := obj.rateLimitStore.GetRateLimitWithID("d7af189c1986413ab928d501db200600")
102+
fmt.Printf("ret: %+v, err: %+v\n", ret, err)
103+
}

0 commit comments

Comments
 (0)