You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by sp...@apache.org on 2022/11/10 01:58:10 UTC

[apisix] 09/18: fix(limit-count): different route with same conf should not share counter (#7750)

This is an automated email from the ASF dual-hosted git repository.

spacewander pushed a commit to branch release/2.15
in repository https://gitbox.apache.org/repos/asf/apisix.git

commit 55082f6de4ee1a06db3ff9cfa8b8decd4af1ba43
Author: 罗泽轩 <sp...@gmail.com>
AuthorDate: Wed Aug 24 11:11:47 2022 +0800

    fix(limit-count): different route with same conf should not share counter (#7750)
    
    fix #7746
---
 apisix/plugins/limit-count.lua |  2 +-
 t/plugin/limit-count3.t        | 61 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/apisix/plugins/limit-count.lua b/apisix/plugins/limit-count.lua
index e191b6223..56ff34cb2 100644
--- a/apisix/plugins/limit-count.lua
+++ b/apisix/plugins/limit-count.lua
@@ -251,7 +251,7 @@ function _M.access(conf, ctx)
         -- Here we use plugin-level conf version to prevent the counter from being resetting
         -- because of the change elsewhere.
         -- A route which reuses a previous route's ID will inherits its counter.
-        key = ctx.conf_type .. apisix_plugin.conf_version(conf) .. ':' .. key
+        key = ctx.conf_type .. ctx.conf_id .. ':' .. apisix_plugin.conf_version(conf) .. ':' .. key
     else
         key = conf.group .. ':' .. key
     end
diff --git a/t/plugin/limit-count3.t b/t/plugin/limit-count3.t
index 4298a20bd..0c5490616 100644
--- a/t/plugin/limit-count3.t
+++ b/t/plugin/limit-count3.t
@@ -224,3 +224,64 @@ passed
     }
 --- response_body
 [200,200]
+
+
+
+=== TEST 7: set another route with the same conf
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/2',
+                ngx.HTTP_PUT,
+                [[{
+                    "uri": "/hello1",
+                    "plugins": {
+                        "limit-count": {
+                            "count": 2,
+                            "time_window": 61
+                        }
+                    },
+                    "upstream": {
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        },
+                        "type": "roundrobin"
+                    }
+                }]]
+                )
+
+            if code >= 300 then
+                ngx.status = code
+            end
+            ngx.say(body)
+        }
+    }
+--- response_body
+passed
+
+
+
+=== TEST 8: avoid sharing the same counter
+--- config
+    location /t {
+        content_by_lua_block {
+            local json = require "t.toolkit.json"
+            local http = require "resty.http"
+            local uri = "http://127.0.0.1:" .. ngx.var.server_port
+                        .. "/hello1"
+            local ress = {}
+            for i = 1, 2 do
+                local httpc = http.new()
+                local res, err = httpc:request_uri(uri)
+                if not res then
+                    ngx.say(err)
+                    return
+                end
+                table.insert(ress, res.status)
+            end
+            ngx.say(json.encode(ress))
+        }
+    }
+--- response_body
+[200,200]