spacewander commented on a change in pull request #4808:
URL: https://github.com/apache/apisix/pull/4808#discussion_r687395069
##########
File path: t/plugin/limit-conn.t
##########
@@ -1328,3 +1328,47 @@ GET /t
{"error_msg":"failed to check the configuration of plugin limit-conn err:
property \"allow_degradation\" validation failed: wrong type: expected boolean,
got string"}
--- no_error_log
[error]
+
+
+
+=== TEST 35: invalid route: wrong rejected_msg
Review comment:
I just notice we have `t/plugin/limit-conn2.t`. Let's add test there.
##########
File path: docs/zh/latest/plugins/limit-conn.md
##########
@@ -33,6 +33,7 @@ title: limit-conn
| only_use_default_delay | boolean | optional | false | [true,false]
|
延迟时间的严格模式。 如果设置为`true`的话,将会严格按照设置的时间来进行延迟
|
| key | object | required | | ["remote_addr",
"server_addr", "http_x_real_ip", "http_x_forwarded_for", "consumer_name"] |
用户指定的限制并发级别的关键字,可以是客户端 IP 或服务端 IP。<br />例如,可以使用主机名(或服务器区域)作为关键字,以便限制每个主机名的并发性。
否则,我们也可以使用客户端地址作为关键字,这样我们就可以避免单个客户端用太多的并行连接或请求淹没我们的服务。 <br />当前接受的 key
有:"remote_addr"(客户端 IP 地址), "server_addr"(服务端 IP 地址), 请求头中的"X-Forwarded-For" 或
"X-Real-IP", "consumer_name"(consumer 的 username)。 |
| rejected_code | string | optional | 503 | [200,...,599]
| 当请求超过 `conn`
+ `burst` 这个阈值时,返回的 HTTP 状态码
|
+| rejected_msg | string | 可选 |
| 非空 | 当请求超过 `conn` + `burst`
这个阈值时,返回的 `error_msg` 值。
|
Review comment:
```suggestion
| rejected_msg | string | 可选 |
| 非空 | 当请求超过 `conn` + `burst`
这个阈值时,返回的 `rejected_msg` 值。
|
```
##########
File path: t/plugin/limit-count-redis-cluster.t
##########
@@ -434,3 +434,70 @@ passed
GET /hello
--- response_body
hello world
+
+
+
+=== TEST 12: set route, with rejected_msg
+--- config
+ location /t {
+ content_by_lua_block {
+ local t = require("lib.test_admin").test
+ local code, body = t('/apisix/admin/routes/1',
+ ngx.HTTP_PUT,
+ [[{
+ "uri": "/hello",
+ "plugins": {
+ "limit-count": {
+ "count": 1,
+ "time_window": 600,
+ "key": "http_x_real_ip",
+ "rejected_msg": "Requests are too frequent, please
try again later.",
+ "policy": "redis-cluster",
+ "redis_cluster_nodes": [
+ "127.0.0.1:8001",
+ "127.0.0.1:8002",
+ "127.0.0.1:8003",
+ "127.0.0.1:8004"
+ ],
+ "redis_cluster_name": "redis-cluster-1"
+ }
+ },
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1980": 1
+ },
+ "type": "roundrobin"
+ }
+ }]]
+ )
+
+ if code >= 300 then
+ ngx.status = code
+ end
+ ngx.say(body)
+ }
+ }
+--- request
+GET /t
+--- response_body
+passed
+--- no_error_log
+[error]
+
+
+
+=== TEST 13: rejected_msg for TEST 12, request normal
Review comment:
Normally, we don't repeat the test name in the other test.
##########
File path: t/plugin/limit-count-redis-cluster.t
##########
@@ -434,3 +434,70 @@ passed
GET /hello
--- response_body
hello world
+
+
+
+=== TEST 12: set route, with rejected_msg
Review comment:
Since this feature is not relative to the policy, we only need to test
it in the limit-count.t instead of testing it in all three policies.
##########
File path: docs/en/latest/plugins/limit-req.md
##########
@@ -42,6 +42,7 @@ limit request rate using the "leaky bucket" method.
| burst | integer | required | | burst >= 0
| the number of excessive
requests per second allowed to be delayed. Requests exceeding this hard limit
will get rejected immediately. |
| key | string | required | | ["remote_addr",
"server_addr", "http_x_real_ip", "http_x_forwarded_for", "consumer_name"] | the
user specified key to limit the rate, now accept those as key:
"remote_addr"(client's IP), "server_addr"(server's IP),
"X-Forwarded-For/X-Real-IP" in request header, "consumer_name"(consumer's
username). |
| rejected_code | integer | optional | 503 | [200,...,599]
| The HTTP status code returned
when the request exceeds the threshold is rejected.
|
+| rejected_msg | string | optional |
| non-empty | The `error_msg` returned
when the request exceeds the threshold is rejected.
|
Review comment:
Ditto. Please fix other similar places.
##########
File path: apisix/plugins/limit-conn/init.lua
##########
@@ -53,6 +54,9 @@ function _M.increase(conf, ctx)
local delay, err = lim:incoming(key, true)
if not delay then
if err == "rejected" then
+ if conf.rejected_msg and str_len(conf.rejected_msg) > 0 then
Review comment:
Better to check the length with jsonschema.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]