dovecot-2.0: lib-storage: If INBOX can't be opened/synced, log a...

dovecot at dovecot.org dovecot at dovecot.org
Sat Mar 27 05:01:20 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/0f0b8e1a2c55
changeset: 11009:0f0b8e1a2c55
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Mar 27 05:01:17 2010 +0200
description:
lib-storage: If INBOX can't be opened/synced, log an error once.

diffstat:

 src/lib-storage/mail-storage.c |  20 +++++++++++++++++++-
 src/lib-storage/mail-user.h    |   2 ++
 2 files changed, 21 insertions(+), 1 deletions(-)

diffs (53 lines):

diff -r 6891d20929ca -r 0f0b8e1a2c55 src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c	Sat Mar 27 04:58:49 2010 +0200
+++ b/src/lib-storage/mail-storage.c	Sat Mar 27 05:01:17 2010 +0200
@@ -538,6 +538,11 @@
 		(void)mailbox_create(box, NULL, FALSE);
 		mailbox_close(box);
 		ret = box->v.open(box);
+		if (ret < 0 && !box->storage->user->inbox_open_error_logged) {
+			box->storage->user->inbox_open_error_logged = TRUE;
+			i_error("Opening INBOX failed: %s",
+				mail_storage_get_last_error(box->storage, NULL));
+		}
 	} T_END;
 
 	if (ret < 0) {
@@ -860,11 +865,24 @@
 			struct mailbox_sync_status *status_r)
 {
 	struct mailbox_sync_context *ctx = *_ctx;
+	struct mail_storage *storage = ctx->box->storage;
+	const char *errormsg;
+	enum mail_error error;
+	int ret;
 
 	*_ctx = NULL;
 
 	memset(status_r, 0, sizeof(*status_r));
-	return ctx->box->v.sync_deinit(ctx, status_r);
+	ret = ctx->box->v.sync_deinit(ctx, status_r);
+	if (ret < 0 && ctx->box->inbox &&
+	    !storage->user->inbox_open_error_logged) {
+		errormsg = mail_storage_get_last_error(storage, &error);
+		if (error == MAIL_ERROR_NOTPOSSIBLE) {
+			storage->user->inbox_open_error_logged = TRUE;
+			i_error("Syncing INBOX failed: %s", errormsg);
+		}
+	}
+	return ret;
 }
 
 int mailbox_sync(struct mailbox *box, enum mailbox_sync_flags flags)
diff -r 6891d20929ca -r 0f0b8e1a2c55 src/lib-storage/mail-user.h
--- a/src/lib-storage/mail-user.h	Sat Mar 27 04:58:49 2010 +0200
+++ b/src/lib-storage/mail-user.h	Sat Mar 27 05:01:17 2010 +0200
@@ -45,6 +45,8 @@
 	unsigned int initialized:1;
 	/* Shortcut to mail_storage_settings.mail_debug */
 	unsigned int mail_debug:1;
+	/* If INBOX can't be opened, log an error, but only once. */
+	unsigned int inbox_open_error_logged:1;
 };
 
 struct mail_user_module_register {


More information about the dovecot-cvs mailing list