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
This commit is contained in:
@@ -175,8 +175,10 @@ slave_gone_p (slave *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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) {
|
if (s->fd >= 0) {
|
||||||
close (s->fd);
|
close (s->fd);
|
||||||
s->fd = -1;
|
s->fd = -1;
|
||||||
@@ -355,14 +357,14 @@ send_complete (krb5_context context, slave *s,
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_warn (context, ret, "krb5_write_priv_message");
|
krb5_warn (context, ret, "krb5_write_priv_message");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = hdb_foreach (context, db, 0, prop_one, s);
|
ret = hdb_foreach (context, db, 0, prop_one, s);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_warn (context, ret, "hdb_foreach");
|
krb5_warn (context, ret, "hdb_foreach");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,7 +384,7 @@ send_complete (krb5_context context, slave *s,
|
|||||||
|
|
||||||
ret = krb5_write_priv_message(context, s->ac, &s->fd, &data);
|
ret = krb5_write_priv_message(context, s->ac, &s->fd, &data);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
krb5_warn (context, ret, "krb5_write_priv_message");
|
krb5_warn (context, ret, "krb5_write_priv_message");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -411,7 +413,7 @@ send_are_you_there (krb5_context context, slave *s)
|
|||||||
sp = krb5_storage_from_mem (buf, 4);
|
sp = krb5_storage_from_mem (buf, 4);
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
krb5_warnx (context, "are_you_there: krb5_data_alloc");
|
krb5_warnx (context, "are_you_there: krb5_data_alloc");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
krb5_store_int32 (sp, ARE_YOU_THERE);
|
krb5_store_int32 (sp, ARE_YOU_THERE);
|
||||||
@@ -421,7 +423,7 @@ send_are_you_there (krb5_context context, slave *s)
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_warn (context, ret, "are_you_there: krb5_write_priv_message");
|
krb5_warn (context, ret, "are_you_there: krb5_write_priv_message");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -441,15 +443,20 @@ send_diffs (krb5_context context, slave *s, int log_fd,
|
|||||||
krb5_data data;
|
krb5_data data;
|
||||||
int ret = 0;
|
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;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (s->flags & SLAVE_F_DEAD)
|
if (s->flags & SLAVE_F_DEAD)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* if slave is a fresh client, starting over */
|
/* 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);
|
return send_complete (context, s, database, current_version);
|
||||||
|
}
|
||||||
|
|
||||||
sp = kadm5_log_goto_end (log_fd);
|
sp = kadm5_log_goto_end (log_fd);
|
||||||
right = krb5_storage_seek(sp, 0, SEEK_CUR);
|
right = krb5_storage_seek(sp, 0, SEEK_CUR);
|
||||||
@@ -463,13 +470,24 @@ send_diffs (krb5_context context, slave *s, int log_fd,
|
|||||||
return 0;
|
return 0;
|
||||||
if (ver == s->version + 1)
|
if (ver == s->version + 1)
|
||||||
break;
|
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);
|
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);
|
ret = krb5_data_alloc (&data, right - left + 4);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_warn (context, ret, "send_diffs: krb5_data_alloc");
|
krb5_warn (context, ret, "send_diffs: krb5_data_alloc");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
krb5_storage_read (sp, (char *)data.data + 4, data.length - 4);
|
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);
|
sp = krb5_storage_from_data (&data);
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
krb5_warnx (context, "send_diffs: krb5_storage_from_data");
|
krb5_warnx (context, "send_diffs: krb5_storage_from_data");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
krb5_store_int32 (sp, FOR_YOU);
|
krb5_store_int32 (sp, FOR_YOU);
|
||||||
@@ -489,7 +507,7 @@ send_diffs (krb5_context context, slave *s, int log_fd,
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_warn (context, ret, "send_diffs: krb5_write_priv_message");
|
krb5_warn (context, ret, "send_diffs: krb5_write_priv_message");
|
||||||
slave_dead(s);
|
slave_dead(context, s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
slave_seen(s);
|
slave_seen(s);
|
||||||
@@ -812,6 +830,10 @@ main(int argc, char **argv)
|
|||||||
kadm5_log_get_version_fd (log_fd, ¤t_version);
|
kadm5_log_get_version_fd (log_fd, ¤t_version);
|
||||||
|
|
||||||
if (current_version > old_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) {
|
for (p = slaves; p != NULL; p = p->next) {
|
||||||
if (p->flags & SLAVE_F_DEAD)
|
if (p->flags & SLAVE_F_DEAD)
|
||||||
continue;
|
continue;
|
||||||
@@ -833,8 +855,18 @@ main(int argc, char **argv)
|
|||||||
assert(ret >= 0);
|
assert(ret >= 0);
|
||||||
old_version = current_version;
|
old_version = current_version;
|
||||||
kadm5_log_get_version_fd (log_fd, ¤t_version);
|
kadm5_log_get_version_fd (log_fd, ¤t_version);
|
||||||
for (p = slaves; p != NULL; p = p->next)
|
if (current_version > old_version) {
|
||||||
send_diffs (context, p, log_fd, database, current_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) {
|
for(p = slaves; p != NULL; p = p->next) {
|
||||||
@@ -844,11 +876,13 @@ main(int argc, char **argv)
|
|||||||
--ret;
|
--ret;
|
||||||
assert(ret >= 0);
|
assert(ret >= 0);
|
||||||
if(process_msg (context, p, log_fd, database, current_version))
|
if(process_msg (context, p, log_fd, database, current_version))
|
||||||
slave_dead(p);
|
slave_dead(context, p);
|
||||||
} else if (slave_gone_p (p))
|
} else if (slave_gone_p (p))
|
||||||
slave_dead (p);
|
slave_dead(context, p);
|
||||||
else if (slave_missing_p (p))
|
else if (slave_missing_p (p)) {
|
||||||
|
krb5_warnx(context, "slave %s missing, sending AYT", p->name);
|
||||||
send_are_you_there (context, p);
|
send_are_you_there (context, p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret && FD_ISSET(listen_fd, &readset)) {
|
if (ret && FD_ISSET(listen_fd, &readset)) {
|
||||||
|
Reference in New Issue
Block a user