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

chenjunxu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 0cb7d9ac8 fix(traffic-split): `upstream_obj.upstream` should not be a 
string (#11932)
0cb7d9ac8 is described below

commit 0cb7d9ac8def4a490c8b49b7755a9484f3018eb2
Author: Shreemaan Abhishek <[email protected]>
AuthorDate: Wed Jan 22 12:45:03 2025 +0545

    fix(traffic-split): `upstream_obj.upstream` should not be a string (#11932)
---
 apisix/plugins/traffic-split.lua |  3 +-
 t/plugin/traffic-split5.t        | 99 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 2 deletions(-)

diff --git a/apisix/plugins/traffic-split.lua b/apisix/plugins/traffic-split.lua
index f546225c8..da6014e8b 100644
--- a/apisix/plugins/traffic-split.lua
+++ b/apisix/plugins/traffic-split.lua
@@ -217,8 +217,7 @@ local function new_rr_obj(weighted_upstreams)
             -- If the upstream object has only the weight value, it means
             -- that the upstream weight value on the default route has been 
reached.
             -- Mark empty upstream services in the plugin.
-            upstream_obj.upstream = "plugin#upstream#is#empty"
-            server_list[upstream_obj.upstream] = upstream_obj.weight
+            server_list["plugin#upstream#is#empty"] = upstream_obj.weight
 
         end
     end
diff --git a/t/plugin/traffic-split5.t b/t/plugin/traffic-split5.t
index 96e284d5b..01df76e3c 100644
--- a/t/plugin/traffic-split5.t
+++ b/t/plugin/traffic-split5.t
@@ -535,3 +535,102 @@ id=1
 Content-Type: application/x-www-form-urlencoded;charset=UTF-8
 --- response_body
 1970
+
+
+
+=== TEST 12: failure after plugin reload
+--- extra_yaml_config
+nginx_config:
+  worker_processes: 1
+
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/upstreams/1',
+                 ngx.HTTP_PUT,
+                 [[{
+                    "type": "roundrobin",
+                    "nodes": {
+                        "127.0.0.1:1970":10
+                    }
+                }]]
+            )
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(body)
+                return
+            end
+
+            local code, body = t('/apisix/admin/upstreams/2',
+                 ngx.HTTP_PUT,
+                 [[{
+                    "type": "roundrobin",
+                    "nodes": {
+                        "127.0.0.1:1971":10
+                    }
+                }]]
+            )
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(body)
+                return
+            end
+
+            local code, body = t('/apisix/admin/routes/1',
+                 ngx.HTTP_PUT,
+                 [[{
+                    "uri": "/hello",
+                    "plugins": {
+                        "traffic-split": {
+                            "rules": [
+                                {
+                                    "weighted_upstreams": [
+                                        {
+                                            "upstream_id": "2",
+                                            "weight": 1
+                                        },
+                                        {
+                                            "weight": 1
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    "upstream_id": "1"
+                }]]
+            )
+            if code >= 300 then
+                ngx.status = code
+                return
+            end
+
+            local code, body = t('/hello')
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(body)
+                return
+            end
+
+            local code, body = t('/apisix/admin/plugins/reload', ngx.HTTP_PUT)
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(body)
+                return
+            end
+
+            local code, body = t('/hello')
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(body)
+                return
+            end
+
+            ngx.say("passed.")
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed.

Reply via email to