(main): make sure we don't consider dead slave for select processing
(write_stats): use slave_stats_file variable, check return value of strftime (args): allow specifying slave stats file (slave_dead): close the fd when the slave dies git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@11879 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -38,6 +38,8 @@ RCSID("$Id$");
|
|||||||
|
|
||||||
static krb5_log_facility *log_facility;
|
static krb5_log_facility *log_facility;
|
||||||
|
|
||||||
|
const char *slave_stats_file = KADM5_SLAVE_STATS;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
make_signal_socket (krb5_context context)
|
make_signal_socket (krb5_context context)
|
||||||
{
|
{
|
||||||
@@ -123,6 +125,10 @@ slave_seen(slave *s)
|
|||||||
static void
|
static void
|
||||||
slave_dead(slave *s)
|
slave_dead(slave *s)
|
||||||
{
|
{
|
||||||
|
if (s->fd >= 0) {
|
||||||
|
close (s->fd);
|
||||||
|
s->fd = -1;
|
||||||
|
}
|
||||||
s->flags |= SLAVE_F_DEAD;
|
s->flags |= SLAVE_F_DEAD;
|
||||||
slave_seen(s);
|
slave_seen(s);
|
||||||
}
|
}
|
||||||
@@ -406,12 +412,12 @@ process_msg (krb5_context context, slave *s, int log_fd,
|
|||||||
static void
|
static void
|
||||||
write_stats(krb5_context context, slave *slaves, u_int32_t current_version)
|
write_stats(krb5_context context, slave *slaves, u_int32_t current_version)
|
||||||
{
|
{
|
||||||
char str[30];
|
char str[100];
|
||||||
rtbl_t tbl;
|
rtbl_t tbl;
|
||||||
time_t t = time(NULL);
|
time_t t = time(NULL);
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
fp = fopen(KADM5_SLAVE_STATS, "w");
|
fp = fopen(slave_stats_file, "w");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -457,8 +463,9 @@ write_stats(krb5_context context, slave *slaves, u_int32_t current_version)
|
|||||||
else
|
else
|
||||||
rtbl_add_column_entry(tbl, SLAVE_STATUS, "Up");
|
rtbl_add_column_entry(tbl, SLAVE_STATUS, "Up");
|
||||||
|
|
||||||
strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S",
|
if (strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S %Z",
|
||||||
localtime(&slaves->seen));
|
localtime(&slaves->seen)) == 0)
|
||||||
|
strlcpy(str, "Unknown time", sizeof(str));
|
||||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
|
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
|
||||||
|
|
||||||
slaves = slaves->next;
|
slaves = slaves->next;
|
||||||
@@ -482,6 +489,7 @@ static struct getargs args[] = {
|
|||||||
{ "keytab", 'k', arg_string, &keytab_str,
|
{ "keytab", 'k', arg_string, &keytab_str,
|
||||||
"keytab to get authentication from", "kspec" },
|
"keytab to get authentication from", "kspec" },
|
||||||
{ "database", 'd', arg_string, &database, "database", "file"},
|
{ "database", 'd', arg_string, &database, "database", "file"},
|
||||||
|
{ "slave-stats-file", 0, arg_string, &slave_stats_file, "file"},
|
||||||
{ "version", 0, arg_flag, &version_flag },
|
{ "version", 0, arg_flag, &version_flag },
|
||||||
{ "help", 0, arg_flag, &help_flag }
|
{ "help", 0, arg_flag, &help_flag }
|
||||||
};
|
};
|
||||||
@@ -566,6 +574,8 @@ main(int argc, char **argv)
|
|||||||
max_fd = max(max_fd, listen_fd);
|
max_fd = max(max_fd, listen_fd);
|
||||||
|
|
||||||
for (p = slaves; p != NULL; p = p->next) {
|
for (p = slaves; p != NULL; p = p->next) {
|
||||||
|
if (p->flags & SLAVE_F_DEAD)
|
||||||
|
continue;
|
||||||
FD_SET(p->fd, &readset);
|
FD_SET(p->fd, &readset);
|
||||||
max_fd = max(max_fd, p->fd);
|
max_fd = max(max_fd, p->fd);
|
||||||
}
|
}
|
||||||
@@ -584,9 +594,12 @@ 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)
|
||||||
for (p = slaves; p != NULL; p = p->next)
|
for (p = slaves; p != NULL; p = p->next) {
|
||||||
|
if (p->flags & SLAVE_F_DEAD)
|
||||||
|
continue;
|
||||||
send_diffs (context, p, log_fd, database, current_version);
|
send_diffs (context, p, log_fd, database, current_version);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret && FD_ISSET(signal_fd, &readset)) {
|
if (ret && FD_ISSET(signal_fd, &readset)) {
|
||||||
struct sockaddr_un peer_addr;
|
struct sockaddr_un peer_addr;
|
||||||
@@ -604,12 +617,15 @@ main(int argc, char **argv)
|
|||||||
send_diffs (context, p, log_fd, database, current_version);
|
send_diffs (context, p, log_fd, database, current_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(p = slaves; ret && p != NULL; p = p->next)
|
for(p = slaves; ret && p != NULL; p = p->next) {
|
||||||
|
if (p->flags & SLAVE_F_DEAD)
|
||||||
|
continue;
|
||||||
if (FD_ISSET(p->fd, &readset)) {
|
if (FD_ISSET(p->fd, &readset)) {
|
||||||
--ret;
|
--ret;
|
||||||
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(p);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret && FD_ISSET(listen_fd, &readset)) {
|
if (ret && FD_ISSET(listen_fd, &readset)) {
|
||||||
add_slave (context, keytab, &slaves, listen_fd);
|
add_slave (context, keytab, &slaves, listen_fd);
|
||||||
|
Reference in New Issue
Block a user