dovecot-2.0: config: Log a warning if auth service's client_limi...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Mar 25 17:03:17 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/4191ba54c8aa
changeset: 10977:4191ba54c8aa
user: Timo Sirainen <tss at iki.fi>
date: Thu Mar 25 17:00:48 2010 +0200
description:
config: Log a warning if auth service's client_limit is too low.
diffstat:
src/master/master-settings.c | 45 +++++++++++++++++++++++++++++++++------------
1 files changed, 33 insertions(+), 12 deletions(-)
diffs (97 lines):
diff -r f6c2c0866aff -r 4191ba54c8aa src/master/master-settings.c
--- a/src/master/master-settings.c Tue Mar 23 20:14:56 2010 +0200
+++ b/src/master/master-settings.c Thu Mar 25 17:00:48 2010 +0200
@@ -334,8 +334,7 @@
array_foreach(&set->services, services) {
struct service_settings *service = *services;
- if (service->protocol != NULL &&
- strcmp(service->protocol, name) == 0)
+ if (strcmp(service->protocol, name) == 0)
return TRUE;
}
return FALSE;
@@ -344,11 +343,13 @@
static bool
master_settings_verify(void *_set, pool_t pool, const char **error_r)
{
+ static int warned_auth = FALSE;
struct master_settings *set = _set;
struct service_settings *const *services;
const char *const *strings;
ARRAY_TYPE(const_string) all_listeners;
unsigned int i, j, count, process_limit;
+ unsigned int auth_client_limit, max_auth_client_processes;
if (set->last_valid_uid != 0 &&
set->first_valid_uid > set->last_valid_uid) {
@@ -390,8 +391,18 @@
expand_user(&service->user, set);
service_set_login_dump_core(service);
}
+ set->protocols_split = p_strsplit(pool, set->protocols, " ");
+ for (i = 0; set->protocols_split[i] != NULL; i++) {
+ if (!services_have_protocol(set, set->protocols_split[i])) {
+ *error_r = t_strdup_printf("protocols: "
+ "Unknown protocol: %s",
+ set->protocols_split[i]);
+ return FALSE;
+ }
+ }
t_array_init(&all_listeners, 64);
+ auth_client_limit = max_auth_client_processes = 0;
for (i = 0; i < count; i++) {
struct service_settings *service = services[i];
@@ -426,6 +437,19 @@
service->name);
return FALSE;
}
+
+ if (strcmp(service->name, "auth") == 0) {
+ auth_client_limit = service->client_limit != 0 ?
+ service->client_limit :
+ set->default_client_limit;
+ } else if (*service->protocol != '\0' &&
+ str_array_find((const char **)set->protocols_split,
+ service->protocol)) {
+ /* each imap/pop3/lmtp process can use up a connection,
+ although if service_count=1 it's only temporary */
+ max_auth_client_processes += process_limit;
+ }
+
fix_file_listener_paths(&service->unix_listeners,
pool, set, &all_listeners);
fix_file_listener_paths(&service->fifo_listeners,
@@ -433,6 +457,13 @@
add_inet_listeners(&service->inet_listeners, &all_listeners);
}
+ if (auth_client_limit < max_auth_client_processes && !warned_auth) {
+ warned_auth = TRUE;
+ i_warning("service auth { client_limit=%u } is lower than "
+ "required under max. load (%u)",
+ auth_client_limit, max_auth_client_processes);
+ }
+
/* check for duplicate listeners */
array_sort(&all_listeners, i_strcmp_p);
strings = array_get(&all_listeners, &count);
@@ -443,16 +474,6 @@
return FALSE;
}
}
-
- set->protocols_split = p_strsplit(pool, set->protocols, " ");
- for (i = 0; set->protocols_split[i] != NULL; i++) {
- if (!services_have_protocol(set, set->protocols_split[i])) {
- *error_r = t_strdup_printf("protocols: "
- "Unknown protocol: %s",
- set->protocols_split[i]);
- return FALSE;
- }
- }
return TRUE;
}
/* </settings checks> */
More information about the dovecot-cvs
mailing list