ledgetech / ledgetech/lua-resty-http
body_filter_by_lua breaks APIs in other contexts in anything greater then 1.19
Nobody has claimed this yet.
- Dominant language
- Lua
- Stars
- 2.1k
- Forks
- 630
- PR merge metrics
- No merged PRs in 30d
Description
I've logged this as a bug over in the lua-nginx-module repo but incase it's a bug in this code base instead thought I would log it here as well.
https://github.com/openresty/lua-nginx-module/issues/2372
We've been attempting to upgrade some legacy code to a newer version of openresty and hit a road block getting to anything greater then 1.19
We've found an issue that exists in any version greater then openresty 1.19 when using body_filter_by_lua and content_by_lua_block blocks.
I've created a reproduction case here - https://github.com/cdloh/body_filter_by_lua-bug-openresty
I've used lua-resty-http to make making the request easier.
When using both body_filter_by_lua and content_by_lua_block it's impossible to use APIs like ngx.flush(true) if there is any buffering going on. Eventually even if the flush code is only within content_by_lua blocks openresty complains about that API being disabled in body_filter_by_lua phases.
Note that you don't have to be actually doing anything in the body_filter_by_lua block at all. Simply having it defined causes the bug to occur.
You can run the some reproduction repo against 1.19 docker iamges and it work fine, however anything greater and it breaks.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the linked reproduction repository against OpenResty 1.19 and later Docker images. Compare behavior when body_filter_by_lua and content_by_lua_block are both defined, focusing on buffered requests and ngx.flush(true); done means determining whether lua-resty-http is involved and documenting or fixing the issue with a reproducible result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- lua, nginx
- Domain
- api, backend, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100