Mercurial > dovecot > core-2.2
changeset 21108:1a1310a5f7a8
lib-http: Use io_wait_timer for tracking wait times.
The previous code was completely incorrect, since it wasn't even tracking
the HTTP request's start usecs.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 15 Nov 2016 11:42:47 +0100 |
parents | 8fe5614ccc3c |
children | 9b40053e2b98 |
files | src/lib-http/http-client-connection.c src/lib-http/http-client-private.h src/lib-http/http-client-request.c |
diffstat | 3 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-http/http-client-connection.c Tue Nov 15 11:41:53 2016 +0100 +++ b/src/lib-http/http-client-connection.c Tue Nov 15 11:42:47 2016 +0100 @@ -225,7 +225,8 @@ (*requestp)->sent_global_ioloop_usecs + 999) / 1000; if (conn->client->ioloop != NULL) { int http_ioloop_msecs = - (io_loop_get_wait_usecs(conn->client->ioloop) + 999) / 1000; + (io_wait_timer_get_usecs(conn->io_wait_timer) - + (*requestp)->sent_http_ioloop_usecs + 999) / 1000; other_ioloop_msecs -= http_ioloop_msecs; str_printfa(str, ", %d.%03d in http ioloop", http_ioloop_msecs/1000, http_ioloop_msecs%1000); @@ -1440,6 +1441,7 @@ conn->peer = peer; if (peer->addr.type != HTTP_CLIENT_PEER_ADDR_RAW) i_array_init(&conn->request_wait_list, 16); + conn->io_wait_timer = io_wait_timer_add(); conn->label = i_strdup_printf("%s [%d]", http_client_peer_label(peer), conn->id); @@ -1566,6 +1568,7 @@ ssl_iostream_unref(&conn->ssl_iostream); if (conn->connect_initialized) connection_deinit(&conn->conn); + io_wait_timer_remove(&conn->io_wait_timer); i_free(conn); return FALSE; @@ -1609,5 +1612,6 @@ conn->to_response = io_loop_move_timeout(&conn->to_response); if (conn->incoming_payload != NULL) i_stream_switch_ioloop(conn->incoming_payload); + conn->io_wait_timer = io_wait_timer_move(&conn->io_wait_timer); connection_switch_ioloop(&conn->conn); }
--- a/src/lib-http/http-client-private.h Tue Nov 15 11:41:53 2016 +0100 +++ b/src/lib-http/http-client-private.h Tue Nov 15 11:42:47 2016 +0100 @@ -109,6 +109,7 @@ unsigned int attempts; unsigned int redirects; uint64_t sent_global_ioloop_usecs; + uint64_t sent_http_ioloop_usecs; uint64_t sent_lock_usecs; unsigned int delayed_error_status; @@ -166,6 +167,7 @@ struct istream *incoming_payload; struct io *io_req_payload; struct ioloop *last_ioloop; + struct io_wait_timer *io_wait_timer; /* requests that have been sent, waiting for response */ ARRAY_TYPE(http_client_request) request_wait_list;
--- a/src/lib-http/http-client-request.c Tue Nov 15 11:41:53 2016 +0100 +++ b/src/lib-http/http-client-request.c Tue Nov 15 11:42:47 2016 +0100 @@ -1053,6 +1053,8 @@ req->sent_time = ioloop_timeval; req->sent_lock_usecs = file_lock_wait_get_total_usecs(); req->sent_global_ioloop_usecs = ioloop_global_wait_usecs; + req->sent_http_ioloop_usecs = + io_wait_timer_get_usecs(req->conn->io_wait_timer); o_stream_cork(output); if (o_stream_sendv(output, iov, N_ELEMENTS(iov)) < 0) { *error_r = t_strdup_printf("write(%s) failed: %s",