Mercurial > dovecot > core-2.2
annotate src/indexer/indexer-client.c @ 22656:1789bf2a1e01
director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0
The reset command would just hang in that case. doveadm would never have
sent this, so this is just an extra sanity check.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 05 Nov 2017 23:51:56 +0200 |
parents | 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" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "llist.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "istream.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "ostream.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "strescape.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "master-service.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #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
|
10 #include "indexer-client.h" |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include <unistd.h> |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 #define MAX_INBUF_SIZE (1024*64) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 #define INDEXER_CLIENT_PROTOCOL_MAJOR_VERSION 1 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 #define INDEXER_CLIENT_PROTOCOL_MINOR_VERSION 0 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 struct indexer_client { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 struct indexer_client *prev, *next; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 int refcount; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 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
|
24 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 int fd; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 struct istream *input; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 struct ostream *output; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 struct io *io; |
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 unsigned int version_received:1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 unsigned int handshaked:1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 unsigned int destroyed:1; |
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 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 struct indexer_client_request { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 struct indexer_client *client; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 unsigned int tag; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 }; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 |
17402
48d651b2e82a
various - 'static' sparse cleanup
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
40 static struct indexer_client *clients = NULL; |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
41 static unsigned int clients_count = 0; |
13084
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 static void indexer_client_destroy(struct indexer_client *client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 static void indexer_client_ref(struct indexer_client *client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 static void indexer_client_unref(struct indexer_client *client); |
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 static const char *const* |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 indexer_client_next_line(struct indexer_client *client) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 const char *line; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 char **args; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 unsigned int i; |
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 line = i_stream_next_line(client->input); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 if (line == NULL) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 return NULL; |
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 args = p_strsplit(pool_datastack_create(), line, "\t"); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 for (i = 0; args[i] != NULL; i++) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 args[i] = str_tabunescape(args[i]); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 return (void *)args; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 static int |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 indexer_client_request_queue(struct indexer_client *client, bool append, |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 const char *const *args, const char **error_r) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 struct indexer_client_request *ctx = NULL; |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
69 const char *session_id = NULL; |
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
|
70 unsigned int tag, 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
|
71 |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
72 /* <tag> <user> <mailbox> [<max_recent_msgs> [<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
|
73 if (str_array_length(args) < 3) { |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 *error_r = "Wrong parameter count"; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 return -1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 if (str_to_uint(args[0], &tag) < 0) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 *error_r = "Invalid tag"; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 return -1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 } |
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
|
81 if (args[3] == NULL) |
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
|
82 max_recent_msgs = 0; |
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
|
83 else if (str_to_uint(args[3], &max_recent_msgs) < 0) { |
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
|
84 *error_r = "Invalid 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
|
85 return -1; |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
86 } else { |
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
87 session_id = args[4]; |
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
|
88 } |
13084
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 if (tag != 0) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 ctx = i_new(struct indexer_client_request, 1); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 ctx->client = client; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 ctx->tag = tag; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 indexer_client_ref(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 |
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
|
97 indexer_queue_append(client->queue, append, args[1], args[2], |
19170
250d85e784d1
fts: Send session ID to indexer and indexer-worker for logging purposes.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
98 session_id, max_recent_msgs, ctx); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
99 o_stream_nsend_str(client->output, t_strdup_printf("%u\tOK\n", tag)); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 return 0; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 static int |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
104 indexer_client_request_optimize(struct indexer_client *client, |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
105 const char *const *args, const char **error_r) |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
106 { |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
107 struct indexer_client_request *ctx = NULL; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
108 unsigned int tag; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
109 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
110 /* <tag> <user> <mailbox> */ |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
111 if (str_array_length(args) != 3) { |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
112 *error_r = "Wrong parameter count"; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
113 return -1; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
114 } |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
115 if (str_to_uint(args[0], &tag) < 0) { |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
116 *error_r = "Invalid tag"; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
117 return -1; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
118 } |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
119 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
120 if (tag != 0) { |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
121 ctx = i_new(struct indexer_client_request, 1); |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
122 ctx->client = client; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
123 ctx->tag = tag; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
124 indexer_client_ref(client); |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
125 } |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
126 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
127 indexer_queue_append_optimize(client->queue, args[1], args[2], ctx); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
128 o_stream_nsend_str(client->output, t_strdup_printf("%u\tOK\n", tag)); |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
129 return 0; |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
130 } |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
131 |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
132 static int |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 indexer_client_request(struct indexer_client *client, |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 const char *const *args, const char **error_r) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 const char *cmd = args[0]; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 args++; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 if (strcmp(cmd, "APPEND") == 0) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 return indexer_client_request_queue(client, TRUE, args, error_r); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 else if (strcmp(cmd, "PREPEND") == 0) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 return indexer_client_request_queue(client, FALSE, args, error_r); |
13261
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
144 else if (strcmp(cmd, "OPTIMIZE") == 0) |
ad429a8311f4
indexer: Added OPTIMIZE command to optimize fts index.
Timo Sirainen <tss@iki.fi>
parents:
13199
diff
changeset
|
145 return indexer_client_request_optimize(client, args, error_r); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 else { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 *error_r = t_strconcat("Unknown command: ", cmd, NULL); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 return -1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 |
14921
d3db2ba15d00
Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents:
14681
diff
changeset
|
152 static void indexer_client_input(struct indexer_client *client) |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 const char *line, *const *args, *error; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 switch (i_stream_read(client->input)) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 case -2: |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 i_error("BUG: Client connection sent too much data"); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 indexer_client_destroy(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 case -1: |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 indexer_client_destroy(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 } |
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 if (!client->version_received) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 if ((line = i_stream_next_line(client->input)) == NULL) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 return; |
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 if (!version_string_verify(line, "indexer", |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 INDEXER_CLIENT_PROTOCOL_MAJOR_VERSION)) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 i_error("Client not compatible with this server " |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 "(mixed old and new binaries?)"); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 indexer_client_destroy(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
176 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 client->version_received = TRUE; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 while ((args = indexer_client_next_line(client)) != NULL) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 if (args[0] != NULL) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 if (indexer_client_request(client, args, &error) < 0) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 i_error("Client input error: %s", error); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 indexer_client_destroy(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 break; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
187 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
188 } |
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 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
191 void indexer_client_status_callback(int percentage, void *context) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
192 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
193 struct indexer_client_request *ctx = context; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
194 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
195 T_BEGIN { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
196 o_stream_nsend_str(ctx->client->output, |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 t_strdup_printf("%u\t%d\n", ctx->tag, percentage)); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
198 } T_END; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 if (percentage < 0 || percentage == 100) { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 indexer_client_unref(ctx->client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 i_free(ctx); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 struct indexer_client * |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 indexer_client_create(int fd, 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
|
207 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 struct indexer_client *client; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 client = i_new(struct indexer_client, 1); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
211 client->refcount = 1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
212 client->queue = queue; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
213 client->fd = fd; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
214 client->input = i_stream_create_fd(fd, MAX_INBUF_SIZE, FALSE); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
215 client->output = o_stream_create_fd(fd, (size_t)-1, FALSE); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
216 o_stream_set_no_error_handling(client->output, TRUE); |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
217 client->io = io_add(fd, IO_READ, indexer_client_input, client); |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
218 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
219 DLLIST_PREPEND(&clients, client); |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
220 clients_count++; |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
221 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
|
222 return client; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
223 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
224 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
225 static void indexer_client_destroy(struct indexer_client *client) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
226 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
227 if (client->destroyed) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
228 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
229 client->destroyed = TRUE; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
230 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
231 DLLIST_REMOVE(&clients, client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
232 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
233 io_remove(&client->io); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
234 i_stream_close(client->input); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
235 o_stream_close(client->output); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
236 if (close(client->fd) < 0) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
237 i_error("close(client) failed: %m"); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
238 client->fd = -1; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 indexer_client_unref(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
241 clients_count--; |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
242 master_service_client_connection_destroyed(master_service); |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
243 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
|
244 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
245 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 static void indexer_client_ref(struct indexer_client *client) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
248 i_assert(client->refcount > 0); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
250 client->refcount++; |
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 |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
253 static void indexer_client_unref(struct indexer_client *client) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
254 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
255 i_assert(client->refcount > 0); |
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 if (--client->refcount > 0) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
258 return; |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
259 i_stream_destroy(&client->input); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
260 o_stream_destroy(&client->output); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
261 i_free(client); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
262 } |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
263 |
13192
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
264 unsigned int indexer_clients_get_count(void) |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
265 { |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
266 return clients_count; |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
267 } |
af8c5e56d098
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
Timo Sirainen <tss@iki.fi>
parents:
13095
diff
changeset
|
268 |
13084
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
269 void indexer_clients_destroy_all(void) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
270 { |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
271 while (clients != NULL) |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
272 indexer_client_destroy(clients); |
0faaceb2f83c
Added "indexer" service, which uses worker processes to perform queued mailbox indexing.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
273 } |