Refactor the code to move the availability zone related data structures into the IC context to achieve more uniform function interfaces across the codebase.
Signed-off-by: Alexandra Rukomoinikova <arukomoinikova@k2.cloud> --- ic/ovn-ic.c | 67 ++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c index caffa6fe0..0d36b0bf5 100644 --- a/ic/ovn-ic.c +++ b/ic/ovn-ic.c @@ -64,6 +64,7 @@ struct ic_context { struct ovsdb_idl_txn *ovnsb_txn; struct ovsdb_idl_txn *ovninb_txn; struct ovsdb_idl_txn *ovnisb_txn; + const struct icsbrec_availability_zone *runned_az; struct ovsdb_idl_index *nbrec_ls_by_name; struct ovsdb_idl_index *nbrec_lrp_by_name; struct ovsdb_idl_index *nbrec_port_by_name; @@ -167,6 +168,7 @@ az_run(struct ic_context *ctx) ICSBREC_AVAILABILITY_ZONE_FOR_EACH (az, ctx->ovnisb_idl) { if (!strcmp(az->name, az_name)) { + ctx->runned_az = az; return az; } } @@ -176,6 +178,7 @@ az_run(struct ic_context *ctx) VLOG_INFO("Register AZ %s to interconnection DB.", az_name); az = icsbrec_availability_zone_insert(ctx->ovnisb_txn); icsbrec_availability_zone_set_name(az, az_name); + ctx->runned_az = az; return az; } return NULL; @@ -406,7 +409,7 @@ sync_sb_gw_to_isb(struct ic_context *ctx, } static void -gateway_run(struct ic_context *ctx, const struct icsbrec_availability_zone *az) +gateway_run(struct ic_context *ctx) { if (!ctx->ovnisb_txn || !ctx->ovnsb_txn) { return; @@ -416,7 +419,7 @@ gateway_run(struct ic_context *ctx, const struct icsbrec_availability_zone *az) struct shash remote_gws = SHASH_INITIALIZER(&remote_gws); const struct icsbrec_gateway *gw; ICSBREC_GATEWAY_FOR_EACH (gw, ctx->ovnisb_idl) { - if (gw->availability_zone == az) { + if (gw->availability_zone == ctx->runned_az) { shash_add(&local_gws, gw->name, gw); } else { shash_add(&remote_gws, gw->name, gw); @@ -429,7 +432,7 @@ gateway_run(struct ic_context *ctx, const struct icsbrec_availability_zone *az) gw = shash_find_and_delete(&local_gws, chassis->name); if (!gw) { gw = icsbrec_gateway_insert(ctx->ovnisb_txn); - icsbrec_gateway_set_availability_zone(gw, az); + icsbrec_gateway_set_availability_zone(gw, ctx->runned_az); icsbrec_gateway_set_name(gw, chassis->name); sync_sb_gw_to_isb(ctx, chassis, gw); } else if (is_gateway_data_changed(gw, chassis)) { @@ -812,8 +815,7 @@ allocate_port_key(struct hmap *pb_tnlids) } static void -port_binding_run(struct ic_context *ctx, - const struct icsbrec_availability_zone *az) +port_binding_run(struct ic_context *ctx) { if (!ctx->ovnisb_txn || !ctx->ovnnb_txn || !ctx->ovnsb_txn) { return; @@ -825,7 +827,8 @@ port_binding_run(struct ic_context *ctx, const struct icsbrec_port_binding *isb_pb; const struct icsbrec_port_binding *isb_pb_key = icsbrec_port_binding_index_init_row(ctx->icsbrec_port_binding_by_az); - icsbrec_port_binding_index_set_availability_zone(isb_pb_key, az); + icsbrec_port_binding_index_set_availability_zone(isb_pb_key, + ctx->runned_az); ICSBREC_PORT_BINDING_FOR_EACH_EQUAL (isb_pb, isb_pb_key, ctx->icsbrec_port_binding_by_az) { @@ -850,7 +853,7 @@ port_binding_run(struct ic_context *ctx, ICSBREC_PORT_BINDING_FOR_EACH_EQUAL (isb_pb, isb_pb_key, ctx->icsbrec_port_binding_by_ts) { - if (isb_pb->availability_zone == az) { + if (isb_pb->availability_zone == ctx->runned_az) { shash_add(&local_pbs, isb_pb->logical_port, isb_pb); shash_find_and_delete(&isb_all_local_pbs, isb_pb->logical_port); @@ -875,7 +878,8 @@ port_binding_run(struct ic_context *ctx, isb_pb = shash_find_and_delete(&local_pbs, lsp->name); if (!isb_pb) { uint32_t pb_tnl_key = allocate_port_key(&pb_tnlids); - create_isb_pb(ctx, sb_pb, az, ts->name, pb_tnl_key); + create_isb_pb(ctx, sb_pb, ctx->runned_az, + ts->name, pb_tnl_key); } else { sync_local_port(ctx, isb_pb, sb_pb, lsp); } @@ -2090,20 +2094,20 @@ delete_orphan_ic_routes(struct ic_context *ctx, } static void -route_run(struct ic_context *ctx, - const struct icsbrec_availability_zone *az) +route_run(struct ic_context *ctx) { if (!ctx->ovnisb_txn || !ctx->ovnnb_txn) { return; } - delete_orphan_ic_routes(ctx, az); + delete_orphan_ic_routes(ctx, ctx->runned_az); struct hmap ic_lrs = HMAP_INITIALIZER(&ic_lrs); const struct icsbrec_port_binding *isb_pb; const struct icsbrec_port_binding *isb_pb_key = icsbrec_port_binding_index_init_row(ctx->icsbrec_port_binding_by_az); - icsbrec_port_binding_index_set_availability_zone(isb_pb_key, az); + icsbrec_port_binding_index_set_availability_zone(isb_pb_key, + ctx->runned_az); /* Each port on TS maps to a logical router, which is stored in the * external_ids:router-id of the IC SB port_binding record. @@ -2171,7 +2175,7 @@ route_run(struct ic_context *ctx, } struct shash_node *node; SHASH_FOR_EACH (node, &routes_ad_by_ts) { - advertise_routes(ctx, az, node->name, node->data); + advertise_routes(ctx, ctx->runned_az, node->name, node->data); hmap_destroy(node->data); } shash_destroy_free_data(&routes_ad_by_ts); @@ -2211,8 +2215,7 @@ route_run(struct ic_context *ctx, * INB:nb_ic_cfg and INB:sb_ic_cfg to INB:nb_ic_cfg. */ static void -update_sequence_numbers(const struct icsbrec_availability_zone *az, - struct ic_context *ctx, +update_sequence_numbers(struct ic_context *ctx, struct ovsdb_idl_loop *ic_sb_loop) { if (!ctx->ovnisb_txn || !ctx->ovninb_txn) { @@ -2231,46 +2234,46 @@ update_sequence_numbers(const struct icsbrec_availability_zone *az, } if ((ic_nb->nb_ic_cfg != ic_sb->nb_ic_cfg) && - (ic_nb->nb_ic_cfg != az->nb_ic_cfg)) { + (ic_nb->nb_ic_cfg != ctx->runned_az->nb_ic_cfg)) { /* Deal with potential overflows. */ - if (az->nb_ic_cfg == LLONG_MAX) { - icsbrec_availability_zone_set_nb_ic_cfg(az, 0); + if (ctx->runned_az->nb_ic_cfg == LLONG_MAX) { + icsbrec_availability_zone_set_nb_ic_cfg(ctx->runned_az, 0); } ic_sb_loop->next_cfg = ic_nb->nb_ic_cfg; - ovsdb_idl_txn_increment(ctx->ovnisb_txn, &az->header_, - &icsbrec_availability_zone_col_nb_ic_cfg, true); + ovsdb_idl_txn_increment(ctx->ovnisb_txn, &ctx->runned_az->header_, + &icsbrec_availability_zone_col_nb_ic_cfg, true); return; } /* handle cases where accidentally AZ:ic_nb_cfg exceeds * the INB:ic_nb_cfg. */ - if (az->nb_ic_cfg != ic_sb_loop->cur_cfg) { - icsbrec_availability_zone_set_nb_ic_cfg(az, ic_sb_loop->cur_cfg); + if (ctx->runned_az->nb_ic_cfg != ic_sb_loop->cur_cfg) { + icsbrec_availability_zone_set_nb_ic_cfg(ctx->runned_az, + ic_sb_loop->cur_cfg); return; } const struct icsbrec_availability_zone *other_az; ICSBREC_AVAILABILITY_ZONE_FOR_EACH (other_az, ctx->ovnisb_idl) { - if (other_az->nb_ic_cfg != az->nb_ic_cfg) { + if (other_az->nb_ic_cfg != ctx->runned_az->nb_ic_cfg) { return; } } /* All the AZs are updated successfully, update SB/NB counter. */ if (ic_nb->nb_ic_cfg != ic_sb->nb_ic_cfg) { - icsbrec_ic_sb_global_set_nb_ic_cfg(ic_sb, az->nb_ic_cfg); - icnbrec_ic_nb_global_set_sb_ic_cfg(ic_nb, az->nb_ic_cfg); + icsbrec_ic_sb_global_set_nb_ic_cfg(ic_sb, ctx->runned_az->nb_ic_cfg); + icnbrec_ic_nb_global_set_sb_ic_cfg(ic_nb, ctx->runned_az->nb_ic_cfg); } } static void -ovn_db_run(struct ic_context *ctx, - const struct icsbrec_availability_zone *az) +ovn_db_run(struct ic_context *ctx) { - gateway_run(ctx, az); + gateway_run(ctx); ts_run(ctx); - port_binding_run(ctx, az); - route_run(ctx, az); + port_binding_run(ctx); + route_run(ctx); } static void @@ -2725,8 +2728,8 @@ main(int argc, char *argv[]) VLOG_DBG("Availability zone: %s", az ? az->name : "not created yet."); if (az) { - ovn_db_run(&ctx, az); - update_sequence_numbers(az, &ctx, &ovnisb_idl_loop); + ovn_db_run(&ctx); + update_sequence_numbers(&ctx, &ovnisb_idl_loop); } } -- 2.48.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev