Mercurial > dovecot > core-2.2
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 |
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 | 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 | 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 |