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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }