Skip to content

Commit

Permalink
dsync: Add debug logging for .dovecot-sync.lock locking/unlocking
Browse files Browse the repository at this point in the history
  • Loading branch information
sirainen authored and villesavolainen committed Jan 3, 2018
1 parent dfca755 commit acb1058
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions src/doveadm/dsync/dsync-brain.c
Expand Up @@ -376,6 +376,11 @@ int dsync_brain_deinit(struct dsync_brain **_brain, enum mail_error *error_r)
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);
}
Expand All @@ -396,17 +401,29 @@ dsync_brain_lock(struct dsync_brain *brain, const char *remote_hostname)
.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;
}

Expand All @@ -427,6 +444,12 @@ dsync_brain_lock(struct dsync_brain *brain, const char *remote_hostname)
&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;
Expand Down

0 comments on commit acb1058

Please sign in to comment.