changeset 21119:82e3be158fe5

imap: Add details why unhibernation failed This can help understanding why client failed to unhibernate.
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Tue, 15 Nov 2016 18:55:36 +0200
parents ac02caa662f2
children aca58a1e6717
files src/imap/imap-state.c
diffstat 1 files changed, 22 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-state.c	Wed Nov 16 11:41:42 2016 +0200
+++ b/src/imap/imap-state.c	Tue Nov 15 18:55:36 2016 +0200
@@ -402,7 +402,9 @@
 		*error_r = mailbox_get_last_error(client->mailbox, NULL);
 		ret = -1;
 	} else if (seq != state->messages) {
-		*error_r = "Message count mismatch after handling expunges";
+		*error_r = t_strdup_printf("Message count mismatch after "
+					   "handling expunges (%u != %u)",
+					   seq, state->messages);
 		ret = -1;
 	}
 	(void)mailbox_transaction_commit(&trans);
@@ -411,11 +413,15 @@
 
 	seqs = array_get(&expunged_seqs, &expunge_count);
 	if (client->messages_count + expunge_count < state->messages) {
-		*error_r = "Message count too low after handling expunges";
+		*error_r = t_strdup_printf("Message count too low after "
+					   "handling expunges (%u < %u)",
+					   client->messages_count + expunge_count,
+					   state->messages);
 		return -1;
 	}
 	if (crc != state->uids_crc32) {
-		*error_r = "Message UIDs CRC32 mismatch";
+		*error_r = t_strdup_printf("Message UIDs CRC32 mismatch (%u != %u)",
+					   crc, state->uids_crc32);
 		return -1;
 	}
 
@@ -589,7 +595,9 @@
 		return -1;
 	}
 	if (!guid_128_equals(metadata.guid, state->mailbox_guid)) {
-		*error_r = "Mailbox GUID has changed";
+		*error_r = t_strdup_printf("Mailbox GUID has changed %s->%s",
+					   guid_128_to_string(state->mailbox_guid),
+					   guid_128_to_string(metadata.guid));
 		mailbox_free(&box);
 		return -1;
 	}
@@ -597,17 +605,21 @@
 				STATUS_HIGHESTMODSEQ | STATUS_RECENT |
 				STATUS_KEYWORDS, &status);
 	if (status.uidvalidity != state->uidvalidity) {
-		*error_r = "Mailbox UIDVALIDITY has changed";
+		*error_r = t_strdup_printf("Mailbox UIDVALIDITY has changed %u->%u",
+					    state->uidvalidity, status.uidvalidity);
 		mailbox_free(&box);
 		return -1;
 	}
 	if (status.uidnext < state->uidnext) {
-		*error_r = "Mailbox UIDNEXT shrank";
+		*error_r = t_strdup_printf("Mailbox UIDNEXT shrank %u -> %u",
+					   state->uidnext, status.uidnext);
 		mailbox_free(&box);
 		return -1;
 	}
 	if (status.highest_modseq < state->highest_modseq) {
-		*error_r = "Mailbox HIGHESTMODSEQ shrank";
+		*error_r = t_strdup_printf("Mailbox HIGHESTMODSEQ shrank %u -> %u",
+					   state->highest_modseq,
+					   status.highest_modseq);
 		mailbox_free(&box);
 		return -1;
 	}
@@ -623,7 +635,9 @@
 		return -1;
 	i_assert(expunge_count <= state->messages);
 	if (state->messages - expunge_count > client->messages_count) {
-		*error_r = "Mailbox message count shrank";
+		*error_r = t_strdup_printf("Mailbox message count shrank %u -> %u",
+					   client->messages_count,
+					   state->messages - expunge_count);
 		return -1;
 	}
 	if (state->messages - expunge_count < client->messages_count) {