Mercurial > dovecot > core-2.2
changeset 19696:3cc82c8c1b72
dsync: If mailbox importing fails, stop immediately without waiting for exporter to finish.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 01 Feb 2016 22:40:15 +0200 |
parents | 9ca924a62d0b |
children | 204d695073de |
files | src/doveadm/dsync/dsync-brain-mails.c src/doveadm/dsync/dsync-mailbox-import.c src/doveadm/dsync/dsync-mailbox-import.h |
diffstat | 3 files changed, 9 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/dsync/dsync-brain-mails.c Mon Feb 01 20:30:26 2016 +0200 +++ b/src/doveadm/dsync/dsync-brain-mails.c Mon Feb 01 22:40:15 2016 +0200 @@ -278,7 +278,8 @@ i_debug("brain %c: import mail uid %u guid %s", brain->master_brain ? 'M' : 'S', mail->uid, mail->guid); } - dsync_mailbox_import_mail(brain->box_importer, mail); + if (dsync_mailbox_import_mail(brain->box_importer, mail) < 0) + brain->failed = TRUE; if (mail->input != NULL) i_stream_unref(&mail->input); return TRUE;
--- a/src/doveadm/dsync/dsync-mailbox-import.c Mon Feb 01 20:30:26 2016 +0200 +++ b/src/doveadm/dsync/dsync-mailbox-import.c Mon Feb 01 22:40:15 2016 +0200 @@ -2411,8 +2411,8 @@ return ret; } -void dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, - const struct dsync_mail *mail) +int dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, + const struct dsync_mail *mail) { struct importer_new_mail *all_newmails; @@ -2420,7 +2420,7 @@ i_assert(importer->new_uids_assigned); if (importer->failed) - return; + return -1; imp_debug(importer, "Import mail body for GUID=%s UID=%u", mail->guid, mail->uid); @@ -2438,7 +2438,7 @@ imp_debug(importer, "Skip unwanted mail body for " "GUID=%s UID=%u", mail->guid, mail->uid); } - return; + return 0; } if (*mail->guid != '\0') hash_table_remove(importer->import_guids, mail->guid); @@ -2449,6 +2449,7 @@ importer->import_pos++; if (!dsync_mailbox_save_newmails(importer, mail, all_newmails, TRUE)) i_unreached(); + return importer->failed ? -1 : 0; } static int
--- a/src/doveadm/dsync/dsync-mailbox-import.h Mon Feb 01 20:30:26 2016 +0200 +++ b/src/doveadm/dsync/dsync-mailbox-import.h Mon Feb 01 22:40:15 2016 +0200 @@ -40,8 +40,8 @@ int dsync_mailbox_import_changes_finish(struct dsync_mailbox_importer *importer); const struct dsync_mail_request * dsync_mailbox_import_next_request(struct dsync_mailbox_importer *importer); -void dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, - const struct dsync_mail *mail); +int dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, + const struct dsync_mail *mail); int dsync_mailbox_import_deinit(struct dsync_mailbox_importer **importer, bool success, uint32_t *last_common_uid_r,