From: Timo Sirainen Date: Thu, 22 Apr 2021 08:36:40 +0000 (+0300) Subject: master: Explain how "client_limit is lower than required" is calculated in the warning X-Git-Tag: 2.3.16~308 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28ca2bb15266deec12cec0854b3f2ff295514316;p=thirdparty%2Fdovecot%2Fcore.git master: Explain how "client_limit is lower than required" is calculated in the warning --- diff --git a/src/config/settings-get.pl b/src/config/settings-get.pl index eec117fd1f..644b9b5e64 100755 --- a/src/config/settings-get.pl +++ b/src/config/settings-get.pl @@ -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"; diff --git a/src/master/master-settings.c b/src/master/master-settings.c index d4105d55a6..cb99dc483f 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -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 &&