]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Explain how "client_limit is lower than required" is calculated in the warning
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 22 Apr 2021 08:36:40 +0000 (11:36 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 3 May 2021 06:50:55 +0000 (06:50 +0000)
src/config/settings-get.pl
src/master/master-settings.c

index eec117fd1fdc5b08f66794a08d026c1119dc805a..644b9b5e64f500d0023bd866c5ace8f859f0ebf2 100755 (executable)
@@ -10,6 +10,7 @@ print "   by make. (This file is distributed in the tarball only because some\n"
 print "   systems might not have Perl installed.) */\n";
 print '#include "lib.h"'."\n";
 print '#include "array.h"'."\n";
+print '#include "str.h"'."\n";
 print '#include "ipwd.h"'."\n";
 print '#include "var-expand.h"'."\n";
 print '#include "file-lock.h"'."\n";
index d4105d55a6758d2213d8a5ac01c254f7042c4dce..cb99dc483f0975667ab4907155ea85a99b444cce 100644 (file)
@@ -425,6 +425,8 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
        struct passwd pw;
        unsigned int i, j, count, client_limit, process_limit;
        unsigned int max_auth_client_processes, max_anvil_client_processes;
+       string_t *max_auth_client_processes_reason = t_str_new(64);
+       string_t *max_anvil_client_processes_reason = t_str_new(64);
        size_t len;
 #ifdef CONFIG_BINARY
        const struct service_settings *default_service;
@@ -580,12 +582,20 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
                           imap-hibernate doesn't do any auth lookups. */
                        if ((service->service_count != 1 ||
                             strcmp(service->type, "login") == 0) &&
-                           strcmp(service->name, "imap-hibernate") != 0)
+                           strcmp(service->name, "imap-hibernate") != 0) {
+                               str_printfa(max_auth_client_processes_reason,
+                                           " + service %s { process_limit=%u }",
+                                           service->name, process_limit);
                                max_auth_client_processes += process_limit;
+                       }
                }
                if (strcmp(service->type, "login") == 0 ||
-                   strcmp(service->name, "auth") == 0)
+                   strcmp(service->name, "auth") == 0) {
                        max_anvil_client_processes += process_limit;
+                       str_printfa(max_anvil_client_processes_reason,
+                                   " + service %s { process_limit=%u }",
+                                   service->name, process_limit);
+               }
 
                if (!fix_file_listener_paths(&service->unix_listeners, pool,
                                             set, &all_listeners, error_r)) {
@@ -605,17 +615,22 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
        client_limit = service_get_client_limit(set, "auth");
        if (client_limit < max_auth_client_processes && !warned_auth) {
                warned_auth = TRUE;
+               str_delete(max_auth_client_processes_reason, 0, 3);
                i_warning("service auth { client_limit=%u } is lower than "
-                         "required under max. load (%u)",
-                         client_limit, max_auth_client_processes);
+                         "required under max. load (%u). "
+                         "Counted for protocol services with service_count != 1: %s",
+                         client_limit, max_auth_client_processes,
+                         str_c(max_auth_client_processes_reason));
        }
 
        client_limit = service_get_client_limit(set, "anvil");
        if (client_limit < max_anvil_client_processes && !warned_anvil) {
                warned_anvil = TRUE;
+               str_delete(max_anvil_client_processes_reason, 0, 3);
                i_warning("service anvil { client_limit=%u } is lower than "
-                         "required under max. load (%u)",
-                         client_limit, max_anvil_client_processes);
+                         "required under max. load (%u). Counted with: %s",
+                         client_limit, max_anvil_client_processes,
+                         str_c(max_anvil_client_processes_reason));
        }
 #ifndef CONFIG_BINARY
        if (restrict_get_fd_limit(&fd_limit) == 0 &&