On Mon, Aug 30, 2021 at 12:01 PM Vladislav Odintsov <[email protected]> wrote: > > Small optimization in routes advertizement code. > Instead of iterating over all routes and checking for > needed transit_switch and availability_zone, use > ovsdb_index built with appropriate fields. > > Signed-off-by: Vladislav Odintsov <[email protected]> > --- > ic/ovn-ic.c | 22 ++++++++++++++-------- > 1 file changed, 14 insertions(+), 8 deletions(-) > > diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c > index fc608af82..f5e31bd80 100644 > --- a/ic/ovn-ic.c > +++ b/ic/ovn-ic.c > @@ -68,6 +68,7 @@ struct ic_context { > struct ovsdb_idl_index *sbrec_port_binding_by_name; > struct ovsdb_idl_index *icsbrec_port_binding_by_ts; > struct ovsdb_idl_index *icsbrec_route_by_ts; > + struct ovsdb_idl_index *icsbrec_route_by_ts_az; > }; > > struct ic_state { > @@ -1292,15 +1293,13 @@ advertise_route(struct ic_context *ctx, > { > ovs_assert(ctx->ovnisb_txn); > const struct icsbrec_route *isb_route; > - ICSBREC_ROUTE_FOR_EACH (isb_route, ctx->ovnisb_idl) { > - if (strcmp(isb_route->transit_switch, ts_name)) { > - continue; > - } > - > - if (isb_route->availability_zone != az) { > - continue; > - } > + const struct icsbrec_route *isb_route_key = > + icsbrec_route_index_init_row(ctx->icsbrec_route_by_ts_az); > + icsbrec_route_index_set_transit_switch(isb_route_key, ts_name); > + icsbrec_route_index_set_availability_zone(isb_route_key, az); > > + ICSBREC_ROUTE_FOR_EACH_EQUAL (isb_route, isb_route_key, > + ctx->icsbrec_route_by_ts_az) { > struct in6_addr prefix, nexthop; > unsigned int plen; > > @@ -1329,6 +1328,7 @@ advertise_route(struct ic_context *ctx, > free(route_adv); > } > } > + icsbrec_route_index_destroy_row(isb_route_key); > > /* Create the missing routes in IC-SB */ > struct ic_route_info *route_adv, *next; > @@ -1732,6 +1732,11 @@ main(int argc, char *argv[]) > = ovsdb_idl_index_create1(ovnisb_idl_loop.idl, > &icsbrec_route_col_transit_switch); > > + struct ovsdb_idl_index *icsbrec_route_by_ts_az > + = ovsdb_idl_index_create2(ovnisb_idl_loop.idl, > + &icsbrec_route_col_transit_switch, > + &icsbrec_route_col_availability_zone); > + > /* Main loop. */ > exiting = false; > state.had_lock = false; > @@ -1773,6 +1778,7 @@ main(int argc, char *argv[]) > .sbrec_chassis_by_name = sbrec_chassis_by_name, > .icsbrec_port_binding_by_ts = icsbrec_port_binding_by_ts, > .icsbrec_route_by_ts = icsbrec_route_by_ts, > + .icsbrec_route_by_ts_az = icsbrec_route_by_ts_az, > }; > > if (!state.had_lock && ovsdb_idl_has_lock(ovnsb_idl_loop.idl)) { > -- > 2.30.0 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Thanks for the improvement! I applied the patch. Han _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
