annotate src/lib-storage/index/index-sort-private.h @ 21604:fb8ef6e2c2fe

lib-storage: Add mail_sort_max_read_count setting. This controls how many slow mail accesses sorting can perform before it fails: a NO [LIMIT] Requested sort would have taken too long The SORT reply is still returned, but it's likely not correct.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 17 Feb 2017 19:07:53 +0200
parents a90f51ba2e9c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7564
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef INDEX_SORT_PRIVATE_H
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define INDEX_SORT_PRIVATE_H
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "index-sort.h"
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 struct mail_search_sort_program {
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 struct mailbox_transaction_context *t;
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 enum mail_sort_type sort_program[MAX_SORT_PROGRAM_SIZE];
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 struct mail *temp_mail;
21604
fb8ef6e2c2fe lib-storage: Add mail_sort_max_read_count setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21599
diff changeset
10 unsigned int slow_mails_left;
7564
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 void (*sort_list_add)(struct mail_search_sort_program *program,
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 struct mail *mail);
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 void (*sort_list_finish)(struct mail_search_sort_program *program);
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 void *context;
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 ARRAY_TYPE(uint32_t) seqs;
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 unsigned int iter_idx;
21599
a90f51ba2e9c lib-storage: Fix error handling when sorting mails.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 7859
diff changeset
19
a90f51ba2e9c lib-storage: Fix error handling when sorting mails.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 7859
diff changeset
20 bool failed;
7564
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 };
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
21599
a90f51ba2e9c lib-storage: Fix error handling when sorting mails.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 7859
diff changeset
23 /* Returns 1 on success, 0 if mail is already expunged, -1 on other errors. */
21604
fb8ef6e2c2fe lib-storage: Add mail_sort_max_read_count setting.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21599
diff changeset
24 int index_sort_header_get(struct mail_search_sort_program *program, uint32_t seq,
7564
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 enum mail_sort_type sort_type, string_t *dest);
21599
a90f51ba2e9c lib-storage: Fix error handling when sorting mails.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 7859
diff changeset
26 int index_sort_node_cmp_type(struct mail_search_sort_program *program,
7564
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 const enum mail_sort_type *sort_program,
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 uint32_t seq1, uint32_t seq2);
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 void index_sort_list_init_string(struct mail_search_sort_program *program);
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 void index_sort_list_add_string(struct mail_search_sort_program *program,
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 struct mail *mail);
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 void index_sort_list_finish_string(struct mail_search_sort_program *program);
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
4a9ce9df52c5 Message sort index handling rewrite to fix several race conditions when
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 #endif