Skip to content

Commit 378d608

Browse files
aeko-emptdceara
authored andcommitted
pinctrl: reset success and failures n_count regardless of svc state
This patch adds reset n_count regardless of svc state and does only if n_count >= configured_count. The behavior hc with windows server as backend in load balancers show some issue with counters, e.g.: ovn-controller --> win_srv | SYN ovn-controller <-- win_srv | SYN_ACK <- increase n_success ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | SYN_ACK (TCP Retransmission) <- increase n_success ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | SYN_ACK (TCP Retransmission) <- increase n_success n_success == success_count => status = online; n_success = 0 ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | RST (win_srv don't recive ACK and sent RST) increase n_failures (count = 1) After wait_time: ovn-controller --> win_srv | SYN ovn-controller <-- win_srv | SYN_ACK <- increase n_success ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | SYN_ACK (TCP Retransmission) <- increase n_success ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | SYN_ACK (TCP Retransmission) <- increase n_success n_success == success_count => status = online; n_success = 0 ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | RST (win_srv don't recive ACK and sent RST) increase n_failures (count = 2) After wait_time: ovn-controller --> win_srv | SYN ovn-controller <-- win_srv | SYN_ACK <- increase n_success ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | SYN_ACK (TCP Retransmission) <- increase n_success ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | SYN_ACK (TCP Retransmission) <- increase n_success n_success == success_count => status = online; n_success = 0 ovn-controller --> win_srv | RST_ACK ovn-controller <-- win_srv | RST (win_srv don't recive ACK and sent RST) increase n_failures (count = 3) n_failures == failure_count => status = offline; n_failures = 0 So, the main point is svc reset the counters only for current state if n_success >= success_count, but if a backend of lb for some reason sent RST to ovn-controller it's just increase count and will reset only then state is offline and greater or equal than failure_count. The same for SYN_ACK. Signed-off-by: Evgenii Kovalev <[email protected]> Acked-by: Mark Michelson <[email protected]> Signed-off-by: Dumitru Ceara <[email protected]> (cherry picked from commit 8e71bee)
1 parent 091fde8 commit 378d608

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

Diff for: controller/pinctrl.c

+3
Original file line numberDiff line numberDiff line change
@@ -7786,7 +7786,9 @@ svc_monitors_run(struct rconn *swconn,
77867786
if (svc_mon->n_success >= svc_mon->success_count) {
77877787
svc_mon->status = SVC_MON_ST_ONLINE;
77887788
svc_mon->n_success = 0;
7789+
svc_mon->n_failures = 0;
77897790
}
7791+
77907792
if (current_time >= svc_mon->next_send_time) {
77917793
svc_monitor_send_health_check(swconn, svc_mon);
77927794
next_run_time = svc_mon->wait_time;
@@ -7798,6 +7800,7 @@ svc_monitors_run(struct rconn *swconn,
77987800
case SVC_MON_S_OFFLINE:
77997801
if (svc_mon->n_failures >= svc_mon->failure_count) {
78007802
svc_mon->status = SVC_MON_ST_OFFLINE;
7803+
svc_mon->n_success = 0;
78017804
svc_mon->n_failures = 0;
78027805
}
78037806

0 commit comments

Comments
 (0)