On Mon, Sep 12, 2022 at 6:11 PM Vladislav Odintsov <[email protected]> wrote:
>
> If one has a UDP load balancer with backend IP which is located under
> disabled LSP, such backend would be threated as alive and marked as
> 'online' on Service_Monitor table and added to load balancing as well.
> Though such LSP can't receive any traffic, this load balancer will be
> broken by mentioned behaviour.
>
> This patch resolves this issue for Load Balancers with enabled health
> check: if LSP is disabled, it wont be added to Service_Monitor and to
> Load Balancing flow.
>
> Signed-off-by: Vladislav Odintsov <[email protected]>
Thanks. Applied to main and backported upto branch-22.03.
Numan
> ---
> northd/northd.c | 10 ++++++----
> tests/ovn-northd.at | 19 +++++++++++++++++++
> 2 files changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/northd/northd.c b/northd/northd.c
> index 1eb190dc1..76007bd4d 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -3713,7 +3713,8 @@ ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn,
> struct ovn_northd_lb *lb,
> backend_nb->op = op;
> backend_nb->svc_mon_src_ip = svc_mon_src_ip;
>
> - if (!lb_vip_nb->lb_health_check || !op || !svc_mon_src_ip) {
> + if (!lb_vip_nb->lb_health_check || !op || !svc_mon_src_ip ||
> + !lsp_is_enabled(op->nbsp)) {
> continue;
> }
>
> @@ -3777,9 +3778,10 @@ build_lb_vip_actions(struct ovn_lb_vip *lb_vip,
> struct ovn_lb_backend *backend = &lb_vip->backends[i];
> struct ovn_northd_lb_backend *backend_nb =
> &lb_vip_nb->backends_nb[i];
> - if (backend_nb->health_check && backend_nb->sbrec_monitor &&
> - backend_nb->sbrec_monitor->status &&
> - strcmp(backend_nb->sbrec_monitor->status, "online")) {
> + if (!backend_nb->health_check ||
> + (backend_nb->health_check && backend_nb->sbrec_monitor &&
> + backend_nb->sbrec_monitor->status &&
> + strcmp(backend_nb->sbrec_monitor->status, "online"))) {
> continue;
> }
>
> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> index da83bce7c..7c3c84007 100644
> --- a/tests/ovn-northd.at
> +++ b/tests/ovn-northd.at
> @@ -1230,6 +1230,25 @@ OVS_WAIT_FOR_OUTPUT(
> (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst ==
> 10.0.0.10 && tcp.dst == 80), action=(reg0[[1]] = 0;
> ct_lb(backends=10.0.0.3:80,20.0.0.3:80);)
> ])
>
> +# disabled LSPs should not be a backend of Load Balancer
> +check ovn-nbctl lsp-set-enabled sw0-p1 disabled
> +
> +AT_CAPTURE_FILE([sbflows])
> +OVS_WAIT_FOR_OUTPUT(
> + [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' |
> sed 's/table=..//'], 0, [dnl
> + (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst ==
> 10.0.0.10 && tcp.dst == 80), action=(reg0[[1]] = 0;
> ct_lb(backends=20.0.0.3:80);)
> +])
> +wait_row_count Service_Monitor 1
> +
> +check ovn-nbctl lsp-set-enabled sw0-p1 enabled
> +
> +AT_CAPTURE_FILE([sbflows])
> +OVS_WAIT_FOR_OUTPUT(
> + [ovn-sbctl dump-flows sw0 | tee sbflows | grep 'priority=120.*backends' |
> sed 's/table=..//'], 0, [dnl
> + (ls_in_lb ), priority=120 , match=(ct.new && ip4.dst ==
> 10.0.0.10 && tcp.dst == 80), action=(reg0[[1]] = 0;
> ct_lb(backends=10.0.0.3:80,20.0.0.3:80);)
> +])
> +wait_row_count Service_Monitor 2
> +
> AS_BOX([Delete the Load_Balancer_Health_Check])
> ovn-nbctl --wait=sb clear load_balancer . health_check
> wait_row_count Service_Monitor 0
> --
> 2.36.1
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev