This is an automated email from the ASF dual-hosted git repository.
spacewander 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 784e67109 perf(stream): reuse ctx & var (#7165)
784e67109 is described below
commit 784e6710900b7032ff5708f22cf964a453df7cb2
Author: 罗泽轩 <[email protected]>
AuthorDate: Mon May 30 21:20:33 2022 +0800
perf(stream): reuse ctx & var (#7165)
Signed-off-by: spacewander <[email protected]>
---
apisix/init.lua | 14 ++++++++++++--
t/stream-node/sanity.t | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/apisix/init.lua b/apisix/init.lua
index fd2e69a7f..5e3f5da2d 100644
--- a/apisix/init.lua
+++ b/apisix/init.lua
@@ -970,8 +970,18 @@ end
function _M.stream_log_phase()
core.log.info("enter stream_log_phase")
- -- core.ctx.release_vars(api_ctx)
- plugin.run_plugin("log")
+
+ local api_ctx = plugin.run_plugin("log")
+ if not api_ctx then
+ return
+ end
+
+ core.ctx.release_vars(api_ctx)
+ if api_ctx.plugins then
+ core.tablepool.release("plugins", api_ctx.plugins)
+ end
+
+ core.tablepool.release("api_ctx", api_ctx)
end
diff --git a/t/stream-node/sanity.t b/t/stream-node/sanity.t
index c793f7020..f42b89ca9 100644
--- a/t/stream-node/sanity.t
+++ b/t/stream-node/sanity.t
@@ -385,3 +385,51 @@ hello world
--- no_error_log
[error]
--- skip_nginx: 5: < 1.19.0
+
+
+
+=== TEST 16: reuse ctx and more
+--- stream_extra_init_by_lua
+ local ctx = require("apisix.core.ctx")
+ local tablepool = require("apisix.core").tablepool
+
+ local old_set_vars_meta = ctx.set_vars_meta
+ ctx.set_vars_meta = function(...)
+ ngx.log(ngx.WARN, "fetch ctx var")
+ return old_set_vars_meta(...)
+ end
+
+ local old_release_vars = ctx.release_vars
+ ctx.release_vars = function(...)
+ ngx.log(ngx.WARN, "release ctx var")
+ return old_release_vars(...)
+ end
+
+ local old_fetch = tablepool.fetch
+ tablepool.fetch = function(name, ...)
+ ngx.log(ngx.WARN, "fetch table ", name)
+ return old_fetch(name, ...)
+ end
+
+ local old_release = tablepool.release
+ tablepool.release = function(name, ...)
+ ngx.log(ngx.WARN, "release table ", name)
+ return old_release(name, ...)
+ end
+--- stream_request eval
+mmm
+--- stream_response
+hello world
+--- no_error_log
+[error]
+--- grep_error_log eval
+qr/(fetch|release) (ctx var|table \w+)/
+--- grep_error_log_out
+fetch table api_ctx
+fetch ctx var
+fetch table ctx_var
+fetch table plugins
+release ctx var
+release table ctx_var
+release table plugins
+release table api_ctx