From: Timo Sirainen Date: Mon, 1 Feb 2016 20:40:15 +0000 (+0200) Subject: dsync: If mailbox importing fails, stop immediately without waiting for exporter... X-Git-Tag: 2.2.22.rc1~224 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ae6552482fe6e6a613f883335fdafdf9afbc7b7;p=thirdparty%2Fdovecot%2Fcore.git dsync: If mailbox importing fails, stop immediately without waiting for exporter to finish. --- diff --git a/src/doveadm/dsync/dsync-brain-mails.c b/src/doveadm/dsync/dsync-brain-mails.c index 137e64b1e2..a9ab009c5c 100644 --- a/src/doveadm/dsync/dsync-brain-mails.c +++ b/src/doveadm/dsync/dsync-brain-mails.c @@ -278,7 +278,8 @@ static bool dsync_brain_recv_mail(struct dsync_brain *brain) 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; diff --git a/src/doveadm/dsync/dsync-mailbox-import.c b/src/doveadm/dsync/dsync-mailbox-import.c index 657b9c5c51..b67febc89b 100644 --- a/src/doveadm/dsync/dsync-mailbox-import.c +++ b/src/doveadm/dsync/dsync-mailbox-import.c @@ -2411,8 +2411,8 @@ static bool dsync_mailbox_save_newmails(struct dsync_mailbox_importer *importer, 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 @@ void dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, 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 @@ void dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, 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 @@ void dsync_mailbox_import_mail(struct dsync_mailbox_importer *importer, importer->import_pos++; if (!dsync_mailbox_save_newmails(importer, mail, all_newmails, TRUE)) i_unreached(); + return importer->failed ? -1 : 0; } static int diff --git a/src/doveadm/dsync/dsync-mailbox-import.h b/src/doveadm/dsync/dsync-mailbox-import.h index 2985a117c2..d3603ea621 100644 --- a/src/doveadm/dsync/dsync-mailbox-import.h +++ b/src/doveadm/dsync/dsync-mailbox-import.h @@ -40,8 +40,8 @@ int dsync_mailbox_import_change(struct dsync_mailbox_importer *importer, 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,