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
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"
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 }