Message ID | 20200520193957.2351877-1-numans@ovn.org |
---|---|
State | Superseded |
Headers | show |
Series | Incremental processing improvements. | expand |
Acked-by: Han Zhou <hzhou@ovn.org> On Wed, May 20, 2020 at 12:40 PM <numans@ovn.org> wrote: > > From: Numan Siddique <numans@ovn.org> > > This patch adds partial support of incremental processing of datapath binding. > If a datapath is deleted, then a full recompute is triggered if that > datapath is present in the 'local_datapaths' hmap of runtime data. > > Acked-by: Mark Michelson <mmichels@redhat.com> > Signed-off-by: Numan Siddique <numans@ovn.org> > --- > controller/ovn-controller.c | 25 ++++++++++++++++++++++++- > tests/ovn-performance.at | 6 +++--- > 2 files changed, 27 insertions(+), 4 deletions(-) > > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c > index 08b074415..9ad5be1c6 100644 > --- a/controller/ovn-controller.c > +++ b/controller/ovn-controller.c > @@ -1204,6 +1204,28 @@ runtime_data_sb_port_binding_handler(struct engine_node *node, void *data) > return true; > } > > +static bool > +runtime_data_sb_datapath_binding_handler(struct engine_node *node OVS_UNUSED, > + void *data OVS_UNUSED) > +{ > + struct sbrec_datapath_binding_table *dp_table = > + (struct sbrec_datapath_binding_table *)EN_OVSDB_GET( > + engine_get_input("SB_datapath_binding", node)); > + const struct sbrec_datapath_binding *dp; > + struct ed_type_runtime_data *rt_data = data; > + > + SBREC_DATAPATH_BINDING_TABLE_FOR_EACH_TRACKED (dp, dp_table) { > + if (sbrec_datapath_binding_is_deleted(dp)) { > + if (get_local_datapath(&rt_data->local_datapaths, > + dp->tunnel_key)) { > + return false; > + } > + } > + } > + > + return true; > +} > + > /* Connection tracking zones. */ > struct ed_type_ct_zones { > unsigned long bitmap[BITMAP_N_LONGS(MAX_CT_ZONES)]; > @@ -1951,7 +1973,8 @@ main(int argc, char *argv[]) > engine_add_input(&en_runtime_data, &en_ovs_qos, NULL); > > engine_add_input(&en_runtime_data, &en_sb_chassis, NULL); > - engine_add_input(&en_runtime_data, &en_sb_datapath_binding, NULL); > + engine_add_input(&en_runtime_data, &en_sb_datapath_binding, > + runtime_data_sb_datapath_binding_handler); > engine_add_input(&en_runtime_data, &en_sb_port_binding, > runtime_data_sb_port_binding_handler); > > diff --git a/tests/ovn-performance.at b/tests/ovn-performance.at > index 5dfc6f7ca..5cc1960b6 100644 > --- a/tests/ovn-performance.at > +++ b/tests/ovn-performance.at > @@ -253,7 +253,7 @@ grep tunnel_egress_iface_carrier=up | wc -l) -eq 1 > ]) > > # Add router lr1 > -OVN_CONTROLLER_EXPECT_HIT( > +OVN_CONTROLLER_EXPECT_NO_HIT( > [hv1 hv2], [lflow_run], > [ovn-nbctl --wait=hv lr-add lr1] > ) > @@ -264,7 +264,7 @@ for i in 1 2; do > lrp=lr1-$ls > > # Add switch $ls > - OVN_CONTROLLER_EXPECT_HIT( > + OVN_CONTROLLER_EXPECT_NO_HIT( > [hv1 hv2], [lflow_run], > [ovn-nbctl --wait=hv ls-add $ls] > ) > @@ -427,7 +427,7 @@ for i in 1 2; do > done > > # Delete router lr1 > -OVN_CONTROLLER_EXPECT_HIT( > +OVN_CONTROLLER_EXPECT_NO_HIT( > [hv1 hv2], [lflow_run], > [ovn-nbctl --wait=hv lr-del lr1] > ) > -- > 2.26.2 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 08b074415..9ad5be1c6 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -1204,6 +1204,28 @@ runtime_data_sb_port_binding_handler(struct engine_node *node, void *data) return true; } +static bool +runtime_data_sb_datapath_binding_handler(struct engine_node *node OVS_UNUSED, + void *data OVS_UNUSED) +{ + struct sbrec_datapath_binding_table *dp_table = + (struct sbrec_datapath_binding_table *)EN_OVSDB_GET( + engine_get_input("SB_datapath_binding", node)); + const struct sbrec_datapath_binding *dp; + struct ed_type_runtime_data *rt_data = data; + + SBREC_DATAPATH_BINDING_TABLE_FOR_EACH_TRACKED (dp, dp_table) { + if (sbrec_datapath_binding_is_deleted(dp)) { + if (get_local_datapath(&rt_data->local_datapaths, + dp->tunnel_key)) { + return false; + } + } + } + + return true; +} + /* Connection tracking zones. */ struct ed_type_ct_zones { unsigned long bitmap[BITMAP_N_LONGS(MAX_CT_ZONES)]; @@ -1951,7 +1973,8 @@ main(int argc, char *argv[]) engine_add_input(&en_runtime_data, &en_ovs_qos, NULL); engine_add_input(&en_runtime_data, &en_sb_chassis, NULL); - engine_add_input(&en_runtime_data, &en_sb_datapath_binding, NULL); + engine_add_input(&en_runtime_data, &en_sb_datapath_binding, + runtime_data_sb_datapath_binding_handler); engine_add_input(&en_runtime_data, &en_sb_port_binding, runtime_data_sb_port_binding_handler); diff --git a/tests/ovn-performance.at b/tests/ovn-performance.at index 5dfc6f7ca..5cc1960b6 100644 --- a/tests/ovn-performance.at +++ b/tests/ovn-performance.at @@ -253,7 +253,7 @@ grep tunnel_egress_iface_carrier=up | wc -l) -eq 1 ]) # Add router lr1 -OVN_CONTROLLER_EXPECT_HIT( +OVN_CONTROLLER_EXPECT_NO_HIT( [hv1 hv2], [lflow_run], [ovn-nbctl --wait=hv lr-add lr1] ) @@ -264,7 +264,7 @@ for i in 1 2; do lrp=lr1-$ls # Add switch $ls - OVN_CONTROLLER_EXPECT_HIT( + OVN_CONTROLLER_EXPECT_NO_HIT( [hv1 hv2], [lflow_run], [ovn-nbctl --wait=hv ls-add $ls] ) @@ -427,7 +427,7 @@ for i in 1 2; do done # Delete router lr1 -OVN_CONTROLLER_EXPECT_HIT( +OVN_CONTROLLER_EXPECT_NO_HIT( [hv1 hv2], [lflow_run], [ovn-nbctl --wait=hv lr-del lr1] )