Add a new optional srv_backup field at the end of the server state
output. The field is set to 1 when the server has SRV_F_BACKUP set,
and 0 otherwise.
Keep the server state file version unchanged and only increase the
maximum number of fields, following the existing optional-field model
used by the latest server state additions.
The field is intentionally not restored from the state file because
backup is a configuration property and applying it from a previous
state could override an active configuration change after reload.
---
doc/management.txt | 2 ++
include/haproxy/server-t.h | 7 ++++---
reg-tests/checks/1be_40srv_odd_health_checks.vtc | 2 +-
reg-tests/checks/40be_2srv_odd_health_checks.vtc | 4 ++--
reg-tests/checks/4be_1srv_health_checks.vtc | 7 +++----
reg-tests/server/cli_add_server.vtc | 7 +++++++
src/proxy.c | 5 +++--
src/server_state.c | 7 +++++++
8 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/doc/management.txt b/doc/management.txt
index f05457cd7..a90aa96bd 100644
--- a/doc/management.txt
+++ b/doc/management.txt
@@ -3497,6 +3497,8 @@ show servers state [<backend>]
srv_check_addr: Server health check address.
srv_agent_addr: Server health agent address.
srv_agent_port: Server health agent port.
+ srv_backup: Flag to know if the server is a backup
+ server.
=20
show sess [<options>*]
Dump all known active streams (formerly called "sessions"). Avoid doing =
this
diff --git a/include/haproxy/server-t.h b/include/haproxy/server-t.h
index 7a2a95400..8e820a96e 100644
--- a/include/haproxy/server-t.h
+++ b/include/haproxy/server-t.h
@@ -146,11 +146,12 @@ enum srv_init_state {
"srv_check_port " \
"srv_check_addr " \
"srv_agent_addr " \
- "srv_agent_port"
+ "srv_agent_port " \
+ "srv_backup"
=20
-#define SRV_STATE_FILE_MAX_FIELDS 25
+#define SRV_STATE_FILE_MAX_FIELDS 26
#define SRV_STATE_FILE_MIN_FIELDS_VERSION_1 20
-#define SRV_STATE_FILE_MAX_FIELDS_VERSION_1 25
+#define SRV_STATE_FILE_MAX_FIELDS_VERSION_1 26
#define SRV_STATE_LINE_MAXLEN 2000
=20
/* server flags -- 32 bits */
diff --git a/reg-tests/checks/1be_40srv_odd_health_checks.vtc b/reg-tests/c=
hecks/1be_40srv_odd_health_checks.vtc
index 09bc70b78..2aded123b 100644
--- a/reg-tests/checks/1be_40srv_odd_health_checks.vtc
+++ b/reg-tests/checks/1be_40srv_odd_health_checks.vtc
@@ -116,6 +116,6 @@ syslog S -wait
=20
haproxy h1 -cli {
send "show servers state"
- expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port\n2 be1 1 srv0 ${s0_addr} =
2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} - 0 0 - - 0\n2 be1 2 srv1 $=
{s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s1_port} - 0 0=
- - 0\n2 be1 3 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2_p=
ort} - 0 0 - - 0\n2 be1 4 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:=
]]+ ){3}0 0 0 - ${s3_port} - 0 0 - - 0\n2 be1 5 srv4 ${s4_addr} 2 0 1 1 [[:=
digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} - 0 0 - - 0\n2 be1 6 srv5 ${s5_addr} 2=
0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_port} - 0 0 - - 0\n2 b=
e1 7 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s6_port} - 0 0 =
- - 0\n2 be1 8 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0=
0 - ${s7_port} - 0 0 - - 0\n2 be1 9 srv8 ${s8_addr} 2 0 1 1 [[:digit:]]+ 1=
0 1 0 0 0 0 - ${s8_port} - 0 0 - - 0\n2 be1 10 srv9 ${s9_addr} 2 0 1 1 [[:=
digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port} - 0 0 - - 0\n2 be1 11 srv1=
0 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s10_port} - 0 0 - - 0\=
n2 be1 12 srv11 ${s11_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 =
- ${s11_port} - 0 0 - - 0\n2 be1 13 srv12 ${s12_addr} 2 0 1 1 [[:digit:]]+ =
1 0 1 0 0 0 0 - ${s12_port} - 0 0 - - 0\n2 be1 14 srv13 ${s13_addr} 2 0 1 1=
[[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s13_port} - 0 0 - - 0\n2 be1 15=
srv14 ${s14_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s14_port} - 0 0 -=
- 0\n2 be1 16 srv15 ${s15_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0=
0 0 - ${s15_port} - 0 0 - - 0\n2 be1 17 srv16 ${s16_addr} 2 0 1 1 [[:digit=
:]]+ 1 0 1 0 0 0 0 - ${s16_port} - 0 0 - - 0\n2 be1 18 srv17 ${s17_addr} 2 =
0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s17_port} - 0 0 - - 0\n2 b=
e1 19 srv18 ${s18_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} - =
0 0 - - 0\n2 be1 20 srv19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ =
){3}0 0 0 - ${s19_port} - 0 0 - - 0\n2 be1 21 srv20 ${s20_addr} 2 0 1 1 [[:=
digit:]]+ 1 0 1 0 0 0 0 - ${s20_port} - 0 0 - - 0\n2 be1 22 srv21 ${s21_add=
r} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} - 0 0 - - 0=
\n2 be1 23 srv22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_por=
t} - 0 0 - - 0\n2 be1 24 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit=
:]]+ ){3}0 0 0 - ${s23_port} - 0 0 - - 0\n2 be1 25 srv24 ${s24_addr} 2 0 1 =
1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s24_port} - 0 0 - - 0\n2 be1 26 srv25 ${s2=
5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} - 0 0 =
- - 0\n2 be1 27 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2=
6_port} - 0 0 - - 0\n2 be1 28 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:=
digit:]]+ ){3}0 0 0 - ${s27_port} - 0 0 - - 0\n2 be1 29 srv28 ${s28_addr} 2=
0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} - 0 0 - - 0\n2 be1 30 srv29=
${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_port} -=
0 0 - - 0\n2 be1 31 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 -=
${s30_port} - 0 0 - - 0\n2 be1 32 srv31 ${s31_addr} 2 0 1 1 [[:digit:]]+ 6=
([[:digit:]]+ ){3}0 0 0 - ${s31_port} - 0 0 - - 0\n2 be1 33 srv32 ${s32_ad=
dr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} - 0 0 - - 0\n2 be1 34 =
srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s33_po=
rt} - 0 0 - - 0\n2 be1 35 srv34 ${s34_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 =
0 0 - ${s34_port} - 0 0 - - 0\n2 be1 36 srv35 ${s35_addr} 2 0 1 1 [[:digit:=
]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} - 0 0 - - 0\n2 be1 37 srv36 ${s=
36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_port} - 0 0 - - 0\n2 be=
1 38 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s=
37_port} - 0 0 - - 0\n2 be1 39 srv38 ${s38_addr} 2 0 1 1 [[:digit:]]+ 1 0 1=
0 0 0 0 - ${s38_port} - 0 0 - - 0\n2 be1 40 srv39 ${s39_addr} 2 0 1 1 [[:d=
igit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} - 0 0 - - 0\n"
+ expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port srv_backup\n2 be1 1 srv0 =
${s0_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} - 0 0 - - 0 0\n2=
be1 2 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s=
1_port} - 0 0 - - 0 0\n2 be1 3 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0=
0 0 0 - ${s2_port} - 0 0 - - 0 0\n2 be1 4 srv3 ${s3_addr} 2 0 1 1 [[:digit=
:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s3_port} - 0 0 - - 0 0\n2 be1 5 srv4 ${s=
4_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} - 0 0 - - 0 0\n2 be=
1 6 srv5 ${s5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_p=
ort} - 0 0 - - 0 0\n2 be1 7 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 =
0 0 - ${s6_port} - 0 0 - - 0 0\n2 be1 8 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]=
+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s7_port} - 0 0 - - 0 0\n2 be1 9 srv8 ${s8_a=
ddr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s8_port} - 0 0 - - 0 0\n2 be1 1=
0 srv9 ${s9_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_por=
t} - 0 0 - - 0 0\n2 be1 11 srv10 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0=
0 0 - ${s10_port} - 0 0 - - 0 0\n2 be1 12 srv11 ${s11_addr} 2 0 1 1 [[:dig=
it:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s11_port} - 0 0 - - 0 0\n2 be1 13 srv1=
2 ${s12_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s12_port} - 0 0 - - 0 =
0\n2 be1 14 srv13 ${s13_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 =
0 - ${s13_port} - 0 0 - - 0 0\n2 be1 15 srv14 ${s14_addr} 2 0 1 1 [[:digit:=
]]+ 1 0 1 0 0 0 0 - ${s14_port} - 0 0 - - 0 0\n2 be1 16 srv15 ${s15_addr} 2=
0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s15_port} - 0 0 - - 0 0\n=
2 be1 17 srv16 ${s16_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s16_port}=
- 0 0 - - 0 0\n2 be1 18 srv17 ${s17_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit=
:]]+ ){3}0 0 0 - ${s17_port} - 0 0 - - 0 0\n2 be1 19 srv18 ${s18_addr} 2 0 =
1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} - 0 0 - - 0 0\n2 be1 20 srv19 =
${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s19_port} - =
0 0 - - 0 0\n2 be1 21 srv20 ${s20_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 =
- ${s20_port} - 0 0 - - 0 0\n2 be1 22 srv21 ${s21_addr} 2 0 1 1 [[:digit:]]=
+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} - 0 0 - - 0 0\n2 be1 23 srv22 ${s=
22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_port} - 0 0 - - 0 0\n2 =
be1 24 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - $=
{s23_port} - 0 0 - - 0 0\n2 be1 25 srv24 ${s24_addr} 2 0 1 1 [[:digit:]]+ 1=
0 1 0 0 0 0 - ${s24_port} - 0 0 - - 0 0\n2 be1 26 srv25 ${s25_addr} 2 0 1 =
1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} - 0 0 - - 0 0\n2 be1=
27 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s26_port} - 0 =
0 - - 0 0\n2 be1 28 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ =
){3}0 0 0 - ${s27_port} - 0 0 - - 0 0\n2 be1 29 srv28 ${s28_addr} 2 0 1 1 [=
[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} - 0 0 - - 0 0\n2 be1 30 srv29 ${s29=
_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_port} - 0 0 -=
- 0 0\n2 be1 31 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s=
30_port} - 0 0 - - 0 0\n2 be1 32 srv31 ${s31_addr} 2 0 1 1 [[:digit:]]+ 6 (=
[[:digit:]]+ ){3}0 0 0 - ${s31_port} - 0 0 - - 0 0\n2 be1 33 srv32 ${s32_ad=
dr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} - 0 0 - - 0 0\n2 be1 3=
4 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s33_=
port} - 0 0 - - 0 0\n2 be1 35 srv34 ${s34_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 =
0 0 0 0 - ${s34_port} - 0 0 - - 0 0\n2 be1 36 srv35 ${s35_addr} 2 0 1 1 [[:=
digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} - 0 0 - - 0 0\n2 be1 37 s=
rv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_port} - 0 0 - -=
0 0\n2 be1 38 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0=
0 0 - ${s37_port} - 0 0 - - 0 0\n2 be1 39 srv38 ${s38_addr} 2 0 1 1 [[:dig=
it:]]+ 1 0 1 0 0 0 0 - ${s38_port} - 0 0 - - 0 0\n2 be1 40 srv39 ${s39_addr=
} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} - 0 0 - - 0 =
0\n"
}
=20
diff --git a/reg-tests/checks/40be_2srv_odd_health_checks.vtc b/reg-tests/c=
hecks/40be_2srv_odd_health_checks.vtc
index 496704536..af250d1fc 100644
--- a/reg-tests/checks/40be_2srv_odd_health_checks.vtc
+++ b/reg-tests/checks/40be_2srv_odd_health_checks.vtc
@@ -642,8 +642,8 @@ haproxy h1 -cli {
# output produced using the command below (warning, a bug inserts a "b=
e0" every other line:
# for ((i=3D0;i<40;i++)); do id=3D$((i/2+2)); be=3D$((i|1)); si=3D$(((=
i&1)+1));
# if ((i&1)); then chk=3D"6 ([[:digit:]]+ ){3}"; else chk=3D"1 0 1 0=
";fi;
- # printf "%d be%d %d srv%d \${s%d_addr} 2 0 1 1 [[:digit:]]+ %s0 0 0=
- \${s%d_port} - 0 0 - - 0\n" "$id" "$be" "$si" "$i" "$i" "$chk" "$i" "$i"=
;
+ # printf "%d be%d %d srv%d \${s%d_addr} 2 0 1 1 [[:digit:]]+ %s0 0 0=
- \${s%d_port} - 0 0 - - 0 0\n" "$id" "$be" "$si" "$i" "$i" "$chk" "$i" "$=
i" ;
# done|grep -v be0|sed 's,$,\\n,'| tr -d '\n'
- expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port\n2 be1 1 srv0 ${s0_addr} =
2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} - 0 0 - - 0\n2 be1 2 srv1 $=
{s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s1_port} - 0 0=
- - 0\n3 be3 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2_p=
ort} - 0 0 - - 0\n3 be3 2 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:=
]]+ ){3}0 0 0 - ${s3_port} - 0 0 - - 0\n4 be5 1 srv4 ${s4_addr} 2 0 1 1 [[:=
digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} - 0 0 - - 0\n4 be5 2 srv5 ${s5_addr} 2=
0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_port} - 0 0 - - 0\n5 b=
e7 1 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s6_port} - 0 0 =
- - 0\n5 be7 2 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0=
0 - ${s7_port} - 0 0 - - 0\n6 be9 1 srv8 ${s8_addr} 2 0 1 1 [[:digit:]]+ 1=
0 1 0 0 0 0 - ${s8_port} - 0 0 - - 0\n6 be9 2 srv9 ${s9_addr} 2 0 1 1 [[:d=
igit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port} - 0 0 - - 0\n7 be11 1 srv10=
${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s10_port} - 0 0 - - 0\n=
7 be11 2 srv11 ${s11_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 -=
${s11_port} - 0 0 - - 0\n8 be13 1 srv12 ${s12_addr} 2 0 1 1 [[:digit:]]+ 1=
0 1 0 0 0 0 - ${s12_port} - 0 0 - - 0\n8 be13 2 srv13 ${s13_addr} 2 0 1 1 =
[[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s13_port} - 0 0 - - 0\n9 be15 1 =
srv14 ${s14_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s14_port} - 0 0 - =
- 0\n9 be15 2 srv15 ${s15_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 =
0 0 - ${s15_port} - 0 0 - - 0\n10 be17 1 srv16 ${s16_addr} 2 0 1 1 [[:digit=
:]]+ 1 0 1 0 0 0 0 - ${s16_port} - 0 0 - - 0\n10 be17 2 srv17 ${s17_addr} 2=
0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s17_port} - 0 0 - - 0\n11=
be19 1 srv18 ${s18_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} =
- 0 0 - - 0\n11 be19 2 srv19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]=
]+ ){3}0 0 0 - ${s19_port} - 0 0 - - 0\n12 be21 1 srv20 ${s20_addr} 2 0 1 1=
[[:digit:]]+ 1 0 1 0 0 0 0 - ${s20_port} - 0 0 - - 0\n12 be21 2 srv21 ${s2=
1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} - 0 0 =
- - 0\n13 be23 1 srv22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s=
22_port} - 0 0 - - 0\n13 be23 2 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([=
[:digit:]]+ ){3}0 0 0 - ${s23_port} - 0 0 - - 0\n14 be25 1 srv24 ${s24_addr=
} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s24_port} - 0 0 - - 0\n14 be25 2 s=
rv25 ${s25_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_por=
t} - 0 0 - - 0\n15 be27 1 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 =
0 0 - ${s26_port} - 0 0 - - 0\n15 be27 2 srv27 ${s27_addr} 2 0 1 1 [[:digit=
:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s27_port} - 0 0 - - 0\n16 be29 1 srv28 $=
{s28_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} - 0 0 - - 0\n16=
be29 2 srv29 ${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - =
${s29_port} - 0 0 - - 0\n17 be31 1 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1=
0 1 0 0 0 0 - ${s30_port} - 0 0 - - 0\n17 be31 2 srv31 ${s31_addr} 2 0 1 1=
[[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s31_port} - 0 0 - - 0\n18 be33 =
1 srv32 ${s32_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} - 0 0 =
- - 0\n18 be33 2 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3=
}0 0 0 - ${s33_port} - 0 0 - - 0\n19 be35 1 srv34 ${s34_addr} 2 0 1 1 [[:di=
git:]]+ 1 0 1 0 0 0 0 - ${s34_port} - 0 0 - - 0\n19 be35 2 srv35 ${s35_addr=
} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} - 0 0 - - 0\=
n20 be37 1 srv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_por=
t} - 0 0 - - 0\n20 be37 2 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digi=
t:]]+ ){3}0 0 0 - ${s37_port} - 0 0 - - 0\n21 be39 1 srv38 ${s38_addr} 2 0 =
1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s38_port} - 0 0 - - 0\n21 be39 2 srv39 $=
{s39_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} - 0=
0 - - 0\n"
+ expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port srv_backup\n2 be1 1 srv0 =
${s0_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} - 0 0 - - 0 0\n2=
be1 2 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s=
1_port} - 0 0 - - 0 0\n3 be3 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0=
0 0 0 - ${s2_port} - 0 0 - - 0 0\n3 be3 2 srv3 ${s3_addr} 2 0 1 1 [[:digit=
:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s3_port} - 0 0 - - 0 0\n4 be5 1 srv4 ${s=
4_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} - 0 0 - - 0 0\n4 be=
5 2 srv5 ${s5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_p=
ort} - 0 0 - - 0 0\n5 be7 1 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 =
0 0 - ${s6_port} - 0 0 - - 0 0\n5 be7 2 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]=
+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s7_port} - 0 0 - - 0 0\n6 be9 1 srv8 ${s8_a=
ddr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s8_port} - 0 0 - - 0 0\n6 be9 2=
srv9 ${s9_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port=
} - 0 0 - - 0 0\n7 be11 1 srv10 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 =
0 0 - ${s10_port} - 0 0 - - 0 0\n7 be11 2 srv11 ${s11_addr} 2 0 1 1 [[:digi=
t:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s11_port} - 0 0 - - 0 0\n8 be13 1 srv12=
${s12_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s12_port} - 0 0 - - 0 0=
\n8 be13 2 srv13 ${s13_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0=
- ${s13_port} - 0 0 - - 0 0\n9 be15 1 srv14 ${s14_addr} 2 0 1 1 [[:digit:]=
]+ 1 0 1 0 0 0 0 - ${s14_port} - 0 0 - - 0 0\n9 be15 2 srv15 ${s15_addr} 2 =
0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s15_port} - 0 0 - - 0 0\n1=
0 be17 1 srv16 ${s16_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s16_port}=
- 0 0 - - 0 0\n10 be17 2 srv17 ${s17_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digi=
t:]]+ ){3}0 0 0 - ${s17_port} - 0 0 - - 0 0\n11 be19 1 srv18 ${s18_addr} 2 =
0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} - 0 0 - - 0 0\n11 be19 2 srv=
19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s19_port}=
- 0 0 - - 0 0\n12 be21 1 srv20 ${s20_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 =
0 0 - ${s20_port} - 0 0 - - 0 0\n12 be21 2 srv21 ${s21_addr} 2 0 1 1 [[:dig=
it:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} - 0 0 - - 0 0\n13 be23 1 srv=
22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_port} - 0 0 - - 0=
0\n13 be23 2 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 =
0 0 - ${s23_port} - 0 0 - - 0 0\n14 be25 1 srv24 ${s24_addr} 2 0 1 1 [[:dig=
it:]]+ 1 0 1 0 0 0 0 - ${s24_port} - 0 0 - - 0 0\n14 be25 2 srv25 ${s25_add=
r} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} - 0 0 - - 0=
0\n15 be27 1 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s26_=
port} - 0 0 - - 0 0\n15 be27 2 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[=
:digit:]]+ ){3}0 0 0 - ${s27_port} - 0 0 - - 0 0\n16 be29 1 srv28 ${s28_add=
r} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} - 0 0 - - 0 0\n16 be29 =
2 srv29 ${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_=
port} - 0 0 - - 0 0\n17 be31 1 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1=
0 0 0 0 - ${s30_port} - 0 0 - - 0 0\n17 be31 2 srv31 ${s31_addr} 2 0 1 1 [=
[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s31_port} - 0 0 - - 0 0\n18 be33 =
1 srv32 ${s32_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} - 0 0 =
- - 0 0\n18 be33 2 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ )=
{3}0 0 0 - ${s33_port} - 0 0 - - 0 0\n19 be35 1 srv34 ${s34_addr} 2 0 1 1 [=
[:digit:]]+ 1 0 1 0 0 0 0 - ${s34_port} - 0 0 - - 0 0\n19 be35 2 srv35 ${s3=
5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} - 0 0 =
- - 0 0\n20 be37 1 srv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - $=
{s36_port} - 0 0 - - 0 0\n20 be37 2 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ =
6 ([[:digit:]]+ ){3}0 0 0 - ${s37_port} - 0 0 - - 0 0\n21 be39 1 srv38 ${s3=
8_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s38_port} - 0 0 - - 0 0\n21 =
be39 2 srv39 ${s39_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - $=
{s39_port} - 0 0 - - 0 0\n"
}
=20
diff --git a/reg-tests/checks/4be_1srv_health_checks.vtc b/reg-tests/checks=
/4be_1srv_health_checks.vtc
index da993d394..e33841633 100644
--- a/reg-tests/checks/4be_1srv_health_checks.vtc
+++ b/reg-tests/checks/4be_1srv_health_checks.vtc
@@ -143,7 +143,7 @@ haproxy h1 -conf {
haproxy h1 -cli {
barrier b1 sync
send "show servers state"
- expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port\n6 be1 1 srv1 ${s1_addr} =
2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s1_port} - 0 0 - - 0\n7 be2 1 srv=
2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s2_port} - 0 0 - - 0=
\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s3_port=
} - 0 0 - - 0\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 =
0 - ${s4_port} - 0 0 - - 0"
+ expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port srv_backup\n6 be1 1 srv1 =
${s1_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s1_port} - 0 0 - - 0 0=
\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s2_port=
} - 0 0 - - 0 0\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 =
0 0 - ${s3_port} - 0 0 - - 0 0\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]=
+ 6 3 1 [67] 0 0 0 - ${s4_port} - 0 0 - - 0 0"
}
=20
haproxy h1 -cli {
@@ -169,7 +169,7 @@ haproxy h1 -cli {
haproxy h1 -cli {
barrier b1 sync
send "show servers state"
- expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port\n6 be1 1 srv1 ${s1_addr} =
0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s1_port} - 0 0 - - 0\n7 be2 1=
srv2 ${s2_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s2_port} - 0=
0 - - 0\n8 be3 1 srv3 ${s3_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0=
- ${s3_port} - 0 0 - - 0\n9 be4 1 srv4 ${s4_addr} 0 1 1 1 [[:digit:]]+ 6 3=
[01] 1[45] 0 0 0 - ${s4_port} - 0 0 - - 0"
+ expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port srv_backup\n6 be1 1 srv1 =
${s1_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s1_port} - 0 0 - -=
0 0\n7 be2 1 srv2 ${s2_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - $=
{s2_port} - 0 0 - - 0 0\n8 be3 1 srv3 ${s3_addr} 0 1 1 1 [[:digit:]]+ 6 3 [=
01] 1[45] 0 0 0 - ${s3_port} - 0 0 - - 0 0\n9 be4 1 srv4 ${s4_addr} 0 1 1 1=
[[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s4_port} - 0 0 - - 0 0"
}
=20
haproxy h1 -cli {
@@ -195,11 +195,10 @@ haproxy h1 -cli {
haproxy h1 -cli {
barrier b1 sync
send "show servers state"
- expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port\n6 be1 1 srv1 ${s1_addr} =
2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s1_port} - 0 0 - - 0\n7 be2 1 =
srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s2_port} - 0 0=
- - 0\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - =
${s3_port} - 0 0 - - 0\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 [03]=
1 [67] 0 0 0 - ${s4_port} - 0 0 - - 0"
+ expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_ad=
min_state srv_uweight srv_iweight srv_time_since_last_change srv_check_stat=
us srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_f=
orced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_=
port srv_check_addr srv_agent_addr srv_agent_port srv_backup\n6 be1 1 srv1 =
${s1_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s1_port} - 0 0 - - =
0 0\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s=
2_port} - 0 0 - - 0 0\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 [03] =
1 [67] 0 0 0 - ${s3_port} - 0 0 - - 0 0\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[=
:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s4_port} - 0 0 - - 0 0"
}
=20
syslog S1 -wait
syslog S2 -wait
syslog S3 -wait
syslog S4 -wait
-
diff --git a/reg-tests/server/cli_add_server.vtc b/reg-tests/server/cli_add=
_server.vtc
index 8081312ba..1f2a6933e 100644
--- a/reg-tests/server/cli_add_server.vtc
+++ b/reg-tests/server/cli_add_server.vtc
@@ -69,6 +69,13 @@ haproxy h1 -cli {
# specify the proto, it should be accepted for this backend
send "add server test/s2 ${s1_addr}:${s1_port} proto h2"
expect ~ "New server registered."
+
+ # valid backup command
+ send "add server test/s3 ${s1_addr}:${s1_port} backup"
+ expect ~ "New server registered."
+
+ send "show servers state test"
+ expect ~ "test 3 s3 ${s1_addr} .* - ${s1_port} - 0 0 - - 0 1"
}
=20
# dynamic servers are created on MAINT mode and should not be available at=
first
diff --git a/src/proxy.c b/src/proxy.c
index bd2a8ce59..7eb4da447 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -3027,7 +3027,7 @@ static int dump_servers_state(struct appctx *appctx)
"%d %d %d %d %d "
"%d %d %s %u "
"%s %d %d "
- "%s %s %d"
+ "%s %s %d %d"
"\n",
px->uuid, HA_ANON_CLI(px->id),
srv->puid, HA_ANON_CLI(srv->id),
@@ -3039,7 +3039,8 @@ static int dump_servers_state(struct appctx *appctx)
bk_f_forced_id, srv_f_forced_id,
srv->hostname ? HA_ANON_CLI(srv->hostname)
: "-", srv->svc_port,
srvrecord ? srvrecord : "-", srv->use_ssl,
srv->check.port,
- srv_check_addr, srv_agent_addr,
srv->agent.port);
+ srv_check_addr, srv_agent_addr,
srv->agent.port,
+ (srv->flags & SRV_F_BACKUP) ? 1 : 0);
} else {
/* show servers conn */
int thr;
diff --git a/src/server_state.c b/src/server_state.c
index 1fa2ffd94..ae70786e7 100644
--- a/src/server_state.c
+++ b/src/server_state.c
@@ -94,6 +94,12 @@ static void srv_state_srv_update(struct server *srv, int=
version, char **params)
* srv_check_addr: params[18]
* srv_agent_addr: params[19]
* srv_agent_port: params[20]
+ * srv_backup: params[21]
+ */
+
+ /* srv_backup is intentionally not applied from the state file. It is a
+ * configuration property and restoring it could override a
configuration
+ * change between two reloads.
*/
=20
/* validating srv_op_state */
@@ -627,6 +633,7 @@ static int srv_state_parse_line(char *buf, const int ve=
rsion, char **params)
* srv_check_addr: params[22] (optional field)
* srv_agent_addr: params[23] (optional field)
* srv_agent_port: params[24] (optional field)
+ * srv_backup: params[25] (optional field)
*
*/
params[arg++] =3D cur;
--=20
2.50.1 (Apple Git-155)