[PATCH] Move calculation $upstream_response_time before send header to client.

Maxim Dounin mdounin at mdounin.ru
Wed Apr 22 12:30:41 MSD 2009


Hello!

On Tue, Apr 21, 2009 at 09:59:21PM +0400, catap+nginx at catap.ru wrote:

> From: Kirill A. Korinskiy <catap at catap.ru>
> 
> Now calculation $upstream_response_time happen after send header to
> client and we have a 0 ms response to not error (last) upstream.

The patch itself is clearly wrong.  But could you please repeat 
once again (in russian if you prefer to) what problem you are 
trying to solve?

>From our IRC discussion yesterday it looks like you are trying to 
get $upstream_response_time in reply header.  No, this not work as 
$upstream_response_time is time taken for the whole upstream 
request processing (not only headers), and it's usually known only 
after sending response headers.

Probably we may introduce something like $upstream_header_time 
with the meaning you assumed, but I'm not really sure we need to.

Maxim Dounin


> ---
>  src/http/ngx_http_upstream.c |   23 +++++++++++------------
>  1 files changed, 11 insertions(+), 12 deletions(-)
> 
> diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
> index 7ae15cb..0771388 100644
> --- a/src/http/ngx_http_upstream.c
> +++ b/src/http/ngx_http_upstream.c
> @@ -1843,10 +1843,21 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
>      int                        tcp_nodelay;
>      ssize_t                    n;
>      ngx_int_t                  rc;
> +    ngx_time_t                *tp;
>      ngx_event_pipe_t          *p;
>      ngx_connection_t          *c;
>      ngx_http_core_loc_conf_t  *clcf;
>  
> +    if (u->state && u->state->response_sec) {
> +        tp = ngx_timeofday();
> +        u->state->response_sec = tp->sec - u->state->response_sec;
> +        u->state->response_msec = tp->msec - u->state->response_msec;
> +
> +        if (u->pipe) {
> +            u->state->response_length = u->pipe->read_length;
> +        }
> +    }
> +
>      rc = ngx_http_send_header(r);
>  
>      if (rc == NGX_ERROR || rc > NGX_OK || r->post_action) {
> @@ -2735,8 +2746,6 @@ static void
>  ngx_http_upstream_finalize_request(ngx_http_request_t *r,
>      ngx_http_upstream_t *u, ngx_int_t rc)
>  {
> -    ngx_time_t  *tp;
> -
>      ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
>                     "finalize http upstream request: %i", rc);
>  
> @@ -2744,16 +2753,6 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
>          *u->cleanup = NULL;
>      }
>  
> -    if (u->state && u->state->response_sec) {
> -        tp = ngx_timeofday();
> -        u->state->response_sec = tp->sec - u->state->response_sec;
> -        u->state->response_msec = tp->msec - u->state->response_msec;
> -
> -        if (u->pipe) {
> -            u->state->response_length = u->pipe->read_length;
> -        }
> -    }
> -
>      u->finalize_request(r, rc);
>  
>      if (u->peer.free) {
> -- 
> 1.6.2
> 
> 





More information about the nginx-ru mailing list