diff mbox series

[ovs-dev] northd, ic: Fix handling of ovn-appctl resume.

Message ID 20240423124426.307018-1-xsimonar@redhat.com
State Accepted
Headers show
Series [ovs-dev] northd, ic: Fix handling of ovn-appctl resume. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes fail github build: failed

Commit Message

Xavier Simonart April 23, 2024, 12:44 p.m. UTC
After ovn-appctl resume was issued for northd or ovn-ic, there was no
guarantee that northd or ovn-ic were waking up, potentially handling
changes received while they were paused..
Usually, poll_block would be woken up by POLLHUP, but race conditions could
cause this not to happen.
ovn-controller is already properly handling the resume.

This caused the following tests to fail sporadically:
- ovn-ic -- sync ISB status to INB
- propagate Port_Binding.up to NB and OVS.

Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
---
 ic/ovn-ic.c         | 2 +-
 northd/ovn-northd.c | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

Comments

Ales Musil May 3, 2024, 6:06 a.m. UTC | #1
On Tue, Apr 23, 2024 at 2:44 PM Xavier Simonart <xsimonar@redhat.com> wrote:

> After ovn-appctl resume was issued for northd or ovn-ic, there was no
> guarantee that northd or ovn-ic were waking up, potentially handling
> changes received while they were paused..
> Usually, poll_block would be woken up by POLLHUP, but race conditions could
> cause this not to happen.
> ovn-controller is already properly handling the resume.
>
> This caused the following tests to fail sporadically:
> - ovn-ic -- sync ISB status to INB
> - propagate Port_Binding.up to NB and OVS.
>
> Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
> ---
>  ic/ovn-ic.c         | 2 +-
>  northd/ovn-northd.c | 1 +
>  2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
> index e947323bf..be23f199d 100644
> --- a/ic/ovn-ic.c
> +++ b/ic/ovn-ic.c
> @@ -2409,7 +2409,7 @@ ovn_ic_resume(struct unixctl_conn *conn, int argc
> OVS_UNUSED,
>  {
>      struct ic_state *state = state_;
>      state->paused = false;
> -
> +    poll_immediate_wake();
>      unixctl_command_reply(conn, NULL);
>  }
>
> diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> index 3a5544b0c..d71114f35 100644
> --- a/northd/ovn-northd.c
> +++ b/northd/ovn-northd.c
> @@ -1107,6 +1107,7 @@ ovn_northd_resume(struct unixctl_conn *conn, int
> argc OVS_UNUSED,
>  {
>      struct northd_state *state = state_;
>      state->paused = false;
> +    poll_immediate_wake();
>
>      unixctl_command_reply(conn, NULL);
>  }
> --
> 2.31.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Looks good to me, thanks.

Acked-by: Ales Musil <amusil@redhat.com>
Numan Siddique May 14, 2024, 9:38 p.m. UTC | #2
On Fri, May 3, 2024 at 2:07 AM Ales Musil <amusil@redhat.com> wrote:
>
> On Tue, Apr 23, 2024 at 2:44 PM Xavier Simonart <xsimonar@redhat.com> wrote:
>
> > After ovn-appctl resume was issued for northd or ovn-ic, there was no
> > guarantee that northd or ovn-ic were waking up, potentially handling
> > changes received while they were paused..
> > Usually, poll_block would be woken up by POLLHUP, but race conditions could
> > cause this not to happen.
> > ovn-controller is already properly handling the resume.
> >
> > This caused the following tests to fail sporadically:
> > - ovn-ic -- sync ISB status to INB
> > - propagate Port_Binding.up to NB and OVS.
> >
> > Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
> > ---
> >  ic/ovn-ic.c         | 2 +-
> >  northd/ovn-northd.c | 1 +
> >  2 files changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
> > index e947323bf..be23f199d 100644
> > --- a/ic/ovn-ic.c
> > +++ b/ic/ovn-ic.c
> > @@ -2409,7 +2409,7 @@ ovn_ic_resume(struct unixctl_conn *conn, int argc
> > OVS_UNUSED,
> >  {
> >      struct ic_state *state = state_;
> >      state->paused = false;
> > -
> > +    poll_immediate_wake();
> >      unixctl_command_reply(conn, NULL);
> >  }
> >
> > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> > index 3a5544b0c..d71114f35 100644
> > --- a/northd/ovn-northd.c
> > +++ b/northd/ovn-northd.c
> > @@ -1107,6 +1107,7 @@ ovn_northd_resume(struct unixctl_conn *conn, int
> > argc OVS_UNUSED,
> >  {
> >      struct northd_state *state = state_;
> >      state->paused = false;
> > +    poll_immediate_wake();
> >
> >      unixctl_command_reply(conn, NULL);
> >  }
> > --
> > 2.31.1
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
> >
> Looks good to me, thanks.
>
> Acked-by: Ales Musil <amusil@redhat.com>

Thanks.  Applied to main and backported until branch-23.03.

Numan

>
> --
>
> Ales Musil
>
> Senior Software Engineer - OVN Core
>
> Red Hat EMEA <https://www.redhat.com>
>
> amusil@redhat.com
> <https://red.ht/sig>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff mbox series

Patch

diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
index e947323bf..be23f199d 100644
--- a/ic/ovn-ic.c
+++ b/ic/ovn-ic.c
@@ -2409,7 +2409,7 @@  ovn_ic_resume(struct unixctl_conn *conn, int argc OVS_UNUSED,
 {
     struct ic_state *state = state_;
     state->paused = false;
-
+    poll_immediate_wake();
     unixctl_command_reply(conn, NULL);
 }
 
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index 3a5544b0c..d71114f35 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -1107,6 +1107,7 @@  ovn_northd_resume(struct unixctl_conn *conn, int argc OVS_UNUSED,
 {
     struct northd_state *state = state_;
     state->paused = false;
+    poll_immediate_wake();
 
     unixctl_command_reply(conn, NULL);
 }