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

Reply via email to