"dev" <dev-boun...@openvswitch.org> wrote on 07/26/2016 08:13:00 PM:

> From: Russell Bryant <russ...@ovn.org>
> To: Babu Shanmugam <bscha...@redhat.com>
> Cc: ovs dev <dev@openvswitch.org>
> Date: 07/26/2016 08:13 PM
> Subject: Re: [ovs-dev] [PATCH] ovn-controller: update_ct_zone
> operates always on empty set
> Sent by: "dev" <dev-boun...@openvswitch.org>
>
> On Tue, Jul 26, 2016 at 6:46 AM, <bscha...@redhat.com> wrote:
>
> > From: Babu Shanmugam <bscha...@redhat.com>
> >
> > Commit 263064a (Convert binding_run to incremental processing.) removed
> > the usage
> > of all_lports from binding_run, but it is infact used in the context of
> > the caller,
> > especially by update_ct_zones().
> >
> > Without this change, update_ct_zones operates on an empty set always.
> >
> > Signed-off-by: Babu Shanmugam <bscha...@redhat.com>
> >
>
> Ouch. This is a really bad regression.  If I understand correctly, we're
> not setting a ct zone ID for any logical ports.  All are just using the
> default zone of 0.
>
> We should think about a good way to test OVN's use of conntrack zones to
> ensure that entries end up in separate zones for separate ports.  A good
> test for that may require userspace conntrack support, though.
>
> Another test we could do now would be looking at the flows in table 0 and
> ensuring that the input flow for each port has a different conntrack zone
> ID assigned.  That feels like kind of a hack, though.
>
> ---
> >  ovn/controller/binding.c        | 4 +++-
> >  ovn/controller/binding.h        | 3 ++-
> >  ovn/controller/ovn-controller.c | 2 +-
> >  3 files changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c
> > index e83c1d5..7bc6fb4 100644
> > --- a/ovn/controller/binding.c
> > +++ b/ovn/controller/binding.c
> > @@ -230,7 +230,8 @@ consider_local_datapath(struct controller_ctx *ctx,
> >
> >  void
> >  binding_run(struct controller_ctx *ctx, const struct ovsrec_bridge
> > *br_int,
> > -            const char *chassis_id, struct hmap *local_datapaths)
> > +            const char *chassis_id, struct hmap *local_datapaths,
> > +            struct sset *all_lports)
> >  {
> >      const struct sbrec_chassis *chassis_rec;
> >      const struct sbrec_port_binding *binding_rec;
> > @@ -292,6 +293,7 @@ binding_run(struct controller_ctx *ctx, const
struct
> > ovsrec_bridge *br_int,
> >          }
> >      }
> >
> > +    sset_clone(all_lports, &local_ids);
> >
>
> I don't think this is quite sufficient.  It's missing, at least:
>
>  - the IDs of sub-ports
>
>  - localnet ports
>
> The old handling of building up all_lports ensure those got added.
>

Yes, I'm inclined to put the all_lports code back in and persist it in
a similar way to how local_ids is persisted.

I just checked and the only test that I'm seeing consistently fail
is the LB test Guru pointed out previously, I think we've got a
problem in our test code.  While I'd be happy to write the test case,
I'm not sure I understand it, so can somebody give me a pointer to an
existing test case or draft something that can be used to help fix this
and avoid the regression in the future?

Ryan
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to