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