fix: run init_worker of apisix.admin module in stream subsystem (#12632)
Signed-off-by: Nic <qianyong@api7.ai>
diff --git a/apisix/init.lua b/apisix/init.lua
index b0f7277..c54222f 100644
--- a/apisix/init.lua
+++ b/apisix/init.lua
@@ -1173,6 +1173,9 @@
require("apisix.events").init_worker()
+ -- for admin api of standalone mode, we need to startup background timer and patch schema etc.
+ require("apisix.admin.init").init_worker()
+
local discovery = require("apisix.discovery.init").discovery
if discovery and discovery.init_worker then
discovery.init_worker()
diff --git a/t/admin/standalone.t b/t/admin/standalone.t
index 6fbf55f..b40fece 100644
--- a/t/admin/standalone.t
+++ b/t/admin/standalone.t
@@ -273,7 +273,7 @@
=== TEST 14: configure stream route
--- request
PUT /apisix/admin/configs
-{"stream_routes":[{"server_addr":"127.0.0.1","server_port":1985,"id":1,"upstream":{"nodes":{"127.0.0.1:1995":1},"type":"roundrobin"}}]}
+{"stream_routes":[{"modifiedIndex": 1, "server_addr":"127.0.0.1","server_port":1985,"id":1,"upstream":{"nodes":{"127.0.0.1:1995":1},"type":"roundrobin"}}]}
--- more_headers
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
X-Digest: t14
@@ -286,30 +286,69 @@
location /stream_request {
content_by_lua_block {
ngx.sleep(1) -- wait for the stream route to take effect
- local sock, err = ngx.socket.tcp()
- assert(sock, err)
- local ok, err = sock:connect("127.0.0.1", 1985)
- if not ok then
- ngx.say("connect to stream server error: ", err)
- return
- end
- local bytes, err = sock:send("mmm")
- if not bytes then
- ngx.say("send stream request error: ", err)
- return
- end
+ local tcp_request = function(host, port)
+ local sock, err = ngx.socket.tcp()
+ assert(sock, err)
- local data, err = sock:receive("*a")
- if not data then
+ local ok, err = sock:connect(host, port)
+ if not ok then
+ ngx.say("connect to stream server error: ", err)
+ return
+ end
+ local bytes, err = sock:send("mmm")
+ if not bytes then
+ ngx.say("send stream request error: ", err)
+ return
+ end
+
+ local data, err = sock:receive("*a")
+ if not data then
+ sock:close()
+ ngx.say("receive stream response error: ", err)
+ return
+ end
sock:close()
- ngx.say("receive stream response error: ", err)
+ ngx.print(data)
+ end
+
+ tcp_request("127.0.0.1", 1985)
+
+ -- update the stream route in runtime to confirm the new stream route takes effect
+ local t = require("lib.test_admin").test
+ local code, body = t('/apisix/admin/configs',
+ ngx.HTTP_PUT,
+ [[{
+ "stream_routes": [
+ {
+ "modifiedIndex": 2,
+ "server_addr": "127.0.0.2",
+ "server_port": 1985,
+ "id": 1,
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1995": 1
+ },
+ "type": "roundrobin"
+ }
+ }
+ ]
+ }]], nil, { ["X-API-KEY"] = "edd1c9f034335f136f87ad84b625c8f1", ["X-Digest"] = "t15"}
+ )
+ if code ~= 202 then
+ ngx.print("failed to update stream route, code: ", code, ", body: ", body)
return
end
- ngx.print(data)
+
+ ngx.sleep(1)
+
+ tcp_request("127.0.0.1", 1985)
+ tcp_request("127.0.0.2", 1985)
}
}
--- request
GET /stream_request
--- response_body
hello world
+receive stream response error: connection reset by peer
+hello world