[ovs-dev] [PATCH ovn] ovn-controller: Fix I-P for SB Port_Binding and OVS Interface.
Dumitru Ceara
dceara at redhat.com
Thu Jun 11 08:58:05 UTC 2020
On 6/11/20 10:39 AM, Numan Siddique wrote:
>
>
> On Thu, Jun 11, 2020 at 2:01 PM Dumitru Ceara <dceara at redhat.com
> <mailto:dceara at redhat.com>> wrote:
>
> On 6/10/20 7:58 PM, Numan Siddique wrote:
> >
> >
> > On Wed, Jun 10, 2020 at 10:16 PM Dumitru Ceara <dceara at redhat.com
> <mailto:dceara at redhat.com>
> > <mailto:dceara at redhat.com <mailto:dceara at redhat.com>>> wrote:
> >
> > The commit that introduced incremental processing for
> Port_Binding and
> > OVS Interface in the I-P runtime_data node covered most cases
> but two
> > were missed:
> >
> > 1. If a Port_Binding was already claimed by the local
> hypervisor when
> > ovn-controller starts, binding_handle_port_binding_changes doesn't
> > correctly set the "changed" variable causing en_runtime_data
> node to
> > go to EN_VALID instead of EN_UPDATED. Due to this
> update_sb_monitors()
> > is skipped in that run and ovn-controller does not register for
> > updates regarding the datapath containing the Port_Binding.
> >
> > 2. If a Port_Binding was already claimed by the local
> hypervisor when
> > ovn-controller starts, but the underlying OVS interface was
> removed in
> > the meantime, handle_updated_vif_lport() would fail the
> assertion that a
> > local_binding should exist in memory.
> >
> > To address the first issue, we now explicitly track changes to the
> > binding
> > context local_lport and local_lport_ids sets. If these change
> during
> > incremental processing of the runtime_data OVS_Interface and
> > SB_Port_Binding input nodes then the runtime_data node should
> change
> > state to EN_UPDATED.
> >
> > For the second issue, we now allow the case when a stale
> port_binding is
> > released.
> >
> > Also, added an explicit non_vif_ports_changed variable to
> > binding_ctx_out to track if other types of Port_Bindings
> > have been changed in the current run. This kind of update
> should also
> > cause runtime_data to move to EN_UPDATED such that
> update_sb_monitors()
> > gets executed.
> >
> >
> > Thanks Dumitru for fixing this. I applied this patch to master and
> > branch-20.06.
> >
>
> Thanks Numan!
>
> > When other types of Port_Bindings get updated, I don't think there
> is a
> > need to
> > call update_sb_monitors(). Because we don't do conditional
> monitoring on
> > other type of Port_Bindings and the fact that 'non_vif_ports_changed'
> > gets set
> > to true, indicate that the ovn-controller received the updates for
> other
> > type of
> > Port_Bindings.
>
> Actually, at least for some non-vif port bindings like LP_PATCH we need
> to call update_sb_monitors() because local_datapaths might be updated.
> Some SB records (e.g., Logical_Flow) are filtered on datapath id and if
> we don't call update_sb_monitors() SB won't send them to us.
>
> It's true that we might have to refine in which cases we need to set
> non_vif_ports_changed. For LP_PATCH for example we don't really need to
> because patch port bindings are also added to local_lport_ids so
> local_lport_ids_changed will be true. But for now I just decided to set
> it in all places where we had "*changed = true" for non-vif port binding
> updates.
>
>
> Agree. This patch makes sense.
>
> I'll refine it further in the I-P patches to set only for those which
> are required.
> Or maybe even if we set for all, it should not cause any flow
> computation in the flow output stage
> if the tracked datapaths are empty.
>
> Thanks
> Numan
>
Looking forward to it, thanks!
More information about the dev
mailing list