changeset 22716:6287c6d66f56

dsync: Add debug logging for .dovecot-sync.lock locking/unlocking
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 28 Dec 2017 10:27:27 +0200
parents 20415dd0b85a
children e33ad4efec00
files src/doveadm/dsync/dsync-brain.c
diffstat 1 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/dsync/dsync-brain.c	Thu Dec 28 14:10:23 2017 +0200
+++ b/src/doveadm/dsync/dsync-brain.c	Thu Dec 28 10:27:27 2017 +0200
@@ -376,6 +376,11 @@
 	if (brain->lock_fd != -1) {
 		/* unlink the lock file before it gets unlocked */
 		i_unlink(brain->lock_path);
+		if (brain->debug) {
+			i_debug("brain %c: Unlocked %s",
+				brain->master_brain ? 'M' : 'S',
+				brain->lock_path);
+		}
 		file_lock_free(&brain->lock);
 		i_close_fd(&brain->lock_fd);
 	}
@@ -396,17 +401,29 @@
 		.lock_timeout_secs = brain->lock_timeout,
 		.lock_method = FILE_LOCK_METHOD_FCNTL,
 	};
-	const char *home, *error;
+	const char *home, *error, *local_hostname = my_hostdomain();
 	bool created;
 	int ret;
 
-	if ((ret = strcmp(remote_hostname, my_hostdomain())) < 0) {
+	if ((ret = strcmp(remote_hostname, local_hostname)) < 0) {
 		/* locking done by remote */
+		if (brain->debug) {
+			i_debug("brain %c: Locking done by remote "
+				"(local hostname=%s, remote hostname=%s)",
+				brain->master_brain ? 'M' : 'S',
+				local_hostname, remote_hostname);
+		}
 		return 0;
 	}
 	if (ret == 0 && !brain->master_brain) {
 		/* running dsync within the same server.
 		   locking done by master brain. */
+		if (brain->debug) {
+			i_debug("brain %c: Locking done by local master-brain "
+				"(local hostname=%s, remote hostname=%s)",
+				brain->master_brain ? 'M' : 'S',
+				local_hostname, remote_hostname);
+		}
 		return 0;
 	}
 
@@ -427,6 +444,12 @@
 					    &brain->lock, &created, &error);
 	if (brain->lock_fd == -1)
 		i_error("Couldn't lock %s: %s", brain->lock_path, error);
+	else if (brain->debug) {
+		i_debug("brain %c: Locking done locally in %s "
+			"(local hostname=%s, remote hostname=%s)",
+			brain->master_brain ? 'M' : 'S',
+			brain->lock_path, local_hostname, remote_hostname);
+	}
 	if (brain->verbose_proctitle)
 		process_title_set(dsync_brain_get_proctitle(brain));
 	return brain->lock_fd == -1 ? -1 : 0;