| From | Sent On | Attachments |
|---|---|---|
| Manlio Perillo | Mar 27, 2008 4:52 am | |
| Sergey Bochenkov | Mar 27, 2008 7:28 am | |
| Manlio Perillo | Mar 28, 2008 5:21 am | |
| Sergey Bochenkov | Mar 28, 2008 6:13 am | |
| Manlio Perillo | Mar 29, 2008 5:18 am | |
| Manlio Perillo | Mar 29, 2008 3:15 pm |
| Subject: | Re: [dev] some questions about subrequests | |
|---|---|---|
| From: | Sergey Bochenkov (bach...@public.gmane.org) | |
| Date: | Mar 28, 2008 6:13:38 am | |
| List: | ru.sysoev.nginx | |
On Fri, 28 Mar 2008 13:21:31 +0100 Manlio Perillo <manlio_perillo-VGgt2q2+T+FeoW...@public.gmane.org> wrote:
Sergey Bochenkov ha scritto:
NGX_HTTP_ZERO_IN_URI:
src/http/ngx_http_core_module.c: sr->zero_in_uri = (flags & NGX_HTTP_ZERO_IN_URI) != 0;
src/http/ngx_http_request.h: /* URI with "\0" or "%00" */ unsigned zero_in_uri:1;
Obviously, IMHO.
Yes, this was easy!
NGX_HTTP_SUBREQUEST_IN_MEMORY:
src/http/ngx_http_core_module.c: sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0;
src/http/ngx_http_upstream.c: if (!r->subrequest_in_memory) { ngx_http_upstream_send_response(r, u); return; }
/* subrequest content in memory */
...
So, as I can understand from using-of-subrequests point of view, r->subrequest_in_memory flag tells ngx_http_upstream_module to save a pointer to the full chain of response buffers in r->upstream->out_bufs chain-link. And *not-to-free* that buffers after subrequest was finished.
Fix me, if I'm wrong.
I'm not sure, but it seems that I can safely set flags to 0.
If you need to keep the upstream response in memory, NGX_HTTP_SUBREQUEST_IN_MEMORY flag may be useful for you. You can also set the r->filter_need_in_memory flag in header-filter and read full response body in the body-filter.
I have one more, important, question. When will be the post_subrequest->handler called? Always after ngx_http_subrequest returns?
The ngx_http_subrequest()-function is asyncronous and returns immediately after all appropriate fields of ngx_http_request_t structure will be filled. It doesn't wait for any upstream answer at all.
The handler will be called after the end of the *subrequest*, not the end of ngx_http_subrequest()-function call.
Here you can find the appropriate discussion (unfortunately, in russian): http://article.gmane.org/gmane.comp.web.nginx.russian/11160
Thanks Manlio Perillo





