dovecot-2.1: lib-index: Log a warning if locking transaction log...

dovecot at dovecot.org dovecot at dovecot.org
Fri Oct 12 08:31:32 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/e44579c5b52b
changeset: 14760:e44579c5b52b
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Oct 12 08:31:15 2012 +0300
description:
lib-index: Log a warning if locking transaction log takes longer than 30 secs.

diffstat:

 src/lib-index/mail-transaction-log-private.h |  1 +
 src/lib-index/mail-transaction-log.c         |  7 +++++++
 2 files changed, 8 insertions(+), 0 deletions(-)

diffs (49 lines):

diff -r 9542732069ff -r e44579c5b52b src/lib-index/mail-transaction-log-private.h
--- a/src/lib-index/mail-transaction-log-private.h	Fri Oct 12 00:30:23 2012 +0300
+++ b/src/lib-index/mail-transaction-log-private.h	Fri Oct 12 08:31:15 2012 +0300
@@ -10,6 +10,7 @@
    mails. */
 #define MAIL_TRANSCATION_LOG_LOCK_TIMEOUT (3*60)
 #define MAIL_TRANSCATION_LOG_LOCK_CHANGE_TIMEOUT (3*60)
+#define MAIL_TRANSACTION_LOG_LOCK_WARN_SECS 30
 
 /* Rotate when log is older than ROTATE_TIME and larger than MIN_SIZE */
 #define MAIL_TRANSACTION_LOG_ROTATE_MIN_SIZE (1024*32)
diff -r 9542732069ff -r e44579c5b52b src/lib-index/mail-transaction-log.c
--- a/src/lib-index/mail-transaction-log.c	Fri Oct 12 00:30:23 2012 +0300
+++ b/src/lib-index/mail-transaction-log.c	Fri Oct 12 08:31:15 2012 +0300
@@ -416,6 +416,7 @@
 int mail_transaction_log_lock_head(struct mail_transaction_log *log)
 {
 	struct mail_transaction_log_file *file;
+	time_t lock_wait_started, lock_secs = 0;
 	int ret = 0;
 
 	if (!log->log_2_unlink_checked) {
@@ -437,6 +438,7 @@
 	   can lock it and don't see another file, we can be sure no-one is
 	   creating a new log at the moment */
 
+	lock_wait_started = time(NULL);
 	for (;;) {
 		file = log->head;
 		if (mail_transaction_log_file_lock(file) < 0)
@@ -451,6 +453,7 @@
 
 		if (ret == 0 && log->head == file) {
 			/* success */
+			lock_secs = file->lock_created - lock_wait_started;
 			break;
 		}
 
@@ -462,6 +465,10 @@
 
 		/* try again */
 	}
+	if (lock_secs > MAIL_TRANSACTION_LOG_LOCK_WARN_SECS) {
+		i_warning("Locking transaction log file %s took %ld seconds",
+			  log->head->filepath, (long)lock_secs);
+	}
 
 	i_assert(ret < 0 || log->head != NULL);
 	return ret;


More information about the dovecot-cvs mailing list