You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by "kingluo (via GitHub)" <gi...@apache.org> on 2023/04/12 10:22:26 UTC
[GitHub] [apisix] kingluo commented on a diff in pull request #9266: fix: hold_body_chunk can not be used in more than one plugin
kingluo commented on code in PR #9266:
URL: https://github.com/apache/apisix/pull/9266#discussion_r1163934524
##########
t/plugin/grpc-transcode2.t:
##########
@@ -486,7 +486,7 @@ GET /grpc_plus?a=1&b=2
--- response_body eval
qr/\{"result":3\}/
--- error_log eval
-qr/request log: \{.*body":\"\\u0000\\u0000\\u0000\\u0000\\u0002\\b\\u0003\\u0000\\u0000\\u0000\\u0000\\u0002\\b\\u0003"/
+qr/request log: \{.*body":\"\\u0000\\u0000\\u0000\\u0000\\u0002\\b\\u0003"/
Review Comment:
This PR fixes another bug: insert the same chunk twice (by different plugins) into the `body_buffer`.
Bug reproduce:
```diff
diff --git a/apisix/core/response.lua b/apisix/core/response.lua
index b934d94b..971961b3 100644
--- a/apisix/core/response.lua
+++ b/apisix/core/response.lua
@@ -178,6 +178,8 @@ function _M.hold_body_chunk(ctx, hold_the_copy)
local body_buffer
local chunk, eof = arg[1], arg[2]
if type(chunk) == "string" and chunk ~= "" then
+ ngx.log(ngx.WARN, "#chunk: ", #chunk)
+ ngx.log(ngx.WARN, debug.traceback("hold_body_chunk", 3))
body_buffer = ctx._body_buffer
if not body_buffer then
body_buffer = {
@@ -185,10 +187,13 @@ function _M.hold_body_chunk(ctx, hold_the_copy)
n = 1
}
ctx._body_buffer = body_buffer
+ ngx.log(ngx.WARN, "create body_buffer: ", tostring(body_buffer))
+ ngx.log(ngx.WARN, "init #chunk: ", #chunk)
else
local n = body_buffer.n + 1
body_buffer.n = n
body_buffer[n] = chunk
+ ngx.log(ngx.WARN, "add #chunk: ", #chunk)
end
end
```
error.log from this test case:
```
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:181: hold_body_chunk(): #chunk: 7 while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:182: hold_body_chunk(): hold_body_chunk
stack traceback:
/opt/apisix/apisix/plugins/http-logger.lua:153: in function 'phase_func'
/opt/apisix/apisix/plugin.lua:1131: in function 'run_plugin'
/opt/apisix/apisix/plugin.lua:1164: in function 'run_global_rules'
/opt/apisix/apisix/init.lua:403: in function 'common_phase'
/opt/apisix/apisix/init.lua:747: in function 'http_body_filter_phase'
body_filter_by_lua:2: in main chunk while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:190: hold_body_chunk(): create body_buffer: table: 0x7f4aede1e4c8 while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:191: hold_body_chunk(): init #chunk: 7 while sending to client, client: 127.0.0.1, server: localhost,request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:181: hold_body_chunk(): #chunk: 7 while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:182: hold_body_chunk(): hold_body_chunk
stack traceback:
/opt/apisix/apisix/plugins/grpc-transcode.lua:202: in function 'phase_func'
/opt/apisix/apisix/plugin.lua:1131: in function 'common_phase'
/opt/apisix/apisix/init.lua:747: in function 'http_body_filter_phase'
body_filter_by_lua:2: in main chunk while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:196: hold_body_chunk(): add #chunk: 7 while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
2023/04/12 18:08:06 [warn] 2785045#2785045: *3 [lua] response.lua:110: response(): #buffer: 14 while sending to client, client: 127.0.0.1, server: localhost, request: "GET /grpc_plus?a=1&b=2 HTTP/1.1", upstream: "grpc://127.0.0.1:50051", host: "localhost"
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org