changeset 21877:d703b0fde204

lib-storage: Add mailbox_set_reason() Use it to log a debug message when mailbox is being opened.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 01 Apr 2017 21:16:37 +0300
parents ccbdafa83dbc
children e78a42ead488
files src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.c src/lib-storage/mail-storage.h
diffstat 3 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mail-storage-private.h	Mon Mar 27 18:05:29 2017 +0300
+++ b/src/lib-storage/mail-storage-private.h	Sat Apr 01 21:16:37 2017 +0300
@@ -346,6 +346,8 @@
 	/* Filled lazily when mailbox is opened, use mailbox_get_index_path()
 	   to access it */
 	const char *_index_path;
+	/* Reason for why mailbox is being accessed or NULL if unknown. */
+	const char *reason;
 
 	/* default vfuncs for new struct mails. */
 	const struct mail_vfuncs *mail_vfuncs;
--- a/src/lib-storage/mail-storage.c	Mon Mar 27 18:05:29 2017 +0300
+++ b/src/lib-storage/mail-storage.c	Sat Apr 01 21:16:37 2017 +0300
@@ -819,6 +819,13 @@
 	return box;
 }
 
+void mailbox_set_reason(struct mailbox *box, const char *reason)
+{
+	i_assert(reason != NULL);
+
+	box->reason = p_strdup(box->pool, reason);
+}
+
 static bool mailbox_is_autocreated(struct mailbox *box)
 {
 	if (box->inbox_user)
@@ -1125,6 +1132,12 @@
 
 	if (box->opened)
 		return 0;
+
+	if (box->storage->set->mail_debug && box->reason != NULL) {
+		i_debug("%s: Mailbox opened because: %s",
+			box->vname, box->reason);
+	}
+
 	switch (box->open_error) {
 	case 0:
 		break;
--- a/src/lib-storage/mail-storage.h	Mon Mar 27 18:05:29 2017 +0300
+++ b/src/lib-storage/mail-storage.h	Sat Apr 01 21:16:37 2017 +0300
@@ -507,6 +507,9 @@
 struct mailbox *mailbox_alloc_guid(struct mailbox_list *list,
 				   const guid_128_t guid,
 				   enum mailbox_flags flags);
+/* Set a human-readable reason for why this mailbox is being accessed.
+   This is used for logging purposes. */
+void mailbox_set_reason(struct mailbox *box, const char *reason);
 /* Get mailbox existence state. If auto_boxes=FALSE, return
    MAILBOX_EXISTENCE_NONE for autocreated mailboxes that haven't been
    physically created yet */