Mercurial > dovecot > core-2.2
annotate src/lib-storage/index/dbox-common/dbox-sync-rebuild.c @ 14682:d0d7b810646b
Make sure we check all the functions' return values. Minor API changes to simplify this.
Checked using a patched clang that adds attribute(warn_unused_result) to all
functions. This commit fixes several error handling mistakes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 25 Jun 2012 01:14:03 +0300 |
parents | c93ca5e46a8a |
children | 89c319980584 |
rev | line source |
---|---|
14133
ba770cba5598
Updated copyright notices to include year 2012.
Timo Sirainen <tss@iki.fi>
parents:
14084
diff
changeset
|
1 /* Copyright (c) 2007-2012 Dovecot authors, see the included COPYING file */ |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "array.h" |
14084
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
5 #include "mail-cache.h" |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
6 #include "mail-index-modseq.h" |
12740
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
7 #include "mailbox-list-private.h" |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "index-storage.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "dbox-storage.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "dbox-sync-rebuild.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 static void |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 dbox_sync_index_copy_cache(struct dbox_sync_rebuild_context *ctx, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 struct mail_index_view *view, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 uint32_t old_seq, uint32_t new_seq) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 struct mail_index_map *map; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 const void *data; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 uint32_t reset_id; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 bool expunged; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 if (ctx->cache_ext_id == (uint32_t)-1) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 return; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 mail_index_lookup_ext_full(view, old_seq, ctx->cache_ext_id, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 &map, &data, &expunged); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 if (expunged) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 return; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 if (!mail_index_ext_get_reset_id(view, map, ctx->cache_ext_id, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 &reset_id) || reset_id == 0) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 return; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 if (!ctx->cache_used) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 /* set reset id */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 ctx->cache_used = TRUE; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 ctx->cache_reset_id = reset_id; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 mail_index_ext_reset(ctx->trans, ctx->cache_ext_id, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 ctx->cache_reset_id, TRUE); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 if (ctx->cache_reset_id == reset_id) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 mail_index_update_ext(ctx->trans, new_seq, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 ctx->cache_ext_id, data, NULL); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 static void |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 dbox_sync_index_copy_from_old(struct dbox_sync_rebuild_context *ctx, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 struct mail_index_view *view, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 uint32_t old_seq, uint32_t new_seq) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 struct mail_index *index = mail_index_view_get_index(view); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 const struct mail_index_record *rec; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 ARRAY_TYPE(keyword_indexes) old_keywords; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 struct mail_keywords *kw; |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
56 uint64_t modseq; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 /* copy flags */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 rec = mail_index_lookup(view, old_seq); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 mail_index_update_flags(ctx->trans, new_seq, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 MODIFY_REPLACE, rec->flags); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 /* copy keywords */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 t_array_init(&old_keywords, 32); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 mail_index_lookup_keywords(view, old_seq, &old_keywords); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 kw = mail_index_keywords_create_from_indexes(index, &old_keywords); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 mail_index_update_keywords(ctx->trans, new_seq, MODIFY_REPLACE, kw); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 mail_index_keywords_unref(&kw); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
70 /* copy modseq */ |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
71 modseq = mail_index_modseq_lookup(view, old_seq); |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
72 mail_index_update_modseq(ctx->trans, new_seq, modseq); |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
73 |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 dbox_sync_index_copy_cache(ctx, view, old_seq, new_seq); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 void dbox_sync_rebuild_index_metadata(struct dbox_sync_rebuild_context *ctx, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 uint32_t new_seq, uint32_t uid) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 uint32_t old_seq; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 if (mail_index_lookup_seq(ctx->view, uid, &old_seq)) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 /* the message exists in the old index. |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 copy the metadata from it. */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 dbox_sync_index_copy_from_old(ctx, ctx->view, old_seq, new_seq); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 } else if (ctx->backup_view != NULL && |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 mail_index_lookup_seq(ctx->backup_view, uid, &old_seq)) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 /* copy the metadata from backup index. */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 dbox_sync_index_copy_from_old(ctx, ctx->backup_view, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 old_seq, new_seq); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
94 static void dbox_sync_rebuild_header(struct dbox_sync_rebuild_context *ctx) |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
95 { |
11026
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
96 const struct mail_index_header *hdr, *backup_hdr, *trans_hdr; |
10844
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
97 struct mail_index *index = mail_index_view_get_index(ctx->view); |
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
98 struct mail_index_modseq_header modseq_hdr; |
11026
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
99 struct mail_index_view *trans_view; |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
100 uint32_t uid_validity, next_uid; |
10844
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
101 uint64_t modseq; |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
102 |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
103 hdr = mail_index_get_header(ctx->view); |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
104 backup_hdr = ctx->backup_view == NULL ? NULL : |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
105 mail_index_get_header(ctx->backup_view); |
11026
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
106 trans_view = mail_index_transaction_open_updated_view(ctx->trans); |
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
107 trans_hdr = mail_index_get_header(trans_view); |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
108 |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
109 /* set uidvalidity */ |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
110 if (hdr->uid_validity != 0) |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
111 uid_validity = hdr->uid_validity; |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
112 else if (backup_hdr != NULL && backup_hdr->uid_validity != 0) |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
113 uid_validity = backup_hdr->uid_validity; |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
114 else |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
115 uid_validity = dbox_get_uidvalidity_next(ctx->box->list); |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
116 mail_index_update_header(ctx->trans, |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
117 offsetof(struct mail_index_header, uid_validity), |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
118 &uid_validity, sizeof(uid_validity), TRUE); |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
119 |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
120 /* set next-uid */ |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
121 if (hdr->next_uid != 0) |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
122 next_uid = hdr->next_uid; |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
123 else if (backup_hdr != NULL && backup_hdr->next_uid != 0) |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
124 next_uid = backup_hdr->next_uid; |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
125 else |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
126 next_uid = dbox_get_uidvalidity_next(ctx->box->list); |
11026
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
127 if (next_uid > trans_hdr->next_uid) { |
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
128 mail_index_update_header(ctx->trans, |
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
129 offsetof(struct mail_index_header, next_uid), |
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
130 &next_uid, sizeof(next_uid), FALSE); |
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
131 } |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
132 |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
133 /* set highest-modseq */ |
10844
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
134 memset(&modseq_hdr, 0, sizeof(modseq_hdr)); |
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
135 modseq_hdr.highest_modseq = mail_index_modseq_get_highest(ctx->view); |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
136 if (ctx->backup_view != NULL) { |
10844
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
137 modseq = mail_index_modseq_get_highest(ctx->backup_view); |
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
138 if (modseq_hdr.highest_modseq < modseq) |
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
139 modseq_hdr.highest_modseq = modseq; |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
140 } |
10844
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
141 mail_index_update_header_ext(ctx->trans, index->modseq_ext_id, |
3bfb1e9f556b
dbox index rebuild: Fixed setting next-uid and highest-modseq.
Timo Sirainen <tss@iki.fi>
parents:
10828
diff
changeset
|
142 0, &modseq_hdr, sizeof(modseq_hdr)); |
11026
cf302ede55bc
dbox: When rebuilding index, don't try to shrink next_uid.
Timo Sirainen <tss@iki.fi>
parents:
10844
diff
changeset
|
143 mail_index_view_close(&trans_view); |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
144 } |
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
145 |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 struct dbox_sync_rebuild_context * |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
147 dbox_sync_index_rebuild_init(struct mailbox *box, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 struct mail_index_view *view, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 struct mail_index_transaction *trans) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 struct dbox_sync_rebuild_context *ctx; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 const char *index_dir; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 enum mail_index_open_flags open_flags = MAIL_INDEX_OPEN_FLAG_READONLY; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 ctx = i_new(struct dbox_sync_rebuild_context, 1); |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
156 ctx->box = box; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 ctx->view = view; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 ctx->trans = trans; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 mail_index_reset(ctx->trans); |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
160 index_mailbox_reset_uidvalidity(box); |
14682
d0d7b810646b
Make sure we check all the functions' return values. Minor API changes to simplify this.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
161 (void)mail_index_ext_lookup(box->index, "cache", &ctx->cache_ext_id); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 |
14084
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
163 /* open cache and read the caching decisions. we'll reset the cache in |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
164 case it contains any invalid data, but we want to preserve the |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
165 decisions. */ |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
166 (void)mail_cache_open_and_verify(ctx->box->cache); |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
167 mail_cache_reset(box->cache); |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
168 |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 /* if backup index file exists, try to use it */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 index_dir = mailbox_list_get_path(box->list, box->name, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 MAILBOX_LIST_PATH_TYPE_INDEX); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 ctx->backup_index = |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 mail_index_alloc(index_dir, DBOX_INDEX_PREFIX".backup"); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 #ifndef MMAP_CONFLICTS_WRITE |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
176 if (box->storage->set->mmap_disable) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 #endif |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 open_flags |= MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE; |
11623
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11026
diff
changeset
|
179 mail_index_set_lock_method(ctx->backup_index, |
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11026
diff
changeset
|
180 box->storage->set->parsed_lock_method, -1U); |
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11026
diff
changeset
|
181 if (mail_index_open(ctx->backup_index, open_flags) <= 0) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 mail_index_free(&ctx->backup_index); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 else |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 ctx->backup_view = mail_index_view_open(ctx->backup_index); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 return ctx; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
187 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
188 void dbox_sync_index_rebuild_deinit(struct dbox_sync_rebuild_context **_ctx) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
189 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
190 struct dbox_sync_rebuild_context *ctx = *_ctx; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
191 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
192 *_ctx = NULL; |
14084
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
193 |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
194 /* initialize cache file with the old field decisions */ |
d8d214cc1936
dbox: Index rebuild now preserves caching decisions.
Timo Sirainen <tss@iki.fi>
parents:
14037
diff
changeset
|
195 (void)mail_cache_compress(ctx->box->cache, ctx->trans); |
10828
154f52b7a6fd
[m]dbox: Fixes to rebuilding a broken index.
Timo Sirainen <tss@iki.fi>
parents:
10677
diff
changeset
|
196 dbox_sync_rebuild_header(ctx); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 if (ctx->backup_index != NULL) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
198 mail_index_view_close(&ctx->backup_view); |
10677
93fe3aa23bdb
lib-index: Don't close index files if they're still being used by another mailbox.
Timo Sirainen <tss@iki.fi>
parents:
10660
diff
changeset
|
199 mail_index_close(ctx->backup_index); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 mail_index_free(&ctx->backup_index); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 i_free(ctx); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 } |
12740
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
204 |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
205 int dbox_sync_rebuild_verify_alt_storage(struct mailbox_list *list) |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
206 { |
14037
aed3379df476
lib-storage: mailbox_list_mkdir_root() API changed. Use it now for creating mail root dir.
Timo Sirainen <tss@iki.fi>
parents:
13091
diff
changeset
|
207 const char *alt_path, *error; |
12740
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
208 struct stat st; |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
209 |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
210 alt_path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_ALT_DIR); |
12740
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
211 if (alt_path == NULL) |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
212 return 0; |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
213 |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
214 /* make sure alt storage is mounted. if it's not, abort the rebuild. */ |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
215 if (stat(alt_path, &st) == 0) |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
216 return 0; |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
217 if (errno != ENOENT) { |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
218 i_error("stat(%s) failed: %m", alt_path); |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
219 return -1; |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
220 } |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
221 |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
222 /* try to create the alt directory. if it fails, it means alt |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
223 storage isn't mounted. */ |
13091
c4bac1e48611
lib-storage: mkdir APIs changed.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
224 if (mailbox_list_mkdir_root(list, alt_path, |
14037
aed3379df476
lib-storage: mailbox_list_mkdir_root() API changed. Use it now for creating mail root dir.
Timo Sirainen <tss@iki.fi>
parents:
13091
diff
changeset
|
225 MAILBOX_LIST_PATH_TYPE_ALT_DIR, |
aed3379df476
lib-storage: mailbox_list_mkdir_root() API changed. Use it now for creating mail root dir.
Timo Sirainen <tss@iki.fi>
parents:
13091
diff
changeset
|
226 &error) < 0) { |
aed3379df476
lib-storage: mailbox_list_mkdir_root() API changed. Use it now for creating mail root dir.
Timo Sirainen <tss@iki.fi>
parents:
13091
diff
changeset
|
227 i_error("Couldn't create dbox alt root dir %s: %s", |
aed3379df476
lib-storage: mailbox_list_mkdir_root() API changed. Use it now for creating mail root dir.
Timo Sirainen <tss@iki.fi>
parents:
13091
diff
changeset
|
228 alt_path, error); |
12740
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
229 return -1; |
14037
aed3379df476
lib-storage: mailbox_list_mkdir_root() API changed. Use it now for creating mail root dir.
Timo Sirainen <tss@iki.fi>
parents:
13091
diff
changeset
|
230 } |
12740
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
231 return 0; |
159605040ec0
dbox index rebuild: If alt dir isn't mounted (can't be mkdir()ed), abort rebuild.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
232 } |