On Thu, Aug 8, 2024 at 1:26 PM Ilya Maximets <[email protected]> wrote:

> On 8/8/24 13:18, Ales Musil wrote:
> >
> >
> > On Thu, Aug 8, 2024 at 12:55 PM Ilya Maximets <[email protected]
> <mailto:[email protected]>> wrote:
> >
> >     On 8/8/24 12:38, Ales Musil wrote:
> >     > The test was checking if there was any recompute after all
> operations.
> >     > This proven to be flaky because there might have been "random"
> >     > recompute happening in the middle due to the following events:
> >     >
> >     > 1) SB becomes read only
> >     > 2) non_vif_data handler for OVS_interface fails
> >     > 3) Recompute of non_vif_data is not allowed because SB is read only
> >     > 4) non_vif_data is marked as cancelled
> >     > 5) Next engine run will do force recompute of all nodes
> >     >
> >     > To prevent that check specifically for the handler that is supposed
> >     > to gracefully handle the interface changes.
> >     >
> >     > Fixes: 603f38da062b ("controller: Remove OvS iface type check in
> I-P processing.")
> >     > Signed-off-by: Ales Musil <[email protected] <mailto:
> [email protected]>>
> >     > ---
> >     >  tests/ovn-controller.at <http://ovn-controller.at> | 19
> ++++++++++---------
> >     >  1 file changed, 10 insertions(+), 9 deletions(-)
> >     >
> >     > diff --git a/tests/ovn-controller.at <http://ovn-controller.at>
> b/tests/ovn-controller.at <http://ovn-controller.at>
> >     > index 898981867..f61c8c432 100644
> >     > --- a/tests/ovn-controller.at <http://ovn-controller.at>
> >     > +++ b/tests/ovn-controller.at <http://ovn-controller.at>
> >     > @@ -3308,51 +3308,52 @@ net_add n1
> >     >  sim_add hv1
> >     >  ovs-vsctl add-br br-phys
> >     >  ovn_attach n1 br-phys 192.168.0.20
> >     > +ovn-appctl vlog/set inc_proc_eng:dbg
> >     >
> >     >  check ovn-nbctl ls-add ls0
> >     >  check ovn-nbctl lsp-add ls0 vif
> >     >
> >     > -ovn-appctl inc-engine/clear-stats
> >     > +m4_define([HANDLER_MESSAGE], [runtime_data, recompute (failed
> handler for input ovs_interface_shadow)])
> >     >
> >     >  ovs-vsctl -- add-port br-int vif -- \
> >     >      set Interface vif external-ids:iface-id=vif
> >     >  wait_row_count Port_Binding 1 logical_port="vif" up=true
> >     > +AT_CHECK([test 0 = $(grep -c "HANDLER_MESSAGE"
> hv1/ovn-controller.log)])
> >
> >     Hi, Ales.  Thanks for the fix!
> >
> >     The change seems fine at a glance (I didn't test), but the test
> itself
> >     becomes fragile.  All the checks are negative here, i.e. we're always
> >     checking that there was no match in the log.  If the log message
> changes
> >     slightly in the future, the test will keep silently passing while not
> >     actually testing anything useful.
> >
> >     There could be a few ways to avoid that:
> >     1. Collect recompute stats per failed node, so we can explicitly
> check
> >        for a specific reason.  May still be a little flaky though.
> >     2. Add at least one positive check that ensures that log we're
> looking
> >        for can be actually emitted.
> >
> >     Best regards, Ilya Maximets.
> >
> >
> > Hi Ilya,
> >
> > thank you for the review, how about the following diff?
> > It adds one positive check for the case which should
> > definitely cause the handler failure.
> >
> > diff --git a/tests/ovn-controller.at <http://ovn-controller.at> b/tests/
> ovn-controller.at <http://ovn-controller.at>
> > index f61c8c432..68314ad5d 100644
> > --- a/tests/ovn-controller.at <http://ovn-controller.at>
> > +++ b/tests/ovn-controller.at <http://ovn-controller.at>
> > @@ -3355,5 +3355,18 @@ ovs-vsctl del-port br-int vif
> >  wait_row_count Port_Binding 1 logical_port="vif" up=false
> >  AT_CHECK([test 0 = $(grep -c "HANDLER_MESSAGE" hv1/ovn-controller.log)])
> >
> > +# Make sure that setting dummy iface in two different transaction
>
> * transactions
>
> > +# causes recompute.
>
> I'm not sure if we can rely on these transactions not be squashed.
> Maybe add a port with external id, wait for it to be claimed, then remove
> the external id?  Will that cause re-compute?
>

No, the removal should be without recompute.


>
> > +ovs-vsctl add-port br-int vif -- \
> > +    set Interface vif type=dummy
> > +ovs-vsctl set Interface vif external-ids:iface-id=vif
>
> All ovs-vsctl operations should be under check.
>

Ack


>
> > +wait_row_count Port_Binding 1 logical_port="vif" up=true
> > +cat hv1/ovn-controller.log
>
> This log file should be already captures with AT_CAPTURE_FILE, isn't it?
>

That was a mistake, it won't be there in v2.


> > +AT_CHECK([test $(grep -c "HANDLER_MESSAGE" hv1/ovn-controller.log) -ge
> 1])
> > +
> > +ovs-vsctl del-port br-int vif
>
> check
>

Ack


>
> > +wait_row_count Port_Binding 1 logical_port="vif" up=false
> > +AT_CHECK([test $(grep -c "HANDLER_MESSAGE" hv1/ovn-controller.log) -ge
> 1])
>
> '-ge 1' is always true here.
>

The removal is probably pointless here because it shouldn't
cause anything extra and it's checked above anyway.


>
> > +
> >  OVN_CLEANUP([hv1])
> >  AT_CLEANUP
> >
> > Thanks,
> > Ales
>
>

-- 

Ales Musil

Senior Software Engineer - OVN Core

Red Hat EMEA <https://www.redhat.com>

[email protected]
<https://red.ht/sig>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to