]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: If mailbox importing fails, stop immediately without waiting for exporter...
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 1 Feb 2016 20:40:15 +0000 (22:40 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 1 Feb 2016 20:40:15 +0000 (22:40 +0200)
src/doveadm/dsync/dsync-brain-mails.c
src/doveadm/dsync/dsync-mailbox-import.c
src/doveadm/dsync/dsync-mailbox-import.h

index 137e64b1e27575f84dfbf55ac3575d0163fcba1e..a9ab009c5c9d3f2366f1d839fcc5d7b968dbb869 100644 (file)
@@ -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;
index 657b9c5c5194a0547a4d5bac7a66229ee5d4c996..b67febc89b199645b77bbac4cb7453303d66fdb3 100644 (file)
@@ -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
index 2985a117c282f1ea0ff76a32eaebb391b6192db9..d3603ea62158ad663ff418e150132684adb1fb0d 100644 (file)
@@ -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,