Marat Dakota
March 25, 2013 11:42AM
>> >> >> 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
Subject Author Views Posted

Subrequests from body filters

Marat Dakota 982 March 24, 2013 01:14PM

Re: Subrequests from body filters

Marat Dakota 448 March 24, 2013 05:16PM

Re: Subrequests from body filters

Marat Dakota 555 March 24, 2013 05:40PM

Re: Subrequests from body filters

Maxim Dounin 503 March 25, 2013 07:58AM

Re: Subrequests from body filters

Marat Dakota 470 March 25, 2013 09:42AM

Re: Subrequests from body filters

Maxim Dounin 443 March 25, 2013 09:48AM

Re: Subrequests from body filters

Marat Dakota 459 March 25, 2013 09:54AM

Re: Subrequests from body filters

Maxim Dounin 460 March 25, 2013 10:22AM

Re: Subrequests from body filters

Marat Dakota 409 March 25, 2013 10:48AM

Re: Subrequests from body filters

Maxim Dounin 484 March 25, 2013 10:56AM

Re: Subrequests from body filters

Marat Dakota 466 March 25, 2013 11:42AM

Re: Subrequests from body filters

Maxim Dounin 410 March 25, 2013 12:02PM

Re: Subrequests from body filters

Marat Dakota 448 March 25, 2013 12:24PM

Re: Subrequests from body filters

Maxim Dounin 652 March 25, 2013 02:12PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 160
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready