mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-24 23:31:40 +02:00
MINOR: server: make srv_set_admin_state() capable of telling why this happens
It will be important to help debugging some DNS resolution issues to know why a server was marked down, so let's make the function support a 3rd argument with an indication of the reason. Passing NULL will keep the message as-is.
This commit is contained in:
parent
b96dd28477
commit
8b42848a44
@ -189,9 +189,10 @@ void srv_set_stopping(struct server *s, const char *reason);
|
||||
* one flag at once. The equivalent "inherited" flag is propagated to all
|
||||
* tracking servers. Maintenance mode disables health checks (but not agent
|
||||
* checks). When either the flag is already set or no flag is passed, nothing
|
||||
* is done.
|
||||
* is done. If <cause> is non-null, it will be displayed at the end of the log
|
||||
* lines to justify the state change.
|
||||
*/
|
||||
void srv_set_admin_flag(struct server *s, enum srv_admin mode);
|
||||
void srv_set_admin_flag(struct server *s, enum srv_admin mode, const char *cause);
|
||||
|
||||
/* Disables admin flag <mode> (among SRV_ADMF_*) on server <s>. This is used to
|
||||
* stop enforcing either maint mode or drain mode. It is not allowed to set more
|
||||
@ -206,7 +207,7 @@ void srv_clr_admin_flag(struct server *s, enum srv_admin mode);
|
||||
*/
|
||||
static inline void srv_adm_set_maint(struct server *s)
|
||||
{
|
||||
srv_set_admin_flag(s, SRV_ADMF_FMAINT);
|
||||
srv_set_admin_flag(s, SRV_ADMF_FMAINT, NULL);
|
||||
srv_clr_admin_flag(s, SRV_ADMF_FDRAIN);
|
||||
}
|
||||
|
||||
@ -215,7 +216,7 @@ static inline void srv_adm_set_maint(struct server *s)
|
||||
*/
|
||||
static inline void srv_adm_set_drain(struct server *s)
|
||||
{
|
||||
srv_set_admin_flag(s, SRV_ADMF_FDRAIN);
|
||||
srv_set_admin_flag(s, SRV_ADMF_FDRAIN, NULL);
|
||||
srv_clr_admin_flag(s, SRV_ADMF_FMAINT);
|
||||
}
|
||||
|
||||
|
@ -5477,7 +5477,7 @@ static int stats_process_http_post(struct stream_interface *si)
|
||||
if (!(sv->admin & SRV_ADMF_FMAINT)) {
|
||||
altered_servers++;
|
||||
total_servers++;
|
||||
srv_set_admin_flag(sv, SRV_ADMF_FMAINT);
|
||||
srv_set_admin_flag(sv, SRV_ADMF_FMAINT, "'disable' on stats page");
|
||||
}
|
||||
break;
|
||||
case ST_ADM_ACTION_ENABLE:
|
||||
@ -5489,7 +5489,7 @@ static int stats_process_http_post(struct stream_interface *si)
|
||||
break;
|
||||
case ST_ADM_ACTION_STOP:
|
||||
if (!(sv->admin & SRV_ADMF_FDRAIN)) {
|
||||
srv_set_admin_flag(sv, SRV_ADMF_FDRAIN);
|
||||
srv_set_admin_flag(sv, SRV_ADMF_FDRAIN, "'stop' on stats page");
|
||||
altered_servers++;
|
||||
total_servers++;
|
||||
}
|
||||
|
26
src/server.c
26
src/server.c
@ -395,9 +395,10 @@ void srv_set_stopping(struct server *s, const char *reason)
|
||||
* one flag at once. The equivalent "inherited" flag is propagated to all
|
||||
* tracking servers. Maintenance mode disables health checks (but not agent
|
||||
* checks). When either the flag is already set or no flag is passed, nothing
|
||||
* is done.
|
||||
* is done. If <cause> is non-null, it will be displayed at the end of the log
|
||||
* lines to justify the state change.
|
||||
*/
|
||||
void srv_set_admin_flag(struct server *s, enum srv_admin mode)
|
||||
void srv_set_admin_flag(struct server *s, enum srv_admin mode, const char *cause)
|
||||
{
|
||||
struct check *check = &s->check;
|
||||
struct server *srv;
|
||||
@ -426,8 +427,9 @@ void srv_set_admin_flag(struct server *s, enum srv_admin mode)
|
||||
|
||||
if (s->state == SRV_ST_STOPPED) { /* server was already down */
|
||||
chunk_printf(&trash,
|
||||
"%sServer %s/%s was DOWN and now enters maintenance",
|
||||
s->flags & SRV_F_BACKUP ? "Backup " : "", s->proxy->id, s->id);
|
||||
"%sServer %s/%s was DOWN and now enters maintenance%s%s%s",
|
||||
s->flags & SRV_F_BACKUP ? "Backup " : "", s->proxy->id, s->id,
|
||||
cause ? " (" : "", cause ? cause : "", cause ? ")" : "");
|
||||
|
||||
srv_append_status(&trash, s, NULL, -1, (mode & SRV_ADMF_FMAINT));
|
||||
|
||||
@ -456,9 +458,10 @@ void srv_set_admin_flag(struct server *s, enum srv_admin mode)
|
||||
xferred = pendconn_redistribute(s);
|
||||
|
||||
chunk_printf(&trash,
|
||||
"%sServer %s/%s is going DOWN for maintenance",
|
||||
"%sServer %s/%s is going DOWN for maintenance%s%s%s",
|
||||
s->flags & SRV_F_BACKUP ? "Backup " : "",
|
||||
s->proxy->id, s->id);
|
||||
s->proxy->id, s->id,
|
||||
cause ? " (" : "", cause ? cause : "", cause ? ")" : "");
|
||||
|
||||
srv_append_status(&trash, s, NULL, xferred, (mode & SRV_ADMF_FMAINT));
|
||||
|
||||
@ -488,8 +491,9 @@ void srv_set_admin_flag(struct server *s, enum srv_admin mode)
|
||||
*/
|
||||
xferred = pendconn_redistribute(s);
|
||||
|
||||
chunk_printf(&trash, "%sServer %s/%s enters drain state",
|
||||
s->flags & SRV_F_BACKUP ? "Backup " : "", s->proxy->id, s->id);
|
||||
chunk_printf(&trash, "%sServer %s/%s enters drain state%s%s%s",
|
||||
s->flags & SRV_F_BACKUP ? "Backup " : "", s->proxy->id, s->id,
|
||||
cause ? " (" : "", cause ? cause : "", cause ? ")" : "");
|
||||
|
||||
srv_append_status(&trash, s, NULL, xferred, (mode & SRV_ADMF_FDRAIN));
|
||||
|
||||
@ -509,7 +513,7 @@ void srv_set_admin_flag(struct server *s, enum srv_admin mode)
|
||||
mode = SRV_ADMF_IDRAIN;
|
||||
|
||||
for (srv = s->trackers; srv; srv = srv->tracknext)
|
||||
srv_set_admin_flag(srv, mode);
|
||||
srv_set_admin_flag(srv, mode, cause);
|
||||
}
|
||||
|
||||
/* Disables admin flag <mode> (among SRV_ADMF_*) on server <s>. This is used to
|
||||
@ -743,10 +747,10 @@ static void srv_propagate_admin_state(struct server *srv)
|
||||
|
||||
for (srv2 = srv->trackers; srv2; srv2 = srv2->tracknext) {
|
||||
if (srv->admin & (SRV_ADMF_MAINT | SRV_ADMF_CMAINT))
|
||||
srv_set_admin_flag(srv2, SRV_ADMF_IMAINT);
|
||||
srv_set_admin_flag(srv2, SRV_ADMF_IMAINT, NULL);
|
||||
|
||||
if (srv->admin & SRV_ADMF_DRAIN)
|
||||
srv_set_admin_flag(srv2, SRV_ADMF_IDRAIN);
|
||||
srv_set_admin_flag(srv2, SRV_ADMF_IDRAIN, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user