]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http, global: Add request_ to http_client_max_redirects and http_client_*max_attempts
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 25 Aug 2023 20:11:08 +0000 (16:11 -0400)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
This makes it consistent with http_client_request_*timeout settings.

12 files changed:
src/lib-http/http-client-request.c
src/lib-http/http-client-settings.c
src/lib-http/http-client.h
src/lib-http/test-http-client-errors.c
src/lib-http/test-http-client.c
src/lib-http/test-http-payload.c
src/lib-lua/dlua-dovecot-http.c
src/lib-lua/test-lua-http-client.c
src/lib-lua/test-lua-http-client.lua
src/plugins/fts-solr/solr-connection.c
src/plugins/fts/fts-parser-tika.c
src/plugins/push-notification/push-notification-driver-ox.c

index 7ee7bb3459ef1a1f908d6edc18be8d516eae4710..379ed1ee8167579048a21256880e8a6cb0cd4d7b 100644 (file)
@@ -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,
index 03ede3ffbb11f84a5e74eb2b2663bb7dd10a5630..b1b817373fd72ad02bad19dceb8e9e771b6124be 100644 (file)
@@ -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,
index 976eda68d38e30f567d5cede84ffbe1df325655c..83502786a813b46c1a17ce81aa20d39c97c3b079 100644 (file)
@@ -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.
index b1e40285f6feb222df743af44688f71abbd4d6a1..d5aa23e9c2b96240c0b4b0c2853d2ceb686f422d 100644 (file)
@@ -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)
index b2510a5defe73c280dfa50a387a843fa92ca5154..267694ccd10b27864fb8e6c87fd73c96d40f1797 100644 (file)
@@ -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();
index a18be95e09b65bc6cfb260e62001605c95e695b6..6101719cf7d5300147f0524e49719df098aa22a5 100644 (file)
@@ -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) {
index 0e9ab1ea8c4694f3f77ae727c10e7fbf67d4f017..a8a48da8e96c7a6453e7d01db9f3dc55b1cdcf72 100644 (file)
@@ -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)
index 417f4c60818525cf99117503bb2cb9cd73f9f628..6bb4a2183993fb2a27d311610075b443be4a3beb 100644 (file)
@@ -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);
index 8f16185a2b9bc8c84b606297d572bfd4159f8e89..5de636c25c12ddb85ab17d186c60bd8dea785748 100644 (file)
@@ -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
index 31aa653d8787e2bfea4b32772401d2bc7aaa3eed..a81f072116875ad656ef807e12dfc0370ee32978 100644 (file)
@@ -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);
index 6606978d1a12626790980c6c843143ec627519a7..e83f98afc4863c89a90cd4c9f39423203df09113 100644 (file)
@@ -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;
 
index 92d4372ab66fa5a2b0a52098dd915f8812217e91..f8a6ce9595782cd1d9b58bb6fa8c84db8f5d0643 100644 (file)
@@ -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);