From: Timo Sirainen Date: Thu, 5 May 2016 21:17:31 +0000 (+0300) Subject: lib-http: If connect fails, include attempt count and total time in error. X-Git-Tag: 2.3.0.rc1~3810 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9284599e2d12b08170be81441bcfc53fa5b71a73;p=thirdparty%2Fdovecot%2Fcore.git lib-http: If connect fails, include attempt count and total time in error. This will produce errors such as: 9002 connect(1.2.3.4:801) failed: Connection timed out in 1.001 secs (4 attempts in 4.706 secs) --- diff --git a/src/lib-http/http-client-private.h b/src/lib-http/http-client-private.h index 48612813b8..29fd66aa85 100644 --- a/src/lib-http/http-client-private.h +++ b/src/lib-http/http-client-private.h @@ -220,6 +220,7 @@ struct http_client_queue { connected IP */ unsigned int ips_connect_start_idx; + struct timeval first_connect_time; unsigned int connect_attempts; /* peers we are trying to connect to; diff --git a/src/lib-http/http-client-queue.c b/src/lib-http/http-client-queue.c index 7b2bbff90b..d6dea62ae0 100644 --- a/src/lib-http/http-client-queue.c +++ b/src/lib-http/http-client-queue.c @@ -282,7 +282,8 @@ void http_client_queue_connection_setup(struct http_client_queue *queue) http_client_peer_addr2str(addr), ssl); array_append(&queue->pending_peers, &peer, 1); - queue->connect_attempts++; + if (queue->connect_attempts++ == 0) + queue->first_connect_time = ioloop_timeval; } /* start soft connect time-out (but only if we have another IP left) */ @@ -401,6 +402,13 @@ http_client_queue_connection_failure(struct http_client_queue *queue, queue->connect_attempts >= set->max_connect_attempts) { http_client_queue_debug(queue, "Failed to set up any connection; failing all queued requests"); + if (queue->connect_attempts > 1) { + unsigned int total_msecs = + timeval_diff_msecs(&ioloop_timeval, &queue->first_connect_time); + reason = t_strdup_printf("%s (%u attempts in %u.%03u secs)", + reason, queue->connect_attempts, + total_msecs/1000, total_msecs%1000); + } queue->connect_attempts = 0; http_client_queue_fail(queue, HTTP_CLIENT_REQUEST_ERROR_CONNECT_FAILED, reason);