2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-09-03 15:56:00 +00:00

[master] Emit log messages when the server is stable

Emit a log message when the server had completed initialization
and is about to start dispatching.  And emit log messages when
both peers in a failover pair have reached the normal state.
This commit is contained in:
Shawn Routhier
2013-11-08 12:29:20 -08:00
parent cde11a4cdb
commit f88446f16b
5 changed files with 80 additions and 40 deletions

View File

@@ -96,6 +96,15 @@ work on other platforms. Please report any problems and suggested fixes to
to a client and before the server stops. Using this option is to a client and before the server stops. Using this option is
not recommended. not recommended.
- Add some logging statements to indicate when the server is ready
to serve. One statement is emitted after the server has finished
reading its files and is about to enter the dispatch loop.
This is "Server starting service.".
The second is emitted when a server determines that both it and
its failover peer are in the normal state.
This is "failover peer <name>: Both servers normal."
[ISC-Bugs 33208]
Changes since 4.2.5 Changes since 4.2.5
- Address static analysis warnings. - Address static analysis warnings.

View File

@@ -785,6 +785,9 @@ main(int argc, char **argv) {
signal(SIGINT, dhcp_signal_handler); /* control-c */ signal(SIGINT, dhcp_signal_handler); /* control-c */
signal(SIGTERM, dhcp_signal_handler); /* kill */ signal(SIGTERM, dhcp_signal_handler); /* kill */
/* Log that we are about to start working */
log_info("Server starting service.");
/* /*
* Receive packets and dispatch them... * Receive packets and dispatch them...
* dispatch() will return only when we are shutting down. * dispatch() will return only when we are shutting down.

View File

@@ -1794,6 +1794,10 @@ isc_result_t dhcp_failover_set_state (dhcp_failover_state_t *state,
state -> name, dhcp_failover_state_name_print (saved_state), state -> name, dhcp_failover_state_name_print (saved_state),
dhcp_failover_state_name_print (state -> me.state)); dhcp_failover_state_name_print (state -> me.state));
/* If both servers are now normal log it */
if ((state->me.state == normal) && (state->partner.state == normal))
log_info("failover peer %s: Both servers normal", state->name);
/* If we were in startup and we just left it, cancel the timeout. */ /* If we were in startup and we just left it, cancel the timeout. */
if (new_state != startup && saved_state == startup) if (new_state != startup && saved_state == startup)
cancel_timeout (dhcp_failover_startup_timeout, state); cancel_timeout (dhcp_failover_startup_timeout, state);
@@ -1987,6 +1991,10 @@ isc_result_t dhcp_failover_peer_state_changed (dhcp_failover_state_t *state,
dhcp_failover_state_name_print (previous_state), dhcp_failover_state_name_print (previous_state),
dhcp_failover_state_name_print (state -> partner.state)); dhcp_failover_state_name_print (state -> partner.state));
/* If both servers are now normal log it */
if ((state->me.state == normal) && (state->partner.state == normal))
log_info("failover peer %s: Both servers normal", state->name);
if (!write_failover_state (state) || !commit_leases ()) { if (!write_failover_state (state) || !commit_leases ()) {
/* This is bad, but it's not fatal. Of course, if we /* This is bad, but it's not fatal. Of course, if we
can't write to the lease database, we're not going to can't write to the lease database, we're not going to

View File

@@ -2296,13 +2296,48 @@ void hw_hash_delete (lease)
lease_dereference (&head, MDL); lease_dereference (&head, MDL);
} }
/* Write v4 leases to permanent storage. */
int write_leases4(void) {
struct lease *l;
struct shared_network *s;
struct pool *p;
struct lease **lptr[RESERVED_LEASES+1];
int num_written = 0, i;
/* Write all the leases. */
for (s = shared_networks; s; s = s->next) {
for (p = s->pools; p; p = p->next) {
lptr[FREE_LEASES] = &p->free;
lptr[ACTIVE_LEASES] = &p->active;
lptr[EXPIRED_LEASES] = &p->expired;
lptr[ABANDONED_LEASES] = &p->abandoned;
lptr[BACKUP_LEASES] = &p->backup;
lptr[RESERVED_LEASES] = &p->reserved;
for (i = FREE_LEASES; i <= RESERVED_LEASES; i++) {
for (l = *(lptr[i]); l; l = l->next) {
#if !defined (DEBUG_DUMP_ALL_LEASES)
if (l->hardware_addr.hlen != 0 || l->uid_len != 0 ||
l->tsfp != 0 || l->binding_state != FTS_FREE)
#endif
{
if (write_lease(l) == 0)
return (0);
num_written++;
}
}
}
}
}
log_info ("Wrote %d leases to leases file.", num_written);
return (1);
}
/* Write all interesting leases to permanent storage. */ /* Write all interesting leases to permanent storage. */
int write_leases () int write_leases ()
{ {
struct lease *l;
struct shared_network *s;
struct pool *p;
struct host_decl *hp; struct host_decl *hp;
struct group_object *gp; struct group_object *gp;
struct hash_bucket *hb; struct hash_bucket *hb;
@@ -2310,7 +2345,6 @@ int write_leases ()
struct collection *colp; struct collection *colp;
int i; int i;
int num_written; int num_written;
struct lease **lptr[RESERVED_LEASES+1];
/* write all the dynamically-created class declarations. */ /* write all the dynamically-created class declarations. */
if (collections->classes) { if (collections->classes) {
@@ -2390,41 +2424,22 @@ int write_leases ()
return 0; return 0;
#endif #endif
/* Write all the leases. */ switch (local_family) {
num_written = 0; case AF_INET:
for (s = shared_networks; s; s = s -> next) { if (write_leases4() == 0)
for (p = s -> pools; p; p = p -> next) { return (0);
lptr [FREE_LEASES] = &p -> free; break;
lptr [ACTIVE_LEASES] = &p -> active;
lptr [EXPIRED_LEASES] = &p -> expired;
lptr [ABANDONED_LEASES] = &p -> abandoned;
lptr [BACKUP_LEASES] = &p -> backup;
lptr [RESERVED_LEASES] = &p->reserved;
for (i = FREE_LEASES; i <= RESERVED_LEASES; i++) {
for (l = *(lptr [i]); l; l = l -> next) {
#if !defined (DEBUG_DUMP_ALL_LEASES)
if (l->hardware_addr.hlen != 0 || l->uid_len != 0 ||
l->tsfp != 0 || l->binding_state != FTS_FREE)
#endif
{
if (!write_lease (l))
return 0;
num_written++;
}
}
}
}
}
log_info ("Wrote %d leases to leases file.", num_written);
#ifdef DHCPv6 #ifdef DHCPv6
if (!write_leases6()) { case AF_INET6:
return 0; if (write_leases6() == 0)
} return (0);
break;
#endif /* DHCPv6 */ #endif /* DHCPv6 */
if (!commit_leases ()) }
return 0;
return 1; if (commit_leases() == 0)
return (0);
return (1);
} }
/* In addition to placing this lease upon a lease queue depending on its /* In addition to placing this lease upon a lease queue depending on its

View File

@@ -2166,20 +2166,25 @@ write_ia_leases(const void *name, unsigned len, void *value) {
*/ */
int int
write_leases6(void) { write_leases6(void) {
int nas, tas, pds;
write_error = 0; write_error = 0;
write_server_duid(); write_server_duid();
ia_hash_foreach(ia_na_active, write_ia_leases); nas = ia_hash_foreach(ia_na_active, write_ia_leases);
if (write_error) { if (write_error) {
return 0; return 0;
} }
ia_hash_foreach(ia_ta_active, write_ia_leases); tas = ia_hash_foreach(ia_ta_active, write_ia_leases);
if (write_error) { if (write_error) {
return 0; return 0;
} }
ia_hash_foreach(ia_pd_active, write_ia_leases); pds = ia_hash_foreach(ia_pd_active, write_ia_leases);
if (write_error) { if (write_error) {
return 0; return 0;
} }
log_info("Wrote %d NA, %d TA, %d PD leases to lease file.",
nas, tas, pds);
return 1; return 1;
} }
#endif /* DHCPv6 */ #endif /* DHCPv6 */