From: sergey.kitov Date: Tue, 8 Mar 2022 10:19:04 +0000 (+0200) Subject: imap: Use batched seqset iteration from lib-storage. X-Git-Tag: 2.4.0~4197 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac19734f0075835773380a980d9783f0429af9a1;p=thirdparty%2Fdovecot%2Fcore.git imap: Use batched seqset iteration from lib-storage. --- diff --git a/src/imap/cmd-copy.c b/src/imap/cmd-copy.c index 268c5bbc6a..e11d3adfdc 100644 --- a/src/imap/cmd-copy.c +++ b/src/imap/cmd-copy.c @@ -261,7 +261,7 @@ static bool cmd_copy_full(struct client_command_context *cmd, bool move) struct client *client = cmd->client; struct mailbox *destbox; struct mail_search_args *search_args; - struct imap_search_seqset_iter *seqset_iter = NULL; + struct mail_search_seqset_iter *seqset_iter = NULL; const char *messageset, *mailbox; enum mailbox_sync_flags sync_flags = 0; enum imap_sync_flags imap_flags = 0; @@ -321,7 +321,7 @@ static bool cmd_copy_full(struct client_command_context *cmd, bool move) /* When moving mails, perform the work in batches of MOVE_COMMIT_INTERVAL. Each such batch has its own transaction and search query. */ - seqset_iter = imap_search_seqset_iter_init(search_args, + seqset_iter = mail_search_seqset_iter_init(search_args, client->messages_count, MOVE_COMMIT_INTERVAL); } do { @@ -333,8 +333,8 @@ static bool cmd_copy_full(struct client_command_context *cmd, bool move) break; } } while (seqset_iter != NULL && - imap_search_seqset_iter_next(seqset_iter)); - imap_search_seqset_iter_deinit(&seqset_iter); + mail_search_seqset_iter_next(seqset_iter)); + mail_search_seqset_iter_deinit(&seqset_iter); mail_search_args_unref(&search_args); src_uidset = t_str_new(256); diff --git a/src/imap/imap-expunge.c b/src/imap/imap-expunge.c index efe3294530..cc984e5366 100644 --- a/src/imap/imap-expunge.c +++ b/src/imap/imap-expunge.c @@ -6,8 +6,6 @@ #include "imap-search-args.h" #include "imap-expunge.h" -#define IMAP_EXPUNGE_BATCH_SIZE 1000 - /* get a seqset of all the mails with \Deleted */ static int imap_expunge_get_seqset(struct mailbox *box, struct mail_search_arg *next_search_arg, @@ -49,7 +47,7 @@ static int imap_expunge_get_seqset(struct mailbox *box, int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg, unsigned int *expunged_count) { - struct imap_search_seqset_iter *seqset_iter; + struct mail_search_seqset_iter *seqset_iter; struct mail_search_args *search_args; struct mailbox_status status; bool expunges = FALSE; @@ -87,8 +85,8 @@ int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg, b) The caller would have to do batching and sync the mailbox multiple times. This would require a new kind of cmd_sync() that would send untagged replies but not the tagged reply. */ - seqset_iter = imap_search_seqset_iter_init(search_args, status.messages, - IMAP_EXPUNGE_BATCH_SIZE); + seqset_iter = mail_search_seqset_iter_init(search_args, status.messages, + MAIL_EXPUNGE_BATCH_SIZE); do { struct mailbox_transaction_context *t; @@ -109,9 +107,9 @@ int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg, so far. There's no need to rollback. */ if (mailbox_transaction_commit(&t) < 0) ret = -1; - } while (ret >= 0 && imap_search_seqset_iter_next(seqset_iter)); + } while (ret >= 0 && mail_search_seqset_iter_next(seqset_iter)); - imap_search_seqset_iter_deinit(&seqset_iter); + mail_search_seqset_iter_deinit(&seqset_iter); mail_search_args_unref(&search_args); if (ret < 0)