dovecot-2.2: replicator: Remember last successful sync and show ...

dovecot at dovecot.org dovecot at dovecot.org
Fri Jan 30 01:14:07 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/58466077dff9
changeset: 18205:58466077dff9
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jan 30 03:12:37 2015 +0200
description:
replicator: Remember last successful sync and show it in "doveadm replicator status"
Patch by Matthew Via / Rackspace

diffstat:

 src/doveadm/doveadm-replicator.c                |   7 +++++--
 src/replication/replicator/doveadm-connection.c |   5 +++--
 src/replication/replicator/replicator-brain.c   |   2 ++
 src/replication/replicator/replicator-queue.c   |  16 +++++++++++++---
 src/replication/replicator/replicator-queue.h   |   2 +-
 5 files changed, 24 insertions(+), 8 deletions(-)

diffs (126 lines):

diff -r 1d1a310bb488 -r 58466077dff9 src/doveadm/doveadm-replicator.c
--- a/src/doveadm/doveadm-replicator.c	Thu Jan 29 18:43:15 2015 +0200
+++ b/src/doveadm/doveadm-replicator.c	Fri Jan 30 03:12:37 2015 +0200
@@ -141,7 +141,7 @@
 {
 	struct replicator_context *ctx;
 	const char *line, *const *args;
-	time_t last_fast, last_full;
+	time_t last_fast, last_full, last_success;
 
 	ctx = cmd_replicator_init(&argc, &argv, "a:", cmd_replicator_status);
 
@@ -156,6 +156,7 @@
 	doveadm_print_header_simple("priority");
 	doveadm_print_header_simple("fast sync");
 	doveadm_print_header_simple("full sync");
+	doveadm_print_header_simple("success sync");
 	doveadm_print_header_simple("failed");
 
 	replicator_send(ctx, t_strdup_printf("STATUS\t%s\n",
@@ -167,11 +168,13 @@
 			args = t_strsplit_tab(line);
 			if (str_array_length(args) >= 5 &&
 			    str_to_time(args[2], &last_fast) == 0 &&
-			    str_to_time(args[3], &last_full) == 0) {
+			    str_to_time(args[3], &last_full) == 0 &&
+			    str_to_time(args[5], &last_success) == 0) {
 				doveadm_print(args[0]);
 				doveadm_print(args[1]);
 				doveadm_print(time_ago(last_fast));
 				doveadm_print(time_ago(last_full));
+				doveadm_print(time_ago(last_success));
 				doveadm_print(args[4][0] == '0' ? "-" : "y");
 			}
 		} T_END;
diff -r 1d1a310bb488 -r 58466077dff9 src/replication/replicator/doveadm-connection.c
--- a/src/replication/replicator/doveadm-connection.c	Thu Jan 29 18:43:15 2015 +0200
+++ b/src/replication/replicator/doveadm-connection.c	Fri Jan 30 03:12:37 2015 +0200
@@ -98,10 +98,11 @@
 		str_append_tabescaped(str, user->username);
 		str_append_c(str, '\t');
 		str_append(str, replicator_priority_to_str(user->priority));
-		str_printfa(str, "\t%lld\t%lld\t%d\n",
+		str_printfa(str, "\t%lld\t%lld\t%d\t%lld\n",
 			    (long long)user->last_fast_sync,
 			    (long long)user->last_full_sync,
-			    user->last_sync_failed);
+			    user->last_sync_failed,
+			    (long long)user->last_successful_sync);
 		o_stream_send(client->conn.output, str_data(str), str_len(str));
 	}
 	replicator_queue_iter_deinit(&iter);
diff -r 1d1a310bb488 -r 58466077dff9 src/replication/replicator/replicator-brain.c
--- a/src/replication/replicator/replicator-brain.c	Thu Jan 29 18:43:15 2015 +0200
+++ b/src/replication/replicator/replicator-brain.c	Fri Jan 30 03:12:37 2015 +0200
@@ -116,6 +116,8 @@
 		i_free(ctx->user->state);
 		ctx->user->state = i_strdup_empty(state);
 		ctx->user->last_sync_failed = reply != DSYNC_REPLY_OK;
+		if (reply == DSYNC_REPLY_OK)
+			ctx->user->last_successful_sync = ioloop_time;
 		replicator_queue_push(ctx->brain->queue, ctx->user);
 	}
 	if (!ctx->brain->deinitializing)
diff -r 1d1a310bb488 -r 58466077dff9 src/replication/replicator/replicator-queue.c
--- a/src/replication/replicator/replicator-queue.c	Thu Jan 29 18:43:15 2015 +0200
+++ b/src/replication/replicator/replicator-queue.c	Fri Jan 30 03:12:37 2015 +0200
@@ -305,7 +305,7 @@
 	struct replicator_user *user, tmp_user;
 
 	/* <user> <priority> <last update> <last fast sync> <last full sync>
-	   <last failed> <state> */
+	   <last failed> <state> <last successful sync>*/
 	args = t_strsplit_tabescaped(line);
 	if (str_array_length(args) < 7)
 		return -1;
@@ -322,6 +322,14 @@
 	tmp_user.priority = priority;
 	tmp_user.last_sync_failed = args[5][0] != '0';
 
+	if (str_array_length(args) >= 8) { 
+		if (str_to_time(args[7], &tmp_user.last_successful_sync) < 0)
+			return -1;
+	} else {
+		tmp_user.last_successful_sync = 0;
+                /* On-disk format didn't have this yet */
+	}
+
 	user = hash_table_lookup(queue->user_hash, username);
 	if (user != NULL) {
 		if (user->last_update > tmp_user.last_update) {
@@ -340,6 +348,7 @@
 	user->last_update = tmp_user.last_update;
 	user->last_fast_sync = tmp_user.last_fast_sync;
 	user->last_full_sync = tmp_user.last_full_sync;
+	user->last_successful_sync = tmp_user.last_successful_sync;
 	user->last_sync_failed = tmp_user.last_sync_failed;
 	i_free(user->state);
 	user->state = i_strdup(state);
@@ -383,11 +392,12 @@
 replicator_queue_export_user(struct replicator_user *user, string_t *str)
 {
 	str_append_tabescaped(str, user->username);
-	str_printfa(str, "\t%d\t%lld\t%lld\t%lld\t%d\t", (int)user->priority,
+	str_printfa(str, "\t%d\t%lld\t%lld\t%lld\t%d\t%lld\t", (int)user->priority,
 		    (long long)user->last_update,
 		    (long long)user->last_fast_sync,
 		    (long long)user->last_full_sync,
-		    user->last_sync_failed);
+		    user->last_sync_failed,
+		    (long long)user->last_successful_sync);
 	if (user->state != NULL)
 		str_append_tabescaped(str, user->state);
 	str_append_c(str, '\n');
diff -r 1d1a310bb488 -r 58466077dff9 src/replication/replicator/replicator-queue.h
--- a/src/replication/replicator/replicator-queue.h	Thu Jan 29 18:43:15 2015 +0200
+++ b/src/replication/replicator/replicator-queue.h	Fri Jan 30 03:12:37 2015 +0200
@@ -13,7 +13,7 @@
 	/* last time this user's state was updated */
 	time_t last_update;
 	/* last_fast_sync is always >= last_full_sync. */
-	time_t last_fast_sync, last_full_sync;
+	time_t last_fast_sync, last_full_sync, last_successful_sync;
 
 	enum replication_priority priority;
 	/* User isn't currently in replication queue */


More information about the dovecot-cvs mailing list