This is an automated email from the ASF dual-hosted git repository.
ashishtiwari 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 d2fb33829 feat: support multiple json.delay_encode objects in single
log (#12395)
d2fb33829 is described below
commit d2fb338296b1b249b80bb75b96c8f043deff0c4f
Author: Ashish Tiwari <[email protected]>
AuthorDate: Mon Jul 7 12:29:44 2025 +0530
feat: support multiple json.delay_encode objects in single log (#12395)
---
apisix/core/json.lua | 33 +++++++++++++++++++++------------
apisix/utils/upstream.lua | 4 ++--
t/core/json.t | 14 ++------------
3 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/apisix/core/json.lua b/apisix/core/json.lua
index 05541b71d..4341c4682 100644
--- a/apisix/core/json.lua
+++ b/apisix/core/json.lua
@@ -87,18 +87,23 @@ local function encode(data, force)
end
_M.encode = encode
+local max_delay_encode_items = 16
+local delay_tab_idx = 0
+local delay_tab_arr = {}
+for i = 1, max_delay_encode_items do
+ delay_tab_arr[i] = setmetatable({data = "", force = false}, {
+ __tostring = function(self)
+ local res, err = encode(self.data, self.force)
+ if not res then
+ ngx.log(ngx.WARN, "failed to encode: ", err,
+ " force: ", self.force)
+ end
-local delay_tab = setmetatable({data = "", force = false}, {
- __tostring = function(self)
- local res, err = encode(self.data, self.force)
- if not res then
- ngx.log(ngx.WARN, "failed to encode: ", err,
- " force: ", self.force)
+ return res
end
+ })
+end
- return res
- end
-})
---
@@ -114,9 +119,13 @@ local delay_tab = setmetatable({data = "", force = false},
{
-- @usage
-- core.log.info("conf : ", core.json.delay_encode(conf))
function _M.delay_encode(data, force)
- delay_tab.data = data
- delay_tab.force = force
- return delay_tab
+ delay_tab_idx = delay_tab_idx+1
+ if delay_tab_idx > max_delay_encode_items then
+ delay_tab_idx = 1
+ end
+ delay_tab_arr[delay_tab_idx].data = data
+ delay_tab_arr[delay_tab_idx].force = force
+ return delay_tab_arr[delay_tab_idx]
end
diff --git a/apisix/utils/upstream.lua b/apisix/utils/upstream.lua
index 52c14d046..3c0b9a381 100644
--- a/apisix/utils/upstream.lua
+++ b/apisix/utils/upstream.lua
@@ -47,8 +47,8 @@ local function compare_upstream_node(up_conf, new_t)
-- slow path
core.log.debug("compare upstream nodes by value, ",
- "old: ", tostring(old_t) , " ",
core.json.delay_encode(old_t, true))
- core.log.debug("new: ", tostring(new_t) , " ",
core.json.delay_encode(new_t, true))
+ "old: ", tostring(old_t) , " ",
core.json.delay_encode(old_t, true),
+ "new: ", tostring(new_t) , " ",
core.json.delay_encode(new_t, true))
if up_conf.original_nodes then
-- if original_nodes is set, it means that the upstream nodes
diff --git a/t/core/json.t b/t/core/json.t
index a7caf8dae..e946bc64a 100644
--- a/t/core/json.t
+++ b/t/core/json.t
@@ -56,21 +56,11 @@ data: test
location /t {
content_by_lua_block {
local core = require("apisix.core")
- local data1 = core.json.delay_encode({test="test1"})
- local data2 = core.json.delay_encode({test="test2"})
-
- ngx.say("delay encode: ", data1 == data2)
- ngx.say("data1 type: ", type(data1))
- ngx.log(ngx.ERR, "data1 val: ", data1)
- ngx.log(ngx.ERR, "data2 val: ", data2)
+ ngx.log(ngx.ERR, "val: ",
core.json.delay_encode({test="test1"}),core.json.delay_encode({test="test2"}))
}
}
---- response_body
-delay encode: true
-data1 type: table
--- error_log
-data1 val: {"test":"test2"}
-data2 val: {"test":"test2"}
+val: {"test":"test1"}{"test":"test2"}