From 8d095c0457e4dd10fd4c61eec6a806211f981e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Thu, 2 Aug 2007 18:46:34 +0000 Subject: [PATCH] Add more logging, to figure out what is happening in the master. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21791 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/kadm5/ipropd_master.c | 68 +++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/lib/kadm5/ipropd_master.c b/lib/kadm5/ipropd_master.c index 6b6f9e126..16dfdceb3 100644 --- a/lib/kadm5/ipropd_master.c +++ b/lib/kadm5/ipropd_master.c @@ -175,8 +175,10 @@ slave_gone_p (slave *s) } static void -slave_dead(slave *s) +slave_dead(krb5_context context, slave *s) { + krb5_warnx(context, "slave %s dead", s->name); + if (s->fd >= 0) { close (s->fd); s->fd = -1; @@ -355,14 +357,14 @@ send_complete (krb5_context context, slave *s, if (ret) { krb5_warn (context, ret, "krb5_write_priv_message"); - slave_dead(s); + slave_dead(context, s); return ret; } ret = hdb_foreach (context, db, 0, prop_one, s); if (ret) { krb5_warn (context, ret, "hdb_foreach"); - slave_dead(s); + slave_dead(context, s); return ret; } @@ -382,7 +384,7 @@ send_complete (krb5_context context, slave *s, ret = krb5_write_priv_message(context, s->ac, &s->fd, &data); if (ret) { - slave_dead(s); + slave_dead(context, s); krb5_warn (context, ret, "krb5_write_priv_message"); return ret; } @@ -411,7 +413,7 @@ send_are_you_there (krb5_context context, slave *s) sp = krb5_storage_from_mem (buf, 4); if (sp == NULL) { krb5_warnx (context, "are_you_there: krb5_data_alloc"); - slave_dead(s); + slave_dead(context, s); return 1; } krb5_store_int32 (sp, ARE_YOU_THERE); @@ -421,7 +423,7 @@ send_are_you_there (krb5_context context, slave *s) if (ret) { krb5_warn (context, ret, "are_you_there: krb5_write_priv_message"); - slave_dead(s); + slave_dead(context, s); return 1; } @@ -441,15 +443,20 @@ send_diffs (krb5_context context, slave *s, int log_fd, krb5_data data; int ret = 0; - if (s->version == current_version) + if (s->version == current_version) { + krb5_warnx(context, "slave %s in sync already", s->name); return 0; + } if (s->flags & SLAVE_F_DEAD) return 0; /* if slave is a fresh client, starting over */ - if (s->version == 0) + if (s->version == 0) { + krb5_warnx(context, "sending complete log to fresh slave %s", + s->name); return send_complete (context, s, database, current_version); + } sp = kadm5_log_goto_end (log_fd); right = krb5_storage_seek(sp, 0, SEEK_CUR); @@ -463,13 +470,24 @@ send_diffs (krb5_context context, slave *s, int log_fd, return 0; if (ver == s->version + 1) break; - if (left == 0) + if (left == 0) { + krb5_warnx(context, + "slave %s (version %lu) out of sync with master " + "(first version in log %lu), sending complete database", + s->name, (unsigned long)s->version, (unsigned long)ver); return send_complete (context, s, database, current_version); + } } + + krb5_warnx(context, + "syncing slave %s from version %lu to version %lu", + s->name, (unsigned long)s->version, + (unsigned long)current_version); + ret = krb5_data_alloc (&data, right - left + 4); if (ret) { krb5_warn (context, ret, "send_diffs: krb5_data_alloc"); - slave_dead(s); + slave_dead(context, s); return 1; } krb5_storage_read (sp, (char *)data.data + 4, data.length - 4); @@ -478,7 +496,7 @@ send_diffs (krb5_context context, slave *s, int log_fd, sp = krb5_storage_from_data (&data); if (sp == NULL) { krb5_warnx (context, "send_diffs: krb5_storage_from_data"); - slave_dead(s); + slave_dead(context, s); return 1; } krb5_store_int32 (sp, FOR_YOU); @@ -489,7 +507,7 @@ send_diffs (krb5_context context, slave *s, int log_fd, if (ret) { krb5_warn (context, ret, "send_diffs: krb5_write_priv_message"); - slave_dead(s); + slave_dead(context, s); return 1; } slave_seen(s); @@ -812,6 +830,10 @@ main(int argc, char **argv) kadm5_log_get_version_fd (log_fd, ¤t_version); if (current_version > old_version) { + krb5_warnx(context, + "Missed a signal, updating slaves %lu to %lu", + (unsigned long)old_version, + (unsigned long)current_version); for (p = slaves; p != NULL; p = p->next) { if (p->flags & SLAVE_F_DEAD) continue; @@ -833,8 +855,18 @@ main(int argc, char **argv) assert(ret >= 0); old_version = current_version; kadm5_log_get_version_fd (log_fd, ¤t_version); - for (p = slaves; p != NULL; p = p->next) - send_diffs (context, p, log_fd, database, current_version); + if (current_version > old_version) { + krb5_warnx(context, + "Got a signal, updating slaves %lu to %lu", + (unsigned long)old_version, + (unsigned long)current_version); + for (p = slaves; p != NULL; p = p->next) + send_diffs (context, p, log_fd, database, current_version); + } else { + krb5_warnx(context, + "Got a signal, but no update in log version %lu", + (unsigned long)current_version); + } } for(p = slaves; p != NULL; p = p->next) { @@ -844,11 +876,13 @@ main(int argc, char **argv) --ret; assert(ret >= 0); if(process_msg (context, p, log_fd, database, current_version)) - slave_dead(p); + slave_dead(context, p); } else if (slave_gone_p (p)) - slave_dead (p); - else if (slave_missing_p (p)) + slave_dead(context, p); + else if (slave_missing_p (p)) { + krb5_warnx(context, "slave %s missing, sending AYT", p->name); send_are_you_there (context, p); + } } if (ret && FD_ISSET(listen_fd, &readset)) {