Mercurial > dovecot > core-2.2
annotate src/indexer/indexer.c @ 22656:1789bf2a1e01
director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0
The reset command would just hang in that case. doveadm would never have
sent this, so this is just an extra sanity check.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 05 Nov 2017 23:51:56 +0200 |
parents | e74e1269959f |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
19552
diff
changeset
|
1 /* Copyright (c) 2011-2017 Dovecot authors, see the included COPYING file */ |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
21498
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
4 #include "ioloop.h" |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "restrict-access.h" |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
6 #include "process-title.h" |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "master-service.h" |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
8 #include "master-service-settings.h" |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "indexer-client.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "indexer-queue.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "worker-pool.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include "worker-connection.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 struct worker_request { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 struct worker_connection *conn; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 struct indexer_request *request; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 }; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
19 static const struct master_service_settings *set; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 static struct indexer_queue *queue; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 static struct worker_pool *worker_pool; |
21498
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
22 static struct timeout *to_send_more; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
24 void indexer_refresh_proctitle(void) |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
25 { |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
26 if (!set->verbose_proctitle) |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
27 return; |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
28 |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
29 process_title_set(t_strdup_printf("[%u clients, %u requests]", |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
30 indexer_clients_get_count(), |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
31 indexer_queue_count(queue))); |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
32 } |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
33 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 static bool idle_die(void) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 { |
13235
221d159befec
indexer: Don't die on "idle kill signal" if workers are still busy.
Timo Sirainen <tss@iki.fi>
parents:
13206
diff
changeset
|
36 return indexer_queue_is_empty(queue) && |
221d159befec
indexer: Don't die on "idle kill signal" if workers are still busy.
Timo Sirainen <tss@iki.fi>
parents:
13206
diff
changeset
|
37 !worker_pool_have_busy_connections(worker_pool); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 static void client_connected(struct master_service_connection *conn) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 master_service_client_connection_accept(conn); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 (void)indexer_client_create(conn->fd, queue); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 static void worker_send_request(struct worker_connection *conn, |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 struct indexer_request *request) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 struct worker_request *wrequest; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 wrequest = i_new(struct worker_request, 1); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 wrequest->conn = conn; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 wrequest->request = request; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 |
18824
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18823
diff
changeset
|
55 indexer_queue_request_work(request); |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13235
diff
changeset
|
56 worker_connection_request(conn, request, wrequest); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
18823
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
59 static void queue_try_send_more(struct indexer_queue *queue) |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 struct worker_connection *conn; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 struct indexer_request *request; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 |
21498
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
64 if (to_send_more != NULL) |
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
65 timeout_remove(&to_send_more); |
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
66 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 while ((request = indexer_queue_request_peek(queue)) != NULL) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 conn = worker_pool_find_username_connection(worker_pool, |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 request->username); |
18823
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
70 if (conn != NULL) { |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
71 /* there is already a worker handling this user. |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
72 it must be the one doing the indexing. use the same |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
73 connection for sending this next request. */ |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
74 } else { |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
75 /* try to find an empty worker */ |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
76 if (!worker_pool_get_connection(worker_pool, &conn)) |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
77 break; |
a5d5d2dd6aea
indexer: Try to always flush as many requests from queue as possible.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
78 } |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 indexer_queue_request_remove(queue); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 worker_send_request(conn, request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 static void queue_listen_callback(struct indexer_queue *queue) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 queue_try_send_more(queue); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 static void worker_status_callback(int percentage, void *context) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 struct worker_request *request = context; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 if (percentage >= 0 && percentage < 100) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 indexer_queue_request_status(queue, request->request, |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 percentage); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 indexer_queue_request_finish(queue, &request->request, |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 percentage == 100); |
13206
513ec6bf3fab
indexer: Deinitialize without crashing when there are requests.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
101 if (worker_pool != NULL) /* not in deinit */ |
513ec6bf3fab
indexer: Deinitialize without crashing when there are requests.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
102 worker_pool_release_connection(worker_pool, request->conn); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 i_free(request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 /* if this was the last request for the connection, we can send more |
21498
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
106 through it. delay it a bit, since we may be coming here from |
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
107 worker_connection_disconnect() and we want to finish it up. */ |
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
108 if (to_send_more == NULL) |
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
109 to_send_more = timeout_add_short(0, queue_try_send_more, queue); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 int main(int argc, char *argv[]) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 { |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
114 const char *error; |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
115 |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
116 master_service = master_service_init("indexer", 0, &argc, &argv, ""); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 if (master_getopt(master_service) > 0) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 return FATAL_DEFAULT; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 |
13193
63ce98c611e4
indexer: Read configuration earlier while we still have privileges.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
120 if (master_service_settings_read_simple(master_service, NULL, |
63ce98c611e4
indexer: Read configuration earlier while we still have privileges.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
121 &error) < 0) |
63ce98c611e4
indexer: Read configuration earlier while we still have privileges.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
122 i_fatal("Error reading configuration: %s", error); |
63ce98c611e4
indexer: Read configuration earlier while we still have privileges.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
123 set = master_service_settings_get(master_service); |
63ce98c611e4
indexer: Read configuration earlier while we still have privileges.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
124 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 master_service_init_log(master_service, "indexer: "); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 restrict_access_by_env(NULL, FALSE); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 restrict_access_allow_coredumps(TRUE); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 master_service_set_idle_die_callback(master_service, idle_die); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 |
13206
513ec6bf3fab
indexer: Deinitialize without crashing when there are requests.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
130 queue = indexer_queue_init(indexer_client_status_callback); |
513ec6bf3fab
indexer: Deinitialize without crashing when there are requests.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
131 indexer_queue_set_listen_callback(queue, queue_listen_callback); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 worker_pool = worker_pool_init("indexer-worker", |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 worker_status_callback); |
16508
754d244b8249
Call master_service_init_finish() only after all of the initialization is done.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
134 master_service_init_finish(master_service); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 master_service_run(master_service, client_connected); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 indexer_queue_cancel_all(queue); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 indexer_clients_destroy_all(); |
13206
513ec6bf3fab
indexer: Deinitialize without crashing when there are requests.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
140 worker_pool_deinit(&worker_pool); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 indexer_queue_deinit(&queue); |
21498
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
142 if (to_send_more != NULL) |
e74e1269959f
indexer: Don't send more requests directly from worker status callback
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
143 timeout_remove(&to_send_more); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 master_service_deinit(&master_service); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 return 0; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 } |