Mercurial > dovecot > core-2.2
annotate src/indexer/indexer-queue.c @ 22658:ff99e7bff132
director: Allow proxy-notify to optionally be a socket
Dovecot isn't using this currently, but it can be useful if external
services want to send notifications.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 27 Oct 2017 16:24:54 +0300 |
parents | 2e2563132d5f |
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" |
18822
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
4 #include "array.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 "llist.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "hash.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #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
|
8 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 struct indexer_queue { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 indexer_status_callback_t *callback; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 void (*listen_callback)(struct indexer_queue *); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 /* username+mailbox -> indexer_request */ |
14918
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
14 HASH_TABLE(struct indexer_request *, struct indexer_request *) requests; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 struct indexer_request *head, *tail; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 }; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 |
14918
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
18 static unsigned int |
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
19 indexer_request_hash(const struct indexer_request *request) |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 return str_hash(request->username) ^ str_hash(request->mailbox); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
14918
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
24 static int indexer_request_cmp(const struct indexer_request *r1, |
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
25 const struct indexer_request *r2) |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 return strcmp(r1->username, r2->username) == 0 && |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 strcmp(r1->mailbox, r2->mailbox) == 0 ? 0 : 1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 struct indexer_queue * |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 indexer_queue_init(indexer_status_callback_t *callback) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 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
|
35 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 queue = i_new(struct indexer_queue, 1); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 queue->callback = callback; |
14918
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
38 hash_table_create(&queue->requests, default_pool, 0, |
8eae4e205c82
Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents:
14917
diff
changeset
|
39 indexer_request_hash, indexer_request_cmp); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 return queue; |
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 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 void indexer_queue_deinit(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
|
44 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 struct indexer_queue *queue = *_queue; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 *_queue = NULL; |
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 i_assert(indexer_queue_is_empty(queue)); |
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 hash_table_destroy(&queue->requests); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 i_free(queue); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 void indexer_queue_set_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
|
56 void (*callback)(struct indexer_queue *)) |
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 queue->listen_callback = callback; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 } |
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 static struct indexer_request * |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 indexer_queue_lookup(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
|
63 const char *username, const char *mailbox) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 struct indexer_request lookup_request; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 lookup_request.username = (void *)username; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 lookup_request.mailbox = (void *)mailbox; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 return hash_table_lookup(queue->requests, &lookup_request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 static void request_add_context(struct indexer_request *request, void *context) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 if (context == NULL) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 |
18822
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
77 if (!array_is_created(&request->contexts)) |
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
78 i_array_init(&request->contexts, 2); |
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
79 array_append(&request->contexts, &context, 1); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
82 static struct indexer_request * |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
83 indexer_queue_append_request(struct indexer_queue *queue, bool append, |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
84 const char *username, const char *mailbox, |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
85 const char *session_id, |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
86 unsigned int max_recent_msgs, void *context) |
13084
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 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
|
89 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 request = indexer_queue_lookup(queue, username, mailbox); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 if (request == NULL) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 request = i_new(struct indexer_request, 1); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 request->username = i_strdup(username); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 request->mailbox = i_strdup(mailbox); |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
95 request->session_id = i_strdup(session_id); |
13199
8dcb7c7f66d5
doveadm index: Added -n parameter to specify max number of recent msgs to perform indexing.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
96 request->max_recent_msgs = max_recent_msgs; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 request_add_context(request, context); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 hash_table_insert(queue->requests, request, request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 } else { |
13199
8dcb7c7f66d5
doveadm index: Added -n parameter to specify max number of recent msgs to perform indexing.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
100 if (request->max_recent_msgs > max_recent_msgs) |
8dcb7c7f66d5
doveadm index: Added -n parameter to specify max number of recent msgs to perform indexing.
Timo Sirainen <tss@iki.fi>
parents:
13192
diff
changeset
|
101 request->max_recent_msgs = max_recent_msgs; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 request_add_context(request, context); |
18824
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
103 if (request->working) { |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
104 /* we're already indexing this mailbox. */ |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
105 if (append) |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
106 request->reindex_tail = TRUE; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
107 else |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
108 request->reindex_head = TRUE; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
109 return request; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
110 } |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 if (append) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 /* keep the request in its old position */ |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
113 return request; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 /* move request to beginning of the queue */ |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 DLLIST2_REMOVE(&queue->head, &queue->tail, request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 if (append) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 DLLIST2_APPEND(&queue->head, &queue->tail, request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 else |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 DLLIST2_PREPEND(&queue->head, &queue->tail, request); |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
123 return request; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
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 |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
126 static void indexer_queue_append_finish(struct indexer_queue *queue) |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
127 { |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 if (queue->listen_callback != NULL) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 queue->listen_callback(queue); |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
130 indexer_refresh_proctitle(); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
133 void indexer_queue_append(struct indexer_queue *queue, bool append, |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
134 const char *username, const char *mailbox, |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
135 const char *session_id, unsigned int max_recent_msgs, |
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
136 void *context) |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
137 { |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
138 struct indexer_request *request; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
139 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
140 request = indexer_queue_append_request(queue, append, username, mailbox, |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
141 session_id, max_recent_msgs, |
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
142 context); |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
143 request->index = TRUE; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
144 indexer_queue_append_finish(queue); |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
145 } |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
146 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
147 void indexer_queue_append_optimize(struct indexer_queue *queue, |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
148 const char *username, const char *mailbox, |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
149 void *context) |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
150 { |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
151 struct indexer_request *request; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
152 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
153 request = indexer_queue_append_request(queue, TRUE, username, mailbox, |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18890
diff
changeset
|
154 NULL, 0, context); |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
155 request->optimize = TRUE; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
156 indexer_queue_append_finish(queue); |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
157 } |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
158 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 struct indexer_request *indexer_queue_request_peek(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
|
160 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 return queue->head; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 void indexer_queue_request_remove(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
|
165 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 struct indexer_request *request = queue->head; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 i_assert(request != NULL); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 DLLIST2_REMOVE(&queue->head, &queue->tail, request); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 static void indexer_queue_request_status_int(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
|
174 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
|
175 int percentage) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
176 { |
18822
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
177 void *const *contextp; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 unsigned int i; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 |
18824
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
180 for (i = 0; i < request->working_context_idx; i++) { |
18822
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
181 contextp = array_idx(&request->contexts, i); |
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
182 queue->callback(percentage, *contextp); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 void indexer_queue_request_status(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
|
187 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
|
188 int percentage) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
189 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
190 i_assert(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
|
191 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
192 indexer_queue_request_status_int(queue, request, percentage); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
193 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
194 |
18824
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
195 void indexer_queue_request_work(struct indexer_request *request) |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
196 { |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
197 request->working = TRUE; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
198 request->working_context_idx = |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
199 !array_is_created(&request->contexts) ? 0 : |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
200 array_count(&request->contexts); |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
201 } |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
202 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 void indexer_queue_request_finish(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
|
204 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
|
205 bool success) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
207 struct indexer_request *request = *_request; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 *_request = NULL; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
211 indexer_queue_request_status_int(queue, request, success ? 100 : -1); |
18824
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
212 |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
213 if (request->reindex_head || request->reindex_tail) { |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
214 i_assert(request->working); |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
215 request->working = FALSE; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
216 request->reindex_head = FALSE; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
217 request->reindex_tail = FALSE; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
218 if (request->working_context_idx > 0) { |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
219 array_delete(&request->contexts, 0, |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
220 request->working_context_idx); |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
221 } |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
222 if (request->reindex_head) |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
223 DLLIST2_PREPEND(&queue->head, &queue->tail, request); |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
224 else |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
225 DLLIST2_APPEND(&queue->head, &queue->tail, request); |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
226 return; |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
227 } |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
228 |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
229 hash_table_remove(queue->requests, request); |
18822
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
230 if (array_is_created(&request->contexts)) |
165564cc0e0e
indexer: Use array.h API instead of writing our own.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
231 array_free(&request->contexts); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
232 i_free(request->username); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
233 i_free(request->mailbox); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
234 i_free(request); |
18824
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
235 |
2f5799572a2f
indexer: Improved handling multiple indexing requests to the same mailbox.
Timo Sirainen <tss@iki.fi>
parents:
18822
diff
changeset
|
236 indexer_refresh_proctitle(); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
237 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
238 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 void indexer_queue_cancel_all(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
|
240 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
241 struct indexer_request *request; |
18890
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
242 struct hash_iterate_context *iter; |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
243 |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
244 /* remove all reindex-markers so when the current requests finish |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
245 (or are cancelled) we don't try to retry them (especially during |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
246 deinit where it crashes) */ |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
247 iter = hash_table_iterate_init(queue->requests); |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
248 while (hash_table_iterate(iter, queue->requests, &request, &request)) |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
249 request->reindex_head = request->reindex_tail = FALSE; |
85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
Timo Sirainen <tss@iki.fi>
parents:
18824
diff
changeset
|
250 hash_table_iterate_deinit(&iter); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
251 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 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
|
253 indexer_queue_request_remove(queue); |
17409
4f90011e9823
indexer: fix indexer_queue_cancel_all behaviour
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
254 indexer_queue_request_finish(queue, &request, FALSE); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
255 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
256 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
257 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
258 bool indexer_queue_is_empty(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
|
259 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
260 return queue->head == NULL; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
261 } |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
262 |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
263 unsigned int indexer_queue_count(struct indexer_queue *queue) |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
264 { |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
265 return hash_table_count(queue->requests); |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13084
diff
changeset
|
266 } |