annotate src/master/service.h @ 23017:c1d36f2575c7 default tip

lib-imap: Fix "Don't accept strings with NULs" cherry-pick
author Timo Sirainen <timo.sirainen@open-xchange.com>
date Thu, 29 Aug 2019 09:55:25 +0300
parents 9d3e4542c309
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef SERVICE_H
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define SERVICE_H
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
15187
02451e967a06 Renamed network.[ch] to net.[ch].
Timo Sirainen <tss@iki.fi>
parents: 14923
diff changeset
4 #include "net.h"
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
5 #include "master-settings.h"
9235
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9214
diff changeset
6
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 /* If a service process doesn't send its first status notification in
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 this many seconds, kill the process */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #define SERVICE_FIRST_STATUS_TIMEOUT_SECS 30
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
14015
c553725d57bb master: Make service throttling seconds incremental, starting from 2 secs.
Timo Sirainen <tss@iki.fi>
parents: 14014
diff changeset
11 #define SERVICE_STARTUP_FAILURE_THROTTLE_MIN_SECS 2
c553725d57bb master: Make service throttling seconds incremental, starting from 2 secs.
Timo Sirainen <tss@iki.fi>
parents: 14014
diff changeset
12 #define SERVICE_STARTUP_FAILURE_THROTTLE_MAX_SECS 60
c553725d57bb master: Make service throttling seconds incremental, starting from 2 secs.
Timo Sirainen <tss@iki.fi>
parents: 14014
diff changeset
13
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 enum service_listener_type {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 SERVICE_LISTENER_UNIX,
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 SERVICE_LISTENER_FIFO,
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 SERVICE_LISTENER_INET
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 };
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 struct service_listener {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 struct service *service;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 enum service_listener_type type;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 int fd; /* may be -1 */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 struct io *io;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
13877
cdf2c63ece6a Listener names are now in struct master_service_connection.name
Timo Sirainen <tss@iki.fi>
parents: 13662
diff changeset
27 const char *name;
10023
f69fda5d7af5 master: Added back "listen" setting, which is the default address for inet_listeners.
Timo Sirainen <tss@iki.fi>
parents: 10008
diff changeset
28 const char *inet_address;
f69fda5d7af5 master: Added back "listen" setting, which is the default address for inet_listeners.
Timo Sirainen <tss@iki.fi>
parents: 10008
diff changeset
29
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 union {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 struct {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 const struct file_listener_settings *set;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 uid_t uid;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 gid_t gid;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 } fileset;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 struct {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 const struct inet_listener_settings *set;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 struct ip_addr ip;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 } inetset;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 } set;
16823
a991a0547daa master: Added reuse_port setting to inet_listeners, which enables SO_REUSEPORT if available.
Timo Sirainen <tss@iki.fi>
parents: 16705
diff changeset
41
a991a0547daa master: Added reuse_port setting to inet_listeners, which enables SO_REUSEPORT if available.
Timo Sirainen <tss@iki.fi>
parents: 16705
diff changeset
42 bool reuse_port;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 };
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 struct service {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 struct service_list *list;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 enum service_type type;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 const struct service_settings *set;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 const char *config_file_path;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 const char *executable;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 uid_t uid;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 gid_t gid;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 gid_t privileged_gid;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 const char *extra_gids; /* comma-separated list */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 /* all listeners, even those that aren't currently listening */
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
60 ARRAY(struct service_listener *) listeners;
10099
fea8122e1deb master: Keep service's processes in an easily accessible linked list.
Timo Sirainen <tss@iki.fi>
parents: 10023
diff changeset
61 /* linked list of all processes belonging to this service */
fea8122e1deb master: Keep service's processes in an easily accessible linked list.
Timo Sirainen <tss@iki.fi>
parents: 10023
diff changeset
62 struct service_process *processes;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 /* number of processes currently created for this service */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 unsigned int process_count;
9907
3265d6e98c46 master: Minor cleanups.
Timo Sirainen <tss@iki.fi>
parents: 9876
diff changeset
66 /* number of processes currently accepting new clients */
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 unsigned int process_avail;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 /* max number of processes allowed */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 unsigned int process_limit;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70
9907
3265d6e98c46 master: Minor cleanups.
Timo Sirainen <tss@iki.fi>
parents: 9876
diff changeset
71 /* Maximum number of client connections a process can handle. */
9840
2dc1e03cad11 master: Fixes to checks using service's client_limit.
Timo Sirainen <tss@iki.fi>
parents: 9794
diff changeset
72 unsigned int client_limit;
11631
d41694c931d0 Added support for per-service idle kill timeout.
Timo Sirainen <tss@iki.fi>
parents: 10454
diff changeset
73 /* Kill idling processes after this many seconds. */
d41694c931d0 Added support for per-service idle kill timeout.
Timo Sirainen <tss@iki.fi>
parents: 10454
diff changeset
74 unsigned int idle_kill;
10008
a15182f41f30 master: Added default_vsz_limit setting, which defaults to 256 MB.
Timo Sirainen <tss@iki.fi>
parents: 9954
diff changeset
75 /* set->vsz_limit or set->master_set->default_client_limit */
10281
4b663b9e63af Added "size" setting type, which supports B/k/M/G/T suffixes.
Timo Sirainen <tss@iki.fi>
parents: 10200
diff changeset
76 uoff_t vsz_limit;
9840
2dc1e03cad11 master: Fixes to checks using service's client_limit.
Timo Sirainen <tss@iki.fi>
parents: 9794
diff changeset
77
9214
7def7fa61d68 master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
78 /* log process pipe file descriptors. */
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 int log_fd[2];
9214
7def7fa61d68 master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
80 /* fd that log process sees log_fd[0] as. can be used to identify
7def7fa61d68 master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
81 service name when sending commands via master_log_fd. */
7def7fa61d68 master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
82 int log_process_internal_fd;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 /* status report pipe file descriptors */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 int status_fd[2];
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 struct io *io_status;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87
20450
05de0baac9cb master: Added support for stopping specific services.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 16823
diff changeset
88 int master_dead_pipe_fd[2];
05de0baac9cb master: Added support for stopping specific services.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 16823
diff changeset
89
14015
c553725d57bb master: Make service throttling seconds incremental, starting from 2 secs.
Timo Sirainen <tss@iki.fi>
parents: 14014
diff changeset
90 unsigned int throttle_secs;
14014
300736775b89 master: If 10 service processes die within a second with no successes inbetween, throttle the service.
Timo Sirainen <tss@iki.fi>
parents: 13877
diff changeset
91 time_t exit_failure_last;
300736775b89 master: If 10 service processes die within a second with no successes inbetween, throttle the service.
Timo Sirainen <tss@iki.fi>
parents: 13877
diff changeset
92 unsigned int exit_failures_in_sec;
300736775b89 master: If 10 service processes die within a second with no successes inbetween, throttle the service.
Timo Sirainen <tss@iki.fi>
parents: 13877
diff changeset
93
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
94 /* Login process's notify fd. We change its seek position to
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
95 communicate state to login processes. */
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
96 int login_notify_fd;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
97 time_t last_login_notify_time;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
98 struct timeout *to_login_notify;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
99
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 /* if a process fails before servicing its first request, assume it's
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 broken and start throtting new process creations */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 struct timeout *to_throttle;
13641
fddbb26400d0 master: When process_limit fills up, wait 10s before closing pending connections.
Timo Sirainen <tss@iki.fi>
parents: 12819
diff changeset
103 /* when process_limit is reached, wait for a while until we actually
fddbb26400d0 master: When process_limit fills up, wait 10s before closing pending connections.
Timo Sirainen <tss@iki.fi>
parents: 12819
diff changeset
104 start dropping pending connections */
fddbb26400d0 master: When process_limit fills up, wait 10s before closing pending connections.
Timo Sirainen <tss@iki.fi>
parents: 12819
diff changeset
105 struct timeout *to_drop;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106
16705
a3f0aca52d6f master: Pre-fork processes only while master doesn't have more important things to do.
Timo Sirainen <tss@iki.fi>
parents: 15187
diff changeset
107 /* prefork processes up to process_min_avail if there's time */
a3f0aca52d6f master: Pre-fork processes only while master doesn't have more important things to do.
Timo Sirainen <tss@iki.fi>
parents: 15187
diff changeset
108 struct timeout *to_prefork;
a3f0aca52d6f master: Pre-fork processes only while master doesn't have more important things to do.
Timo Sirainen <tss@iki.fi>
parents: 15187
diff changeset
109 unsigned int prefork_counter;
a3f0aca52d6f master: Pre-fork processes only while master doesn't have more important things to do.
Timo Sirainen <tss@iki.fi>
parents: 15187
diff changeset
110
9923
77228b5431e1 *-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents: 9913
diff changeset
111 /* Last time a "dropping client connections" warning was logged */
77228b5431e1 *-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents: 9913
diff changeset
112 time_t last_drop_warning;
77228b5431e1 *-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents: 9913
diff changeset
113
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 /* all processes are in use and new connections are coming */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 unsigned int listen_pending:1;
9496
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
116 /* service is currently listening for new connections */
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
117 unsigned int listening:1;
9913
e819f6dfe5f4 dovecot -p (ask ssl key password from command line) works again.
Timo Sirainen <tss@iki.fi>
parents: 9907
diff changeset
118 /* TRUE if service has at least one inet_listener */
e819f6dfe5f4 dovecot -p (ask ssl key password from command line) works again.
Timo Sirainen <tss@iki.fi>
parents: 9907
diff changeset
119 unsigned int have_inet_listeners:1;
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
120 /* service_login_notify()'s last notification state */
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
121 unsigned int last_login_full_notify:1;
14016
85a9b5236b6c master: Throttle rapid exit failures only if there have never been any exit successes.
Timo Sirainen <tss@iki.fi>
parents: 14015
diff changeset
122 /* service has exited at least once with exit code 0 */
85a9b5236b6c master: Throttle rapid exit failures only if there have never been any exit successes.
Timo Sirainen <tss@iki.fi>
parents: 14015
diff changeset
123 unsigned int have_successful_exits:1;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 };
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 struct service_list {
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 pool_t pool;
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
128 pool_t set_pool;
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
129 int refcount;
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
130 struct timeout *to_kill;
16705
a3f0aca52d6f master: Pre-fork processes only while master doesn't have more important things to do.
Timo Sirainen <tss@iki.fi>
parents: 15187
diff changeset
131 unsigned int fork_counter;
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
132
11968
351948b4dc6c master: Added service type=startup for starting one service process at startup.
Timo Sirainen <tss@iki.fi>
parents: 11631
diff changeset
133 const struct master_settings *set;
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
134 const struct master_service_settings *service_set;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 struct service *config;
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 struct service *log;
10454
802b9ebe79e6 anvil: After master gets a SIGHUP, start logging via new log process.
Timo Sirainen <tss@iki.fi>
parents: 10281
diff changeset
138 struct service *anvil;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139
20452
9d3e4542c309 master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20450
diff changeset
140 struct file_listener_settings master_listener_set;
9d3e4542c309 master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20450
diff changeset
141 struct io *io_master;
9d3e4542c309 master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20450
diff changeset
142 int master_fd;
9d3e4542c309 master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20450
diff changeset
143
9214
7def7fa61d68 master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
144 /* nonblocking log fds usd by master */
7def7fa61d68 master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
145 int master_log_fd[2];
9235
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9214
diff changeset
146 struct service_process_notify *log_byes;
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9214
diff changeset
147
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
148 ARRAY(struct service *) services;
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
149
13662
6894298ae5fd master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents: 13641
diff changeset
150 unsigned int destroying:1;
9876
31a283729295 master: Several fixes to handling SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 9840
diff changeset
151 unsigned int destroyed:1;
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
152 unsigned int sigterm_sent:1;
9876
31a283729295 master: Several fixes to handling SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 9840
diff changeset
153 unsigned int sigterm_sent_to_log:1;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 };
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155
14923
96fd2c3bf932 Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents: 14920
diff changeset
156 HASH_TABLE_DEFINE_TYPE(pid_process, void *, struct service_process *);
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14016
diff changeset
157 extern HASH_TABLE_TYPE(pid_process) service_pids;
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
158
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 /* Create all services from settings */
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
160 int services_create(const struct master_settings *set,
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
161 struct service_list **services_r, const char **error_r);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 /* Destroy services */
13662
6894298ae5fd master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents: 13641
diff changeset
164 void services_destroy(struct service_list *service_list, bool wait);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
166 void service_list_ref(struct service_list *service_list);
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
167 void service_list_unref(struct service_list *service_list);
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
168
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
169 /* Return path to configuration process socket. */
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
170 const char *services_get_config_socket_path(struct service_list *service_list);
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
171
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 /* Send a signal to all processes in a given service */
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 void service_signal(struct service *service, int signo);
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
174 /* Notify all processes (if necessary) that no more connections can be handled
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
175 by the service without killing existing connections (TRUE) or that they
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
176 can be (FALSE). */
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10099
diff changeset
177 void service_login_notify(struct service *service, bool all_processes_full);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178
9496
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
179 /* Prevent service from launching new processes for a while. */
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
180 void service_throttle(struct service *service, unsigned int secs);
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
181 /* Time moved backwards. Throttle services that care about time. */
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
182 void services_throttle_time_sensitives(struct service_list *list,
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
183 unsigned int secs);
4fd624e60da1 master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents: 9235
diff changeset
184
10200
01676e67cf38 master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
185 /* Find service by name. */
9876
31a283729295 master: Several fixes to handling SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 9840
diff changeset
186 struct service *
31a283729295 master: Several fixes to handling SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 9840
diff changeset
187 service_lookup(struct service_list *service_list, const char *name);
10200
01676e67cf38 master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
188 /* Find service by type */
01676e67cf38 master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
189 struct service *
01676e67cf38 master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
190 service_lookup_type(struct service_list *service_list, enum service_type type);
9876
31a283729295 master: Several fixes to handling SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents: 9840
diff changeset
191
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9159
diff changeset
192 void service_error(struct service *service, const char *format, ...)
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9159
diff changeset
193 ATTR_FORMAT(2, 3);
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9159
diff changeset
194
9794
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
195 void service_pids_init(void);
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
196 void service_pids_deinit(void);
da330a07e45c master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents: 9496
diff changeset
197
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
198 #endif