From: Timo Sirainen Date: Fri, 25 Aug 2023 20:11:08 +0000 (-0400) Subject: lib-http, global: Add request_ to http_client_max_redirects and http_client_*max_attempts X-Git-Tag: 2.4.1~1360 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=39d4ba514bef6d2ab723c0f8e6f11aff94b8059d;p=thirdparty%2Fdovecot%2Fcore.git lib-http, global: Add request_ to http_client_max_redirects and http_client_*max_attempts This makes it consistent with http_client_request_*timeout settings. --- diff --git a/src/lib-http/http-client-request.c b/src/lib-http/http-client-request.c index 7ee7bb3459..379ed1ee81 100644 --- a/src/lib-http/http-client-request.c +++ b/src/lib-http/http-client-request.c @@ -123,27 +123,27 @@ http_client_request_new(struct http_client *client, const char *method, EVENT_REASON_CODE); /* Default to client-wide settings: */ - req->max_attempts = client->set->max_attempts; + req->max_attempts = client->set->request_max_attempts; req->attempt_timeout_msecs = client->set->request_timeout_msecs; if (strcasecmp(method, "GET") == 0 || strcasecmp(method, "HEAD") == 0) { - if (client->set->read_max_attempts != 0) - req->max_attempts = client->set->read_max_attempts; + if (client->set->read_request_max_attempts != 0) + req->max_attempts = client->set->read_request_max_attempts; if (client->set->read_request_timeout_msecs != 0) { req->attempt_timeout_msecs = client->set->read_request_timeout_msecs; } } else if (strcasecmp(method, "PUT") == 0 || strcasecmp(method, "POST") == 0) { - if (client->set->write_max_attempts != 0) - req->max_attempts = client->set->write_max_attempts; + if (client->set->write_request_max_attempts != 0) + req->max_attempts = client->set->write_request_max_attempts; if (client->set->write_request_timeout_msecs != 0) { req->attempt_timeout_msecs = client->set->write_request_timeout_msecs; } } else if (strcasecmp(method, "DELETE") == 0) { - if (client->set->delete_max_attempts != 0) - req->max_attempts = client->set->delete_max_attempts; + if (client->set->delete_request_max_attempts != 0) + req->max_attempts = client->set->delete_request_max_attempts; if (client->set->delete_request_timeout_msecs != 0) { req->attempt_timeout_msecs = client->set->delete_request_timeout_msecs; @@ -1806,15 +1806,15 @@ void http_client_request_redirect(struct http_client_request *req, return; } - i_assert(req->redirects <= req->client->set->max_redirects); - if (++req->redirects > req->client->set->max_redirects) { - if (req->client->set->max_redirects > 0) { + i_assert(req->redirects <= req->client->set->request_max_redirects); + if (++req->redirects > req->client->set->request_max_redirects) { + if (req->client->set->request_max_redirects > 0) { http_client_request_error( &req, HTTP_CLIENT_REQUEST_ERROR_INVALID_REDIRECT, t_strdup_printf( "Redirected more than %d times", - req->client->set->max_redirects)); + req->client->set->request_max_redirects)); } else { http_client_request_error( &req, diff --git a/src/lib-http/http-client-settings.c b/src/lib-http/http-client-settings.c index 03ede3ffbb..b1b817373f 100644 --- a/src/lib-http/http-client-settings.c +++ b/src/lib-http/http-client-settings.c @@ -43,11 +43,11 @@ static const struct setting_define http_client_setting_defines[] = { DEF(BOOL_HIDDEN, auto_retry), DEF(BOOL, ssl_tunnel), - DEF(UINT, max_redirects), - DEF(UINT, max_attempts), - DEF(UINT, read_max_attempts), - DEF(UINT, write_max_attempts), - DEF(UINT, delete_max_attempts), + DEF(UINT, request_max_redirects), + DEF(UINT, request_max_attempts), + DEF(UINT, read_request_max_attempts), + DEF(UINT, write_request_max_attempts), + DEF(UINT, delete_request_max_attempts), DEF(UINT, max_connect_attempts), DEF_MSECS(TIME_MSECS_HIDDEN, connect_backoff_time), @@ -93,11 +93,11 @@ static const struct http_client_settings http_client_default_settings = { .auto_retry = TRUE, .ssl_tunnel = TRUE, - .max_redirects = 0, - .max_attempts = 0, - .read_max_attempts = 0, - .write_max_attempts = 0, - .delete_max_attempts = 0, + .request_max_redirects = 0, + .request_max_attempts = 0, + .read_request_max_attempts = 0, + .write_request_max_attempts = 0, + .delete_request_max_attempts = 0, .max_connect_attempts = 0, .connect_backoff_time_msecs = HTTP_CLIENT_DEFAULT_BACKOFF_TIME_MSECS, diff --git a/src/lib-http/http-client.h b/src/lib-http/http-client.h index 976eda68d3..83502786a8 100644 --- a/src/lib-http/http-client.h +++ b/src/lib-http/http-client.h @@ -72,16 +72,16 @@ struct http_client_settings { /* Maximum number of redirects for a request (default = 0; redirects refused) */ - unsigned int max_redirects; + unsigned int request_max_redirects; /* Maximum number of attempts for a request */ - unsigned int max_attempts; + unsigned int request_max_attempts; /* If non-zero, override max_attempts for GET/HEAD requests. */ - unsigned int read_max_attempts; + unsigned int read_request_max_attempts; /* If non-zero, override max_attempts for PUT/POST requests. */ - unsigned int write_max_attempts; + unsigned int write_request_max_attempts; /* If non-zero, override max_attempts for DELETE requests. */ - unsigned int delete_max_attempts; + unsigned int delete_request_max_attempts; /* Maximum number of connection attempts to a host before all associated requests fail. diff --git a/src/lib-http/test-http-client-errors.c b/src/lib-http/test-http-client-errors.c index b1e40285f6..d5aa23e9c2 100644 --- a/src/lib-http/test-http-client-errors.c +++ b/src/lib-http/test-http-client-errors.c @@ -433,7 +433,7 @@ static void test_connection_lost_prematurely(void) test_client_defaults(&http_client_set); http_client_set.max_connect_attempts = 3; - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; test_begin("connection lost prematurely"); test_run_client_server(&http_client_set, @@ -498,7 +498,7 @@ static void test_connection_timed_out(void) test_client_defaults(&http_client_set); http_client_set.connect_timeout_msecs = 1000; - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; test_begin("connection timed out"); test_run_client_server(&http_client_set, @@ -611,21 +611,21 @@ static void test_invalid_redirect(void) test_client_defaults(&http_client_set); test_begin("invalid redirect: not accepted"); - http_client_set.max_redirects = 0; + http_client_set.request_max_redirects = 0; test_run_client_server(&http_client_set, test_client_invalid_redirect, test_server_invalid_redirect1, 1, NULL); test_end(); test_begin("invalid redirect: bad location"); - http_client_set.max_redirects = 1; + http_client_set.request_max_redirects = 1; test_run_client_server(&http_client_set, test_client_invalid_redirect, test_server_invalid_redirect2, 1, NULL); test_end(); test_begin("invalid redirect: too many"); - http_client_set.max_redirects = 1; + http_client_set.request_max_redirects = 1; test_run_client_server(&http_client_set, test_client_invalid_redirect, test_server_invalid_redirect3, 3, NULL); @@ -700,7 +700,7 @@ static void test_unseekable_redirect(void) struct http_client_settings http_client_set; test_client_defaults(&http_client_set); - http_client_set.max_redirects = 1; + http_client_set.request_max_redirects = 1; test_begin("unseekable redirect"); test_run_client_server(&http_client_set, @@ -768,7 +768,7 @@ static void test_unseekable_retry(void) struct http_client_settings http_client_set; test_client_defaults(&http_client_set); - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; test_begin("unseekable retry"); test_run_client_server(&http_client_set, @@ -996,7 +996,7 @@ static void test_retry_payload(void) struct http_client_settings http_client_set; test_client_defaults(&http_client_set); - http_client_set.max_attempts = 2; + http_client_set.request_max_attempts = 2; server_read_max = 0; @@ -1133,28 +1133,28 @@ static void test_connection_lost(void) server_read_max = 0; test_begin("connection lost: one attempt"); - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; test_run_client_server(&http_client_set, test_client_connection_lost, test_server_connection_lost, 1, NULL); test_end(); test_begin("connection lost: two attempts"); - http_client_set.max_attempts = 2; + http_client_set.request_max_attempts = 2; test_run_client_server(&http_client_set, test_client_connection_lost, test_server_connection_lost, 1, NULL); test_end(); test_begin("connection lost: three attempts"); - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; test_run_client_server(&http_client_set, test_client_connection_lost, test_server_connection_lost, 1, NULL); test_end(); test_begin("connection lost: manual retry"); - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; http_client_set.auto_retry = FALSE; test_run_client_server(&http_client_set, test_client_connection_lost, @@ -1254,7 +1254,7 @@ static void test_connection_lost_100(void) server_read_max = 0; test_begin("connection lost after 100-continue"); - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; test_run_client_server(&http_client_set, test_client_connection_lost_100, test_server_connection_lost_100, 1, NULL); @@ -1390,7 +1390,7 @@ static void test_connection_lost_sub_ioloop(void) server_read_max = 0; test_begin("connection lost while running sub-ioloop"); - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; test_run_client_server(&http_client_set, test_client_connection_lost_sub_ioloop, test_server_connection_lost_sub_ioloop, 2, NULL); @@ -1743,7 +1743,7 @@ static void test_request_timed_out(void) test_begin("request timed out: one attempt"); http_client_set.request_timeout_msecs = 1000; - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; test_run_client_server(&http_client_set, test_client_request_timed_out1, test_server_request_timed_out, 1, NULL); @@ -1751,7 +1751,7 @@ static void test_request_timed_out(void) test_begin("request timed out: two attempts"); http_client_set.request_timeout_msecs = 1000; - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; test_run_client_server(&http_client_set, test_client_request_timed_out1, test_server_request_timed_out, 1, NULL); @@ -1760,7 +1760,7 @@ static void test_request_timed_out(void) test_begin("request absolutely timed out"); test_client_defaults(&http_client_set); http_client_set.request_absolute_timeout_msecs = 2000; - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; test_run_client_server(&http_client_set, test_client_request_timed_out1, test_server_request_timed_out, 1, NULL); @@ -1769,7 +1769,7 @@ static void test_request_timed_out(void) test_begin("request double timed out"); http_client_set.request_timeout_msecs = 500; http_client_set.request_absolute_timeout_msecs = 2000; - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; test_run_client_server(&http_client_set, test_client_request_timed_out1, test_server_request_timed_out, 1, NULL); @@ -1778,7 +1778,7 @@ static void test_request_timed_out(void) test_begin("request timed out: specific timeout"); test_client_defaults(&http_client_set); http_client_set.request_timeout_msecs = 3000; - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; http_client_set.max_parallel_connections = 1; test_run_client_server(&http_client_set, test_client_request_timed_out2, @@ -1788,7 +1788,7 @@ static void test_request_timed_out(void) test_begin("request timed out: specific timeout (parallel)"); test_client_defaults(&http_client_set); http_client_set.request_timeout_msecs = 3000; - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; http_client_set.max_parallel_connections = 4; test_run_client_server(&http_client_set, test_client_request_timed_out2, @@ -2190,7 +2190,7 @@ static void test_retry_with_delay(void) struct http_client_settings http_client_set; test_client_defaults(&http_client_set); - http_client_set.max_attempts = 3; + http_client_set.request_max_attempts = 3; test_begin("retry with delay"); test_run_client_server(&http_client_set, @@ -2873,7 +2873,7 @@ static void test_reconnect_failure(void) http_client_set.dns_client_socket_path = "./dns-test"; http_client_set.dns_ttl_msecs = 10000; http_client_set.max_idle_time_msecs = 1000; - http_client_set.max_attempts = 1; + http_client_set.request_max_attempts = 1; http_client_set.request_timeout_msecs = 1000; test_begin("reconnect failure"); @@ -3424,7 +3424,7 @@ static void test_idle_hosts(void) http_client_set.dns_ttl_msecs = 400; http_client_set.max_parallel_connections = 1; http_client_set.max_idle_time_msecs = 100; - http_client_set.max_attempts = 2; + http_client_set.request_max_attempts = 2; test_begin("idle hosts"); test_run_client_server(&http_client_set, @@ -3485,8 +3485,8 @@ static void test_client_defaults(struct http_client_settings *http_set) http_set->max_idle_time_msecs = 5*1000; http_set->max_parallel_connections = 1; http_set->max_pipelined_requests = 1; - http_set->max_redirects = 0; - http_set->max_attempts = 1; + http_set->request_max_redirects = 0; + http_set->request_max_attempts = 1; } static void test_client_progress_timeout(void *context ATTR_UNUSED) diff --git a/src/lib-http/test-http-client.c b/src/lib-http/test-http-client.c index b2510a5def..267694ccd1 100644 --- a/src/lib-http/test-http-client.c +++ b/src/lib-http/test-http-client.c @@ -392,9 +392,9 @@ int main(int argc, char *argv[]) http_set.max_idle_time_msecs = 5*1000; http_set.max_parallel_connections = 4; http_set.max_pipelined_requests = 4; - http_set.max_redirects = 2; + http_set.request_max_redirects = 2; http_set.request_timeout_msecs = 10*1000; - http_set.max_attempts = 1; + http_set.request_max_attempts = 1; http_set.rawlog_dir = "/tmp/http-test"; http_cctx = http_client_context_create(); diff --git a/src/lib-http/test-http-payload.c b/src/lib-http/test-http-payload.c index a18be95e09..6101719cf7 100644 --- a/src/lib-http/test-http-payload.c +++ b/src/lib-http/test-http-payload.c @@ -1776,8 +1776,8 @@ static void test_init_client_settings(struct http_client_settings *client_set_r) { http_client_settings_init(null_pool, client_set_r); - client_set_r->max_redirects = 0; - client_set_r->max_attempts = 1; + client_set_r->request_max_redirects = 0; + client_set_r->request_max_attempts = 1; client_set_r->max_idle_time_msecs = 5* 1000; if (small_socket_buffers) { diff --git a/src/lib-lua/dlua-dovecot-http.c b/src/lib-lua/dlua-dovecot-http.c index 0e9ab1ea8c..a8a48da8e9 100644 --- a/src/lib-lua/dlua-dovecot-http.c +++ b/src/lib-lua/dlua-dovecot-http.c @@ -487,8 +487,8 @@ static int parse_client_settings(lua_State *L, struct http_client_settings *set, */ CLIENT_SETTING_BOOL(auto_redirect) CLIENT_SETTING_BOOL(auto_retry) - CLIENT_SETTING_UINT(max_redirects) - CLIENT_SETTING_UINT(max_attempts) + CLIENT_SETTING_UINT(request_max_redirects) + CLIENT_SETTING_UINT(request_max_attempts) CLIENT_SETTING_UINT(max_connect_attempts) CLIENT_SETTING_UINT(connect_backoff_time_msecs) CLIENT_SETTING_UINT(connect_backoff_max_time_msecs) diff --git a/src/lib-lua/test-lua-http-client.c b/src/lib-lua/test-lua-http-client.c index 417f4c6081..6bb4a21839 100644 --- a/src/lib-lua/test-lua-http-client.c +++ b/src/lib-lua/test-lua-http-client.c @@ -389,7 +389,7 @@ static void test_bad_settings(void) ret = dlua_pcall(script->L, "test_invalid_set_value_2", 0, 0, &error); test_assert(ret < 0); - test_assert(strstr(error, "Invalid HTTP client setting: max_attempts: non-negative number expected") != NULL); + test_assert(strstr(error, "Invalid HTTP client setting: request_max_attempts: non-negative number expected") != NULL); ret = dlua_pcall(script->L, "test_invalid_set_value_3", 0, 0, &error); test_assert(ret < 0); diff --git a/src/lib-lua/test-lua-http-client.lua b/src/lib-lua/test-lua-http-client.lua index 8f16185a2b..5de636c25c 100644 --- a/src/lib-lua/test-lua-http-client.lua +++ b/src/lib-lua/test-lua-http-client.lua @@ -35,7 +35,7 @@ end function script_init() http_client = dovecot.http.client({ - max_attempts = 3, + request_max_attempts = 3, connect_timeout_msecs = 2000, request_timeout_msecs = 5000, request_absolute_timeout_msecs = 45000, @@ -60,7 +60,7 @@ end function test_invalid_set_value_2() http_client = dovecot.http.client({ - max_attempts = "three" + request_max_attempts = "three" }) return 0 end diff --git a/src/plugins/fts-solr/solr-connection.c b/src/plugins/fts-solr/solr-connection.c index 31aa653d87..a81f072116 100644 --- a/src/plugins/fts-solr/solr-connection.c +++ b/src/plugins/fts-solr/solr-connection.c @@ -104,8 +104,8 @@ int solr_connection_init(const struct fts_solr_settings *solr_set, http_set->max_idle_time_msecs = 5*1000; http_set->max_parallel_connections = 1; http_set->max_pipelined_requests = 1; - http_set->max_redirects = 1; - http_set->max_attempts = 3; + http_set->request_max_redirects = 1; + http_set->request_max_attempts = 3; http_set->connect_timeout_msecs = 5*1000; http_set->request_timeout_msecs = 60*1000; http_set->rawlog_dir = p_strdup(http_pool, solr_set->rawlog_dir); diff --git a/src/plugins/fts/fts-parser-tika.c b/src/plugins/fts/fts-parser-tika.c index 6606978d1a..e83f98afc4 100644 --- a/src/plugins/fts/fts-parser-tika.c +++ b/src/plugins/fts/fts-parser-tika.c @@ -72,8 +72,8 @@ tika_get_http_client_url(struct fts_parser_context *parser_context, struct http_ http_set->max_idle_time_msecs = 100; http_set->max_parallel_connections = 1; http_set->max_pipelined_requests = 1; - http_set->max_redirects = 1; - http_set->max_attempts = 3; + http_set->request_max_redirects = 1; + http_set->request_max_attempts = 3; http_set->connect_timeout_msecs = 5*1000; http_set->request_timeout_msecs = 60*1000; diff --git a/src/plugins/push-notification/push-notification-driver-ox.c b/src/plugins/push-notification/push-notification-driver-ox.c index 92d4372ab6..f8a6ce9595 100644 --- a/src/plugins/push-notification/push-notification-driver-ox.c +++ b/src/plugins/push-notification/push-notification-driver-ox.c @@ -72,7 +72,7 @@ push_notification_driver_ox_init_global( sizeof(*http_set)); http_set = p_new(http_pool, struct http_client_settings, 1); http_client_settings_init(http_pool, http_set); - http_set->max_attempts = config->http_max_retries+1; + http_set->request_max_attempts = config->http_max_retries+1; http_set->request_timeout_msecs = config->http_timeout_msecs; ox_global->http_client = http_client_init(http_set, user->event);