>> >> >> But is it ok to call next body filter in subrequest's body filter to >> >> >> produce output to main request? >> >> >> I mean ngx_http_next_body_filter(r->main, out). >> >> > >> >> > No. You should call next body filter of the request you are >> >> > working with. It's postpone filter responsibility to manage >> >> > subrequests output, and if you try to do this yourself instead - >> >> > result will be undefined. >> >> >> >> It seems to work as expected for me. How can I cause problems with this? >> > >> > Undefined behaviour sometimes appear to work as expected. This >> > doesn't mean it's correct though. >> > >> > Depending on the exact place in a filter chain where you did it >> > and various other factors like timings, results may vary from >> > "nothing bad might happen, as r == r->main anyway" to "response >> > will completely incorrect as wrong filters will be applied to the >> > response body". >> > >> > Most trivial thing to test is probably a subrequest order, which >> > likely will be wrong in your case if first subrequest will take >> > longer to handle than second one. >> >> Subrequests order doesn't matter much for me. I feed my library (the >> one I write a Nginx module for) with a subrequests results in a >> whatever order and my library returns next chunk of response only when >> it is ready. >> >> My library has just one function to call. This function returns the >> next chunk of data (if any) to send as a response and/or a list of >> subrequests to make. In every call to subrequest body filter I pass >> subrequest's response to my library and get a new list of subrequests >> (if any) and a new chunk of final response (if any). And so on, until >> my library says it's done. >> >> And if I really do something wrong in terms of Nginx architecture, >> please, could you give me more details about how to achieve my goals >> correctly? > > I don't really see why you don't call ngx_http_next_body_filter(r, > out), which is perfectly correct.
Because I'm getting a mess with the chunk order. Let's suppose I've made two subrequests in a handler. ngx_http_subrequest(...); // first ngx_http_subrequest(...); // second If I call ngx_http_next_body_filter(r, out) in a subrequest body filter, I get the following. Let's suppose we've received a response from the second subrequest before any data from the first subrequest. And my library said I should send "aaa" as a response (and I passed "aaa" to ngx_http_next_body_filter). Then, we've got a response from the first subrequest and my library said I should send "bbb" as a response. I would expect "aaabbb" as the final result. But real result would be "bbbaaa" (because ngx_http_subrequest for first subrequest is earlier). How to deal with this? -- Marat _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel