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,