On Thu, Aug 20, 2026 at 11:28 AM Dmitrii Shcherbakov < [email protected]> wrote:
> This reverts commit 7031ffc6711951df4d484522e2ba0e8467ec10df. > > Advertised_Route_Status has no current consumer. ovn-heater > measurements also confirmed that publishing status rows adds Southbound > database work. Remove the table while its consumers and scalability > requirements are reconsidered. > > Signed-off-by: Dmitrii Shcherbakov <[email protected]> > --- > NEWS | 3 - > controller/chassis.c | 27 +-- > controller/chassis.h | 4 +- > controller/ovn-controller.c | 272 +------------------------------ > controller/route-exchange.c | 38 +---- > controller/route-exchange.h | 5 +- > controller/route.c | 63 ------- > controller/route.h | 20 --- > northd/ovn-northd.c | 17 -- > ovn-sb.ovsschema | 34 +--- > ovn-sb.xml | 92 ----------- > tests/automake.mk | 6 +- > tests/ovn-controller.at | 59 ------- > tests/ovn-inc-proc-graph-dump.at | 2 - > tests/ovn-northd.at | 11 -- > tests/ovn-sbctl.at | 6 - > tests/system-ovn.at | 184 --------------------- > utilities/ovn-sbctl.8.xml | 5 +- > utilities/ovn-sbctl.c | 17 -- > 19 files changed, 20 insertions(+), 845 deletions(-) > > diff --git a/NEWS b/NEWS > index 3f16ccdfb..c007767d0 100644 > --- a/NEWS > +++ b/NEWS > @@ -1,8 +1,5 @@ > Post v26.03.0 > ------------- > - - New Southbound Advertised_Route_Status table has been added. This is > used > - in order for ovn-controller instances to know the state of advertised > - routes amongst each other. > - Logical_Router_Port: Added a new "options:dhcpv4_primary_ip" key > that selects which of the port's IPv4 addresses ovn-northd uses as > the relay agent address (giaddr) in relayed DHCP packets. When > diff --git a/controller/chassis.c b/controller/chassis.c > index 07d375a81..0e3bd37d8 100644 > --- a/controller/chassis.c > +++ b/controller/chassis.c > @@ -1181,26 +1181,14 @@ chassis_cleanup(struct ovsdb_idl_txn *ovs_idl_txn, > struct ovsdb_idl_txn *ovnsb_idl_txn, > const struct ovsrec_open_vswitch_table *ovs_table, > const struct sbrec_chassis *chassis_rec, > - const struct sbrec_chassis_private *chassis_private_rec, > - const struct sbrec_advertised_route_status_table > *status_table) > + const struct sbrec_chassis_private *chassis_private_rec) > { > - const char *chassis_name = get_ovs_chassis_id(ovs_table); > - bool has_route_status = false; > - if (status_table && chassis_name) { > - const struct sbrec_advertised_route_status *status; > - SBREC_ADVERTISED_ROUTE_STATUS_TABLE_FOR_EACH (status, > status_table) { > - if (!strcmp(status->chassis_name, chassis_name)) { > - has_route_status = true; > - break; > - } > - } > - } > - > if (!chassis_rec && !chassis_private_rec && > - !is_chassis_idx_stored(ovs_table) && !has_route_status) { > + !is_chassis_idx_stored(ovs_table)) { > return true; > } > > + const char *chassis_name = get_ovs_chassis_id(ovs_table); > if (ovs_idl_txn) { > ovsdb_idl_txn_add_comment( > ovs_idl_txn, > @@ -1219,15 +1207,6 @@ chassis_cleanup(struct ovsdb_idl_txn *ovs_idl_txn, > if (chassis_private_rec) { > sbrec_chassis_private_delete(chassis_private_rec); > } > - if (status_table && chassis_name) { > - const struct sbrec_advertised_route_status *status; > - SBREC_ADVERTISED_ROUTE_STATUS_TABLE_FOR_EACH_SAFE ( > - status, status_table) { > - if (!strcmp(status->chassis_name, chassis_name)) { > - sbrec_advertised_route_status_delete(status); > - } > - } > - } > } > return false; > } > diff --git a/controller/chassis.h b/controller/chassis.h > index 3be39c957..45dd9537a 100644 > --- a/controller/chassis.h > +++ b/controller/chassis.h > @@ -29,7 +29,6 @@ struct ovsrec_open_vswitch_table; > struct sbrec_chassis; > struct sbrec_chassis_table; > struct sbrec_chassis_private_table; > -struct sbrec_advertised_route_status_table; > struct sset; > struct eth_addr; > struct smap; > @@ -51,8 +50,7 @@ bool chassis_cleanup(struct ovsdb_idl_txn *ovs_idl_txn, > struct ovsdb_idl_txn *ovnsb_idl_txn, > const struct ovsrec_open_vswitch_table *, > const struct sbrec_chassis *, > - const struct sbrec_chassis_private *, > - const struct sbrec_advertised_route_status_table *); > + const struct sbrec_chassis_private *); > bool chassis_get_mac(const struct sbrec_chassis *chassis, > const char *bridge_mapping, > struct eth_addr *chassis_mac); > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c > index 38c1acfe8..e7fe5dbc3 100644 > --- a/controller/ovn-controller.c > +++ b/controller/ovn-controller.c > @@ -175,7 +175,6 @@ struct controller_engine_ctx { > struct if_status_mgr *if_mgr; > const unsigned int *ovnsb_expected_cond_seqno; > const bool *sb_monitor_all; > - const struct sbrec_chassis *chassis; > }; > > /* Pending packet to be injected into connected OVS. */ > @@ -222,7 +221,6 @@ static char *get_file_system_id(void) > static unsigned int > update_sb_monitors(struct ovsdb_idl *ovnsb_idl, > const struct sbrec_chassis *chassis, > - const char *chassis_id, > const struct simap *local_ifaces, > const struct shash *local_bindings, > struct hmap *local_datapaths, > @@ -243,8 +241,7 @@ update_sb_monitors(struct ovsdb_idl *ovnsb_idl, > * > * Monitor ECMP_Nexthop for local datapaths. > * > - * Monitor Advertised/Learned_Route for local datapaths and > - * Advertised_Route_Status for the local chassis. > + * Monitor Advertised/Learned_Route for local datapaths. > * > * We always monitor patch ports because they allow us to see the > linkages > * between related logical datapaths. That way, when we know that we > have > @@ -264,7 +261,6 @@ update_sb_monitors(struct ovsdb_idl *ovnsb_idl, > struct ovsdb_idl_condition tv = OVSDB_IDL_CONDITION_INIT(&tv); > struct ovsdb_idl_condition nh = OVSDB_IDL_CONDITION_INIT(&nh); > struct ovsdb_idl_condition ar = OVSDB_IDL_CONDITION_INIT(&ar); > - struct ovsdb_idl_condition ars = OVSDB_IDL_CONDITION_INIT(&ars); > struct ovsdb_idl_condition lr = OVSDB_IDL_CONDITION_INIT(&lr); > struct ovsdb_idl_condition amb = OVSDB_IDL_CONDITION_INIT(&amb); > > @@ -301,7 +297,6 @@ update_sb_monitors(struct ovsdb_idl *ovnsb_idl, > ovsdb_idl_condition_add_clause_true(&tv); > ovsdb_idl_condition_add_clause_true(&nh); > ovsdb_idl_condition_add_clause_true(&ar); > - ovsdb_idl_condition_add_clause_true(&ars); > ovsdb_idl_condition_add_clause_true(&amb); > goto out; > } > @@ -370,16 +365,6 @@ update_sb_monitors(struct ovsdb_idl *ovnsb_idl, > * ones. */ > ovsdb_idl_condition_add_clause_true(&ar); > } > - > - /* The configured name is available before the Chassis row and also > - * matches status rows whose chassis weak reference was cleared when > the > - * Chassis row was deleted. */ > - const char *status_chassis_name = chassis ? chassis->name : > chassis_id; > - if (status_chassis_name) { > - sbrec_advertised_route_status_add_clause_chassis_name( > - &ars, OVSDB_F_EQ, status_chassis_name); > - } > - > if (local_ifaces) { > const char *name; > > @@ -449,7 +434,6 @@ out:; > sbrec_chassis_template_var_set_condition(ovnsb_idl, &tv), > sbrec_ecmp_nexthop_set_condition(ovnsb_idl, &nh), > sbrec_advertised_route_set_condition(ovnsb_idl, &ar), > - sbrec_advertised_route_status_set_condition(ovnsb_idl, &ars), > sbrec_learned_route_set_condition(ovnsb_idl, &lr), > sbrec_advertised_mac_binding_set_condition(ovnsb_idl, &amb), > }; > @@ -473,7 +457,6 @@ out:; > ovsdb_idl_condition_destroy(&tv); > ovsdb_idl_condition_destroy(&nh); > ovsdb_idl_condition_destroy(&ar); > - ovsdb_idl_condition_destroy(&ars); > ovsdb_idl_condition_destroy(&lr); > ovsdb_idl_condition_destroy(&amb); > return expected_cond_seqno; > @@ -785,8 +768,7 @@ update_sb_db(struct ovsdb_idl *ovs_idl, struct > ovsdb_idl *ovnsb_idl, > * extra cost. Instead, it is called after the engine execution > only > * when it is necessary. */ > unsigned int next_cond_seqno = > - update_sb_monitors(ovnsb_idl, NULL, chassis_id, > - NULL, NULL, NULL, true); > + update_sb_monitors(ovnsb_idl, NULL, NULL, NULL, NULL, true); > if (sb_cond_seqno) { > *sb_cond_seqno = next_cond_seqno; > } > @@ -5295,12 +5277,6 @@ struct ed_type_route { > > /* Contains struct advertise_datapath_entry */ > struct hmap announce_routes; > - > - /* Contains struct advertised_route_status recorded by route_run() > - * and published in Advertised_Route_Status by > - * route_exchange_run(). */ > - struct vector advertised_route_status; > - > struct ovsdb_idl *ovnsb_idl; > }; > > @@ -5357,11 +5333,9 @@ en_route_run(struct engine_node *node, void *data) > .filtered_ports = &re_data->filtered_ports, > .tracked_ports_remote = &re_data->tracked_ports_remote, > .announce_routes = &re_data->announce_routes, > - .advertised_route_status = &re_data->advertised_route_status, > }; > > route_cleanup(&re_data->announce_routes); > - advertised_route_status_clear(&re_data->advertised_route_status); > tracked_datapaths_clear(r_ctx_out.tracked_re_datapaths); > sset_clear(r_ctx_out.tracked_ports_local); > sset_clear(r_ctx_out.tracked_ports_remote); > @@ -5370,7 +5344,7 @@ en_route_run(struct engine_node *node, void *data) > sset_clear(r_ctx_out.filtered_ports); > > route_run(&r_ctx_in, &r_ctx_out); > - advertised_route_status_sort(&re_data->advertised_route_status); > + > return EN_UPDATED; > } > > @@ -5388,8 +5362,6 @@ en_route_init(struct engine_node *node OVS_UNUSED, > uuidset_init(&data->relevant_service_monitors); > sset_init(&data->filtered_ports); > hmap_init(&data->announce_routes); > - data->advertised_route_status = > - VECTOR_EMPTY_INITIALIZER(struct advertised_route_status); > data->ovnsb_idl = arg->sb_idl; > > return data; > @@ -5408,7 +5380,6 @@ en_route_cleanup(void *data) > sset_destroy(&re_data->filtered_ports); > route_cleanup(&re_data->announce_routes); > hmap_destroy(&re_data->announce_routes); > - vector_destroy(&re_data->advertised_route_status); > } > > static enum engine_input_handler_result > @@ -5743,113 +5714,10 @@ struct ed_type_route_exchange { > bool sb_changes_pending; > }; > > -static void > -advertised_route_get_withdrawal_reasons( > - const struct advertised_route_status *desired, > - struct smap *withdrawal_reasons) > -{ > - smap_init(withdrawal_reasons); > - if (desired->withdrawal_reason) { > - smap_add(withdrawal_reasons, desired->withdrawal_reason, > - desired->withdrawal_reason_value); > - } > -} > - > -static char * > -advertised_route_get_operational_state( > - struct ed_type_route *route_data, > - const struct advertised_route_status *desired, > - const char **operational_status) > -{ > - struct advertise_datapath_entry *ad = > - advertise_datapath_find(&route_data->announce_routes, > - desired->route->datapath); > - *operational_status = ad && ad->routes_synced > - ? (!strcmp(desired->desired_status, "advertised") > - ? "installed" : "withdrawn") > - : "unknown"; > - > - if (!ad || !ad->route_error_description) { > - return NULL; > - } > - return ad->route_error > - ? xasprintf("%s: %s", ad->route_error_description, > - ovs_strerror(ad->route_error)) > - : xstrdup(ad->route_error_description); > -} > - > -static enum engine_input_handler_result > -route_exchange_sb_advertised_route_status_handler( > - struct engine_node *node, void *data OVS_UNUSED) > -{ > - struct controller_engine_ctx *ctrl_ctx = > - engine_get_context()->client_ctx; > - if (!ctrl_ctx->chassis) { > - return EN_HANDLED_UNCHANGED; > - } > - > - struct ed_type_route *route_data = > - engine_get_input_data("route", node); > - const struct sbrec_advertised_route_status_table *status_table = > - EN_OVSDB_GET(engine_get_input("SB_advertised_route_status", > node)); > - const struct sbrec_advertised_route_status *sb_status; > - > - SBREC_ADVERTISED_ROUTE_STATUS_TABLE_FOR_EACH_TRACKED (sb_status, > - status_table) { > - if (strcmp(sb_status->chassis_name, ctrl_ctx->chassis->name)) { > - continue; > - } > - > - const struct advertised_route_status *desired = > - advertised_route_status_find( > - &route_data->advertised_route_status, > - sb_status->advertised_route); > - if (sbrec_advertised_route_status_is_deleted(sb_status)) { > - if (desired) { > - return EN_UNHANDLED; > - } > - continue; > - } > - > - const struct uuid *route_uuid = desired > - ? &desired->route->header_.uuid : NULL; > - if (!desired || > - sb_status->advertised_route != desired->route || > - !uuid_equals(&sb_status->advertised_route_uuid, route_uuid) || > - sb_status->chassis != ctrl_ctx->chassis) { > - return EN_UNHANDLED; > - } > - > - const char *operational_status; > - char *error = advertised_route_get_operational_state( > - route_data, desired, &operational_status); > - struct smap withdrawal_reasons; > - advertised_route_get_withdrawal_reasons( > - desired, &withdrawal_reasons); > - bool matches = > - !strcmp(sb_status->desired_status, desired->desired_status) && > - smap_equal(&sb_status->withdrawal_reasons, > - &withdrawal_reasons) && > - !strcmp(sb_status->operational_status, operational_status) && > - nullable_string_is_equal(sb_status->error, error); > - smap_destroy(&withdrawal_reasons); > - free(error); > - > - if (!matches) { > - return EN_UNHANDLED; > - } > - } > - > - return EN_HANDLED_UNCHANGED; > -} > - > static enum engine_node_state > en_route_exchange_run(struct engine_node *node, void *data) > { > struct ed_type_route_exchange *re = data; > - struct controller_engine_ctx *ctrl_ctx = > - engine_get_context()->client_ctx; > - > struct ovsdb_idl_index *sbrec_learned_route_by_datapath = > engine_ovsdb_node_get_index( > engine_get_input("SB_learned_route", node), > @@ -5859,11 +5727,6 @@ en_route_exchange_run(struct engine_node *node, > void *data) > engine_ovsdb_node_get_index( > engine_get_input("SB_port_binding", node), > "name"); > - struct ovsdb_idl_index *sbrec_advertised_route_status_by_chassis_name > = > - engine_ovsdb_node_get_index( > - engine_get_input("SB_advertised_route_status", node), > - "chassis_name"); > - > struct ed_type_route *route_data = > engine_get_input_data("route", node); > struct ed_type_route_table_notify *rt_notify = > @@ -5903,106 +5766,6 @@ en_route_exchange_run(struct engine_node *node, > void *data) > }; > > route_exchange_run(&r_ctx_in, &r_ctx_out); > - > - /* Both references are weak. chassis_name is used by RBAC and > cleanup. */ > - if (r_ctx_in.ovnsb_idl_txn && ctrl_ctx->chassis && > - sbrec_server_has_advertised_route_status_table(re->sb_idl)) { > - struct uuidset published = UUIDSET_INITIALIZER(&published); > - const struct sbrec_advertised_route_status *sb_status; > - struct sbrec_advertised_route_status *status_filter = > - sbrec_advertised_route_status_index_init_row( > - sbrec_advertised_route_status_by_chassis_name); > - sbrec_advertised_route_status_index_set_chassis_name( > - status_filter, ctrl_ctx->chassis->name); > - > - SBREC_ADVERTISED_ROUTE_STATUS_FOR_EACH_EQUAL ( > - sb_status, status_filter, > - sbrec_advertised_route_status_by_chassis_name) { > - const struct advertised_route_status *desired = > - advertised_route_status_find( > - &route_data->advertised_route_status, > - sb_status->advertised_route); > - > - const struct uuid *route_uuid = sb_status->advertised_route > - ? &sb_status->advertised_route->header_.uuid : NULL; > - if (!desired || > - !uuid_equals(&sb_status->advertised_route_uuid, > route_uuid) || > - sb_status->chassis != ctrl_ctx->chassis || > - (route_uuid && uuidset_contains(&published, route_uuid))) > { > - sbrec_advertised_route_status_delete(sb_status); > - continue; > - } > - > - uuidset_insert(&published, route_uuid); > - const char *operational_status; > - char *error = advertised_route_get_operational_state( > - route_data, desired, &operational_status); > - struct smap withdrawal_reasons; > - advertised_route_get_withdrawal_reasons( > - desired, &withdrawal_reasons); > - > - if (strcmp(sb_status->desired_status, > - desired->desired_status)) { > - sbrec_advertised_route_status_set_desired_status( > - sb_status, desired->desired_status); > - } > - if (!smap_equal(&sb_status->withdrawal_reasons, > - &withdrawal_reasons)) { > - sbrec_advertised_route_status_set_withdrawal_reasons( > - sb_status, &withdrawal_reasons); > - } > - if (strcmp(sb_status->operational_status, > - operational_status)) { > - sbrec_advertised_route_status_set_operational_status( > - sb_status, operational_status); > - } > - if (!nullable_string_is_equal(sb_status->error, error)) { > - sbrec_advertised_route_status_set_error(sb_status, error); > - } > - smap_destroy(&withdrawal_reasons); > - free(error); > - } > - sbrec_advertised_route_status_index_destroy_row(status_filter); > - > - struct advertised_route_status *desired; > - VECTOR_FOR_EACH_PTR (&route_data->advertised_route_status, > desired) { > - const struct uuid *route_uuid = &desired->route->header_.uuid; > - if (uuidset_contains(&published, route_uuid)) { > - continue; > - } > - > - struct sbrec_advertised_route_status *new_status = > - > sbrec_advertised_route_status_insert(r_ctx_in.ovnsb_idl_txn); > - sbrec_advertised_route_status_set_advertised_route( > - new_status, desired->route); > - sbrec_advertised_route_status_set_advertised_route_uuid( > - new_status, *route_uuid); > - sbrec_advertised_route_status_set_chassis(new_status, > - ctrl_ctx->chassis); > - sbrec_advertised_route_status_set_chassis_name( > - new_status, ctrl_ctx->chassis->name); > - sbrec_advertised_route_status_set_desired_status( > - new_status, desired->desired_status); > - struct smap withdrawal_reasons; > - advertised_route_get_withdrawal_reasons( > - desired, &withdrawal_reasons); > - sbrec_advertised_route_status_set_withdrawal_reasons( > - new_status, &withdrawal_reasons); > - smap_destroy(&withdrawal_reasons); > - > - const char *operational_status; > - char *error = advertised_route_get_operational_state( > - route_data, desired, &operational_status); > - sbrec_advertised_route_status_set_operational_status( > - new_status, operational_status); > - if (error) { > - sbrec_advertised_route_status_set_error(new_status, > error); > - } > - free(error); > - } > - uuidset_destroy(&published); > - } > - > route_table_notify_update(&rt_notify->watches); > > re->sb_changes_pending = r_ctx_out.sb_changes_pending; > @@ -7223,7 +6986,6 @@ evpn_arp_vtep_binding_handler(struct engine_node > *node, void *data OVS_UNUSED) > SB_NODE(chassis_template_var) \ > SB_NODE(acl_id) \ > SB_NODE(advertised_route) \ > - SB_NODE(advertised_route_status) \ > SB_NODE(learned_route) \ > SB_NODE(advertised_mac_binding) \ > SB_NODE(service_monitor) > @@ -7369,8 +7131,6 @@ inc_proc_ovn_controller_init( > engine_noop_handler); > engine_add_input(&en_route_exchange, &en_sb_port_binding, > engine_noop_handler); > - engine_add_input(&en_route_exchange, &en_sb_advertised_route_status, > - route_exchange_sb_advertised_route_status_handler); > engine_add_input(&en_route_exchange, &en_route_table_notify, NULL); > engine_add_input(&en_route_exchange, &en_route_exchange_status, NULL); > engine_add_input(&en_route_exchange, &en_sb_ro, > @@ -7702,16 +7462,6 @@ inc_proc_ovn_controller_init( > &sbrec_learned_route_col_datapath); > engine_ovsdb_node_add_index(&en_sb_learned_route, "datapath", > sbrec_learned_route_index_by_datapath); > - > - struct ovsdb_idl_index > - *sbrec_advertised_route_status_by_chassis_name = > - ovsdb_idl_index_create1( > - sb_idl_loop->idl, > - &sbrec_advertised_route_status_col_chassis_name); > - engine_ovsdb_node_add_index( > - &en_sb_advertised_route_status, "chassis_name", > - sbrec_advertised_route_status_by_chassis_name); > - > struct ovsdb_idl_index *sbrec_advertised_mac_binding_index_by_dp > = ovsdb_idl_index_create1(sb_idl_loop->idl, > > &sbrec_advertised_mac_binding_col_datapath); > @@ -7984,8 +7734,7 @@ main(int argc, char *argv[]) > ovsdb_idl_omit(ovnsb_idl_loop.idl, > &sbrec_chassis_private_col_external_ids); > > - update_sb_monitors(ovnsb_idl_loop.idl, NULL, NULL, > - NULL, NULL, NULL, false); > + update_sb_monitors(ovnsb_idl_loop.idl, NULL, NULL, NULL, NULL, false); > > stopwatch_create(CONTROLLER_LOOP_STOPWATCH_NAME, SW_MS); > stopwatch_create(OFCTRL_PUT_STOPWATCH_NAME, SW_MS); > @@ -8320,7 +8069,6 @@ main(int argc, char *argv[]) > &chassis_private, > sbrec_encaps_index_by_ip_and_type); > } > - ctrl_engine_ctx.chassis = chassis; > > /* If any OVS feature support changed, force a full recompute. > * 'br_int_dp' is valid only if an OVS transaction is > possible. > @@ -8529,7 +8277,7 @@ main(int argc, char *argv[]) > ovnsb_expected_cond_seqno; > ovnsb_expected_cond_seqno = > update_sb_monitors( > - ovnsb_idl_loop.idl, chassis, > chassis_id, > + ovnsb_idl_loop.idl, chassis, > &runtime_data->local_lports, > &runtime_data->lbinding_data.bindings, > &runtime_data->local_datapaths, > @@ -8803,19 +8551,11 @@ loop_done: > ? chassis_private_lookup_by_name( > sbrec_chassis_private_by_name, chassis_id) > : NULL); > - const struct sbrec_advertised_route_status_table > *status_table = > - sbrec_server_has_advertised_route_status_table( > - ovnsb_idl_loop.idl) > - ? sbrec_advertised_route_status_table_get( > - ovnsb_idl_loop.idl) > - : NULL; > - > /* Run all of the cleanup functions, even if one of them > returns > * false. We're done if all of them return true. */ > done = binding_cleanup(ovnsb_idl_txn, port_binding_table, > chassis); > done = chassis_cleanup(ovs_idl_txn, ovnsb_idl_txn, ovs_table, > - chassis, chassis_private, > - status_table) && done; > + chassis, chassis_private) && done; > done = encaps_cleanup(ovs_idl_txn, br_int) && done; > done = igmp_group_cleanup(ovnsb_idl_txn, sbrec_igmp_group, > chassis) > && done; > diff --git a/controller/route-exchange.c b/controller/route-exchange.c > index 24d5b5875..027375071 100644 > --- a/controller/route-exchange.c > +++ b/controller/route-exchange.c > @@ -321,19 +321,13 @@ route_exchange_run(const struct > route_exchange_ctx_in *r_ctx_in, > int error; > > CLEAR_ROUTE_EXCHANGE_NL_STATUS(); > - struct advertise_datapath_entry *ad; > + const struct advertise_datapath_entry *ad; > HMAP_FOR_EACH (ad, node, r_ctx_in->announce_routes) { > - ad->routes_synced = false; > - ad->route_error = 0; > - ad->route_error_description = NULL; > nit: We are no longer setting those, so I have removed them from the struct too. - > uint32_t table_id = route_get_table_id(ad->db); > if (!TABLE_ID_VALID(table_id)) { > VLOG_WARN_RL(&rl, "Unable to sync routes for datapath > "UUID_FMT": " > "invalid table id: %"PRIu32, > UUID_ARGS(&ad->db->header_.uuid), table_id); > - ad->route_error = EINVAL; > - ad->route_error_description = "invalid route table ID"; > continue; > } > > @@ -346,8 +340,6 @@ route_exchange_run(const struct route_exchange_ctx_in > *r_ctx_in, > UUID_FMT": %s.", ad->vrf_name, > UUID_ARGS(&ad->db->header_.uuid), > ovs_strerror(error)); > - ad->route_error = error; > - ad->route_error_description = "unable to create VRF"; > SET_ROUTE_EXCHANGE_NL_STATUS(error); > continue; > } > @@ -371,9 +363,6 @@ route_exchange_run(const struct route_exchange_ctx_in > *r_ctx_in, > "routes on routing table %"PRIu32, > table_id); > entry->can_sync = false; > - ad->route_error = EBUSY; > - ad->route_error_description = > - "multiple datapaths use the same route table"; > } else { > entry->routes = &ad->routes; > } > @@ -394,9 +383,6 @@ route_exchange_run(const struct route_exchange_ctx_in > *r_ctx_in, > } > > if (!entry->can_sync) { > - ad->route_error = EBUSY; > - ad->route_error_description = > - "multiple datapaths use the same route table"; > continue; > } > > @@ -406,7 +392,6 @@ route_exchange_run(const struct route_exchange_ctx_in > *r_ctx_in, > struct advertised_routes_entry *arte; > HMAP_FOR_EACH_POP (arte, node, &advertised_routes) { > maintained_route_table_add(arte->table_id); > - error = 0; > if (arte->can_sync) { > struct vector received_routes = > VECTOR_EMPTY_INITIALIZER(struct > re_nl_received_route_node); > @@ -440,27 +425,6 @@ route_exchange_run(const struct route_exchange_ctx_in > *r_ctx_in, > vector_destroy(&received_routes); > } > > - struct hmapx_node *dp_node; > - HMAPX_FOR_EACH (dp_node, &arte->datapaths) { > - struct advertise_datapath_entry *adpe = > - advertise_datapath_find(r_ctx_in->announce_routes, > - dp_node->data); > - if (!adpe) { > - continue; > - } > - if (!arte->can_sync) { > - adpe->route_error = EBUSY; > - adpe->route_error_description = > - "multiple datapaths use the same route table"; > - } else if (error) { > - adpe->route_error = error; > - adpe->route_error_description = > - "route table reconciliation failed"; > - } else { > - adpe->routes_synced = true; > - } > - } > - > hmapx_destroy(&arte->datapaths); > free(arte); > } > diff --git a/controller/route-exchange.h b/controller/route-exchange.h > index 7ecc66671..a1ef4a359 100644 > --- a/controller/route-exchange.h > +++ b/controller/route-exchange.h > @@ -26,9 +26,8 @@ struct route_exchange_ctx_in { > struct ovsdb_idl_index *sbrec_learned_route_by_datapath; > const struct sbrec_chassis *chassis; > > - /* Contains struct advertise_datapath_entry. route_exchange_run() > records > - * the reconciliation result in each entry. */ > - struct hmap *announce_routes; > + /* Contains struct advertise_datapath_entry */ > + const struct hmap *announce_routes; > }; > > struct route_exchange_ctx_out { > diff --git a/controller/route.c b/controller/route.c > index 00fd9a105..bfa27f4c7 100644 > --- a/controller/route.c > +++ b/controller/route.c > @@ -637,58 +637,6 @@ advertised_datapath_alloc(const struct > sbrec_datapath_binding *datapath) > return ad; > } > > -static void > -route_record_status(struct route_ctx_out *r_ctx_out, > - const struct sbrec_advertised_route *route, > - const char *desired_status, > - const char *withdrawal_reason, > - const char *withdrawal_reason_value) > -{ > - struct advertised_route_status status = { > - .route = route, > - .desired_status = desired_status, > - .withdrawal_reason = withdrawal_reason, > - .withdrawal_reason_value = withdrawal_reason_value, > - }; > - vector_push(r_ctx_out->advertised_route_status, &status); > -} > - > -void > -advertised_route_status_clear(struct vector *statuses) > -{ > - vector_clear(statuses); > -} > - > -static int > -advertised_route_status_cmp(const void *a_, const void *b_) > -{ > - const struct advertised_route_status *a = a_; > - const struct advertised_route_status *b = b_; > - > - return uuid_compare_3way(&a->route->header_.uuid, > - &b->route->header_.uuid); > -} > - > -void > -advertised_route_status_sort(struct vector *statuses) > -{ > - vector_qsort(statuses, advertised_route_status_cmp); > -} > - > -const struct advertised_route_status * > -advertised_route_status_find(const struct vector *statuses, > - const struct sbrec_advertised_route *route) > -{ > - if (!route) { > - return NULL; > - } > - > - const struct advertised_route_status key = { > - .route = route, > - }; > - return vector_bsearch(statuses, &key, advertised_route_status_cmp); > -} > - > void > route_run(struct route_ctx_in *r_ctx_in, > struct route_ctx_out *r_ctx_out) > @@ -847,25 +795,14 @@ route_run(struct route_ctx_in *r_ctx_in, > > if (distributed_lb && > !smap_get_bool(&route->external_ids, "enabled", true)) { > - route_record_status(r_ctx_out, route, "withdrawn", > - "administrative-policy", "disabled"); > continue; > } > > int gate = lb_route_gate_decision(&lb_route_gates, route); > if (gate == 0) { > - if (distributed_lb) { > - route_record_status(r_ctx_out, route, > - "withdrawn", "service-monitor", > - "no-online-backend"); > - } > continue; > } > > - if (distributed_lb) { > - route_record_status(r_ctx_out, route, "advertised", NULL, > NULL); > - } > - > struct in6_addr nexthop = IN6_IS_ADDR_V4MAPPED(&prefix) > ? ad->ipv4_nexthop : ad->ipv6_nexthop; > if (advertise_route_find(priority, &prefix, plen, &nexthop, > diff --git a/controller/route.h b/controller/route.h > index cd078eb96..f629945a8 100644 > --- a/controller/route.h > +++ b/controller/route.h > @@ -69,21 +69,6 @@ struct route_ctx_out { > > /* Contains struct advertise_datapath_entry */ > struct hmap *announce_routes; > - > - /* Contains struct advertised_route_status entries recorded by > - * route_run(), sorted by Advertised_Route UUID for publication in > - * Advertised_Route_Status by route_exchange_run(). */ > - struct vector *advertised_route_status; > -}; > - > -/* Per-route advertisement decision recorded by route_run() so that > - * route_exchange_run() (which holds a writable SB txn) can publish it > for the > - * local chassis in Advertised_Route_Status. */ > -struct advertised_route_status { > - const struct sbrec_advertised_route *route; > - const char *desired_status; > - const char *withdrawal_reason; > - const char *withdrawal_reason_value; > }; > > struct advertise_datapath_entry { > @@ -132,11 +117,6 @@ struct advertise_route_entry > advertise_route_from_route_data(const struct route_data *); > void route_run(struct route_ctx_in *, struct route_ctx_out *); > void route_cleanup(struct hmap *announce_routes); > -void advertised_route_status_clear(struct vector *statuses); > -void advertised_route_status_sort(struct vector *statuses); > -const struct advertised_route_status *advertised_route_status_find( > - const struct vector *statuses, > - const struct sbrec_advertised_route *route); > uint32_t route_get_table_id(const struct sbrec_datapath_binding *); > struct advertise_route_entry * > advertise_route_find(unsigned int priority, const struct in6_addr *prefix, > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c > index dbb9b7a26..499cf9edd 100644 > --- a/northd/ovn-northd.c > +++ b/northd/ovn-northd.c > @@ -132,10 +132,6 @@ static const char *rbac_learned_route_auth[] = > {""}; > static const char *rbac_learned_route_update[] = > {"datapath", "logical_port", "ip_prefix", "nexthop", "external_ids"}; > -static const char *rbac_advertised_route_status_auth[] = > - {"chassis_name"}; > -static const char *rbac_advertised_route_status_update[] = > - {"desired_status", "withdrawal_reasons", "operational_status", > "error"}; > > static struct rbac_perm_cfg { > const char *table; > @@ -226,14 +222,6 @@ static struct rbac_perm_cfg { > .update = rbac_bfd_update, > .n_update = ARRAY_SIZE(rbac_bfd_update), > .row = NULL > - },{ > - .table = "Advertised_Route_Status", > - .auth = rbac_advertised_route_status_auth, > - .n_auth = ARRAY_SIZE(rbac_advertised_route_status_auth), > - .insdel = true, > - .update = rbac_advertised_route_status_update, > - .n_update = ARRAY_SIZE(rbac_advertised_route_status_update), > - .row = NULL > },{ > .table = "Learned_Route", > .auth = rbac_learned_route_auth, > @@ -953,11 +941,6 @@ main(int argc, char *argv[]) > /* Omit unused columns. */ > ovsdb_idl_omit(ovnsb_idl_loop.idl, &sbrec_sb_global_col_connections); > ovsdb_idl_omit(ovnsb_idl_loop.idl, &sbrec_sb_global_col_ssl); > - for (size_t i = 0; > - i < SBREC_ADVERTISED_ROUTE_STATUS_N_COLUMNS; i++) { > - ovsdb_idl_omit(ovnsb_idl_loop.idl, > - &sbrec_advertised_route_status_columns[i]); > - } > > /* Disable alerting for pure write-only columns. */ > ovsdb_idl_omit_alert(ovnsb_idl_loop.idl, &sbrec_sb_global_col_nb_cfg); > diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema > index 3587024bf..6b703f328 100644 > --- a/ovn-sb.ovsschema > +++ b/ovn-sb.ovsschema > @@ -1,7 +1,7 @@ > { > "name": "OVN_Southbound", > - "version": "21.12.0", > - "cksum": "1561088612 38543", > + "version": "21.11.0", nit: Even if it's revert we should bump again just to be safe. > + "cksum": "4289271680 36997", > "tables": { > "SB_Global": { > "columns": { > @@ -682,36 +682,6 @@ > "indexes": [["datapath", "logical_port", > "ip_prefix", "tracked_port"]], > "isRoot": true}, > - "Advertised_Route_Status": { > - "columns": { > - "advertised_route": { > - "type": {"key": {"type": "uuid", > - "refTable": "Advertised_Route", > - "refType": "weak"}, > - "min": 0, "max": 1}}, > - "advertised_route_uuid": {"type": "uuid"}, > - "chassis": { > - "type": {"key": {"type": "uuid", > - "refTable": "Chassis", > - "refType": "weak"}, > - "min": 0, "max": 1}}, > - "chassis_name": {"type": "string"}, > - "desired_status": { > - "type": {"key": {"type": "string", > - "enum": ["set", ["advertised", > - "withdrawn"]]}}}, > - "withdrawal_reasons": { > - "type": {"key": "string", "value": "string", > - "min": 0, "max": "unlimited"}}, > - "operational_status": { > - "type": {"key": {"type": "string", > - "enum": ["set", ["installed", > - "withdrawn", > - "unknown"]]}}}, > - "error": { > - "type": {"key": "string", "min": 0, "max": 1}}}, > - "indexes": [["advertised_route_uuid", "chassis_name"]], > - "isRoot": true}, > "Learned_Route": { > "columns": { > "datapath": {"type": {"key": {"type": "uuid", > diff --git a/ovn-sb.xml b/ovn-sb.xml > index d5c5210dc..037954800 100644 > --- a/ovn-sb.xml > +++ b/ovn-sb.xml > @@ -5538,98 +5538,6 @@ tcp.flags = RST; > </dl> > </column> > </table> > - > - <table name="Advertised_Route_Status"> > - <p> > - Each record reports the desired and kernel route state of one > - distributed Load Balancer <ref table="Advertised_Route"/> on one > - chassis. Several chassis can report the same route. > - </p> > - > - <p> > - A controller creates a row for each > - <code>external_ids:distributed-lb=true</code> route selected for its > - chassis, including withdrawn routes. Other route types have no > status > - rows. A missing row means that the route was not selected for the > - chassis or that the controller has not published its state. Status > rows > - do not indicate controller liveness. > - </p> > - > - <p> > - <code>ovn-controller</code> manages these rows. RBAC restricts each > - controller to its chassis name. Normal controller shutdown and > - <code>ovn-sbctl chassis-del</code> remove the corresponding rows. A > - controller failure followed by generic database deletion of the > Chassis > - can leave rows with cleared weak references. The copied route UUID > and > - chassis name remain available for identifying those rows. > - </p> > - > - <column name="advertised_route"> > - The route for which the chassis made the advertisement decision. > - </column> > - > - <column name="advertised_route_uuid"> > - A copy of the UUID of > - <ref table="Advertised_Route_Status" column="advertised_route"/>. > It > - remains after the weak reference is cleared and avoids duplicate > empty > - values in the status index when several routes are deleted. > - </column> > - > - <column name="chassis"> > - The chassis that made the advertisement decision. > - </column> > - > - <column name="chassis_name"> > - A copy of the name of > - <ref table="Advertised_Route_Status" column="chassis"/>. RBAC uses > this > - value to authorize controller writes. It remains after the weak > - chassis reference is cleared. > - </column> > - > - <column name="desired_status"> > - The chassis's current decision. <code>advertised</code> means the > - controller intends to install the route for export, and > - <code>withdrawn</code> means that it does not. The > - <ref table="Advertised_Route_Status" column="withdrawal_reasons"/> > - map describes why a route is withdrawn. > - </column> > - > - <column name="withdrawal_reasons"> > - Machine-readable reasons for the current > - <ref table="Advertised_Route_Status" column="desired_status"/>. > - The map is empty when the desired state is <code>advertised</code>. > - Initially, <code>administrative-policy=disabled</code> reports an > - <ref table="Advertised_Route" column="external_ids"/> > - <code>enabled=false</code> override, and > - <code>service-monitor=no-online-backend</code> reports that the > - relevant <ref table="Service_Monitor"/> records prevented > - advertisement. Future controller inputs can add reason keys without > - changing the desired-state values. Readers must ignore unknown > keys. > - </column> > - > - <column name="operational_status"> > - The result of reconciling the desired state with the chassis's > kernel > - routing table. <code>installed</code> means reconciliation > completed > - with this route selected. <code>withdrawn</code> means > reconciliation > - completed with this route excluded. <code>unknown</code> means > - reconciliation has not yet completed > - or failed. <ref table="Advertised_Route_Status" > - column="error"/> can contain more detail. > - > - <p> > - This column reports OVN's kernel route. It does not report > whether an > - external routing daemon exported the prefix. Equivalent > - <ref table="Advertised_Route"/> rows with the same prefix, > nexthop and > - priority can share one kernel route. > - </p> > - </column> > - > - <column name="error"> > - A description of the current route-table reconciliation failure. > It is > - cleared after successful reconciliation. > - </column> > - </table> > - > <table name="Learned_Route"> > <p> > Each record represents a route that learned by ovn using some > dynamic > diff --git a/tests/automake.mk b/tests/automake.mk > index d4c1d3710..8084357b5 100644 > --- a/tests/automake.mk > +++ b/tests/automake.mk > @@ -190,17 +190,17 @@ check-userspace-valgrind: all $(valgrind_wrappers) > $(check_DATA) > check-helgrind: all $(valgrind_wrappers) $(check_DATA) > -$(SHELL) '$(TESTSUITE)' -C tests CHECK_VALGRIND=true > VALGRIND='$(HELGRIND)' AUTOTEST_PATH='tests/valgrind:$(AUTOTEST_PATH)' -d > $(TESTSUITEFLAGS) > > -check-system-dpdk: all $(check_DATA) > +check-system-dpdk: all > set $(SHELL) '$(SYSTEM_DPDK_TESTSUITE)' -C tests > AUTOTEST_PATH='$(AUTOTEST_PATH)'; \ > $(SUDO) "$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes > && $(SUDO) "$$@" --recheck) > > # Run kmod tests. Assume kernel modules has been installed or linked into > the kernel > -check-kernel: all $(check_DATA) > +check-kernel: all > set $(SHELL) '$(SYSTEM_KMOD_TESTSUITE)' -C tests > AUTOTEST_PATH='$(AUTOTEST_PATH)'; \ > $(SUDO) "$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes > && $(SUDO) "$$@" --recheck) > > > -check-system-userspace: all $(check_DATA) > +check-system-userspace: all > set $(SHELL) '$(SYSTEM_USERSPACE_TESTSUITE)' -C tests > AUTOTEST_PATH='$(AUTOTEST_PATH)'; \ > $(SUDO) "$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes > && $(SUDO) "$$@" --recheck) > It seems those changes are still needed otherwise the CI fails. > > diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at > index 8af3be8d9..e17ebea76 100644 > --- a/tests/ovn-controller.at > +++ b/tests/ovn-controller.at > @@ -3006,65 +3006,6 @@ OVN_CLEANUP([hv1]) > AT_CLEANUP > ]) > > -OVN_FOR_EACH_NORTHD([ > -AT_SETUP([ovn-controller - advertised route status schema compatibility]) > -AT_KEYWORDS([ovn]) > - > -ovn_start > - > -# Connect a new ovn-controller to an SB database without > -# Advertised_Route_Status. > -$PYTHON -c ' > -import json > -import sys > - > -with open(sys.argv[[1]], encoding="utf-8") as stream: > - schema = json.load(stream) > -schema[["tables"]].pop("Advertised_Route_Status") > -schema[["version"]] = "21.10.0" > -schema.pop("cksum", None) > -json.dump(schema, sys.stdout) > -' "$abs_top_srcdir/ovn-sb.ovsschema" > old-sb.ovsschema > -check ovsdb-client convert $OVN_SB_DB old-sb.ovsschema > -OVS_WAIT_UNTIL([ > - test X"`ovsdb-client get-schema-version $OVN_SB_DB OVN_Southbound`" \ > - = X21.10.0 > -]) > - > -# Restart ovsdb-server so that the _Server database reports the old > schema. > -as ovn-sb > -OVS_APP_EXIT_AND_WAIT([ovsdb-server]) > -mv "$ovs_base"/ovn-sb/ovsdb-server.log \ > - "$ovs_base"/ovn-sb/ovsdb-server-before-schema-restart.log > -as ovn-sb start_daemon ovsdb-server \ > - -vjsonrpc \ > - --remote=punix:"$ovs_base"/ovn-sb/ovn-sb.sock \ > - --remote=db:OVN_Southbound,SB_Global,connections \ > - --private-key="$PKIDIR"/testpki-test-privkey.pem \ > - --certificate="$PKIDIR"/testpki-test-cert.pem \ > - --ca-cert="$PKIDIR"/testpki-cacert.pem \ > - "$ovs_base"/ovn-sb/ovn-sb.db > -PARSE_LISTENING_PORT([ovn-sb/ovsdb-server.log], [TCP_PORT]) > -SSL_OVN_SB_DB=ssl:127.0.0.1:$TCP_PORT > -export SSL_OVN_SB_DB > - > -net_add n1 > -sim_add hv1 > -as hv1 > -ovs-vsctl add-br br-phys > -ovn_attach n1 br-phys 192.168.0.1 > - > -# The controller registers and omits status publication. > -wait_row_count Chassis 1 name=hv1 > -OVS_WAIT_FOR_OUTPUT([ovn-appctl -t ovn-controller connection-status], > - [0], [connected > -]) > - > -OVN_CLEANUP([hv1 > -/lacks Advertised_Route_Status table/d]) > -AT_CLEANUP > -]) > - > AT_SETUP([ovn-controller - ssl/tls ciphers using command line options]) > AT_KEYWORDS([ovn]) > AT_SKIP_IF([test "$HAVE_OPENSSL" = no]) > diff --git a/tests/ovn-inc-proc-graph-dump.at b/tests/ > ovn-inc-proc-graph-dump.at > index ea70293ce..81f8c151f 100644 > --- a/tests/ovn-inc-proc-graph-dump.at > +++ b/tests/ovn-inc-proc-graph-dump.at > @@ -463,7 +463,6 @@ digraph "Incremental-Processing-Engine" { > SB_datapath_binding -> route > [[label="route_sb_datapath_binding_handler"]]; > SB_service_monitor -> route > [[label="route_sb_service_monitor_handler"]]; > SB_learned_route [[style=filled, shape=box, fillcolor=white, > label="SB_learned_route"]]; > - SB_advertised_route_status [[style=filled, shape=box, > fillcolor=white, label="SB_advertised_route_status"]]; > route_table_notify [[style=filled, shape=box, fillcolor=white, > label="route_table_notify"]]; > route_exchange_status [[style=filled, shape=box, fillcolor=white, > label="route_exchange_status"]]; > route_exchange [[style=filled, shape=box, fillcolor=white, > label="route_exchange"]]; > @@ -472,7 +471,6 @@ digraph "Incremental-Processing-Engine" { > route -> route_exchange [[label=""]]; > SB_learned_route -> route_exchange [[label="engine_noop_handler"]]; > SB_port_binding -> route_exchange [[label="engine_noop_handler"]]; > - SB_advertised_route_status -> route_exchange > [[label="route_exchange_sb_advertised_route_status_handler"]]; > route_table_notify -> route_exchange [[label=""]]; > route_exchange_status -> route_exchange [[label=""]]; > sb_ro -> route_exchange [[label="route_exchange_sb_ro_handler"]]; > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > index 8c8d7852e..85f001003 100644 > --- a/tests/ovn-northd.at > +++ b/tests/ovn-northd.at > @@ -15867,17 +15867,6 @@ AT_SETUP([RBAC -- Recover builtin role and > permissions]) > ovn_start > > wait_row_count RBAC_Role 1 name=ovn-controller > -# Route status has a dedicated chassis-owned table. Do not grant > -# ovn-controller column-wide access to the northd-owned Advertised_Route > map, > -# where administrative keys such as external_ids:enabled live. > -check_row_count RBAC_Permission 0 table=Advertised_Route > -check_column '[chassis_name]' RBAC_Permission authorization \ > - table=Advertised_Route_Status > -check_column true RBAC_Permission insert_delete \ > - table=Advertised_Route_Status > -check_column 'desired_status error operational_status withdrawal_reasons' > \ > - RBAC_Permission update \ > - table=Advertised_Route_Status > RBR_BUILTIN_PNAMES=$(fetch_column RBAC_Role permissions > name=ovn-controller | uuidfilt | sed -e 's/<[[^<>]]>*//g' | tr -d '=,{}') > > declare -A RBR_BUILTIN_PERM > diff --git a/tests/ovn-sbctl.at b/tests/ovn-sbctl.at > index 2ce682870..c789d27d8 100644 > --- a/tests/ovn-sbctl.at > +++ b/tests/ovn-sbctl.at > @@ -96,11 +96,6 @@ ch2_uuid=$(ovn-sbctl -d bare --no-headings --columns > _uuid find chassis name=ch2 > check_uuid ovn-sbctl create Chassis_Private name=ch2 chassis=$ch2_uuid > check_row_count Chassis_Private 1 > > -check_uuid ovn-sbctl create Advertised_Route_Status \ > - advertised_route_uuid=$ch2_uuid chassis=$ch2_uuid chassis_name=ch2 \ > - desired_status=advertised operational_status=installed > -check_row_count Advertised_Route_Status 1 chassis_name=ch2 > - > AT_CHECK([ovn-sbctl -f csv -d bare --no-headings --columns ip,type list > encap | sort], > [0], [dnl > 1.2.3.5,geneve > @@ -115,7 +110,6 @@ AT_CHECK([ovn-sbctl -f csv -d bare --no-headings > --columns ip,type list encap | > 1.2.3.5,vxlan > ]) > check_row_count Chassis_Private 0 > -check_row_count Advertised_Route_Status 0 chassis_name=ch2 > > as ovn-sb > OVS_APP_EXIT_AND_WAIT([ovsdb-server]) > diff --git a/tests/system-ovn.at b/tests/system-ovn.at > index d4f2ce69e..dc1bb1d74 100644 > --- a/tests/system-ovn.at > +++ b/tests/system-ovn.at > @@ -22725,47 +22725,6 @@ wait_row_count sb:Advertised_Route 1 > ip_prefix='"172.16.1.10"' > lb_ar=$(ovn-sbctl --bare --columns=_uuid find Advertised_Route \ > ip_prefix=172.16.1.10) > test -n "$lb_ar" > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > -check_column 'service-monitor=no-online-backend' \ > - Advertised_Route_Status withdrawal_reasons \ > - advertised_route=$lb_ar chassis_name=hv1 > - > -# The hv1 role can change its status columns. The checks below reject > writes > -# to another chassis, identity columns and Advertised_Route. > -if test -n "$SSL_OVN_SB_DB"; then > - # Rejected writes are checked below with their expected nonzero > status. > - rbac_hv1_sbctl() { > - command ovn-sbctl --db=$SSL_OVN_SB_DB \ > - --private-key=$PKIDIR/testpki-hv1-privkey.pem \ > - --certificate=$PKIDIR/testpki-hv1-cert.pem \ > - --ca-cert=$PKIDIR/testpki-cacert.pem "$@" > - } > - > - hv1_status=$(ovn-sbctl --bare --columns=_uuid \ > - find Advertised_Route_Status advertised_route=$lb_ar \ > - chassis_name=hv1) > - hv2_status=$(ovn-sbctl create Advertised_Route_Status \ > - advertised_route=$lb_ar advertised_route_uuid=$lb_ar \ > - chassis_name=hv2 desired_status=advertised \ > - operational_status=unknown) > - > - AT_CHECK([rbac_hv1_sbctl set Advertised_Route_Status $hv2_status \ > - desired_status=withdrawn], [1], [ignore], [ignore]) > - AT_CHECK([rbac_hv1_sbctl destroy Advertised_Route_Status $hv2_status], > - [1], [ignore], [ignore]) > - check rbac_hv1_sbctl set Advertised_Route_Status $hv1_status \ > - withdrawal_reasons:rbac-test=allowed > - AT_CHECK([rbac_hv1_sbctl set Advertised_Route_Status $hv1_status \ > - chassis_name=hv2], [1], [ignore], [ignore]) > - AT_CHECK([rbac_hv1_sbctl set Advertised_Route_Status $hv1_status \ > - advertised_route_uuid=$hv2_status], [1], [ignore], [ignore]) > - AT_CHECK([rbac_hv1_sbctl set Advertised_Route $lb_ar \ > - external_ids:enabled=false], [1], [ignore], [ignore]) > - > - check ovn-sbctl destroy Advertised_Route_Status $hv2_status > -fi > > # The offline monitor withdraws the route. > AT_CHECK([ > @@ -22781,7 +22740,6 @@ central_ar=$(ovn-sbctl --bare --columns=_uuid find > Advertised_Route \ > test -n "$central_ar" > AT_CHECK([! ovn-sbctl --bare get Advertised_Route $central_ar > external_ids | > grep -q 'distributed-lb']) > -wait_row_count sb:Advertised_Route_Status 0 chassis_name=hv1 > OVS_WAIT_UNTIL([ > ip route list vrf ovnvrf1339 | grep -q "blackhole 172.16.1.10"]) > > @@ -22798,9 +22756,6 @@ lb_ar=$(ovn-sbctl --bare --columns=_uuid find > Advertised_Route \ > test -n "$lb_ar" > AT_CHECK([ovn-sbctl --bare get Advertised_Route $lb_ar external_ids | > grep -q 'distributed-lb.*true']) > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > OVS_WAIT_UNTIL([ > ! ip route list vrf ovnvrf1339 | grep -q "blackhole 172.16.1.10"]) > > @@ -22818,9 +22773,6 @@ check ovn-sbctl chassis-add hv2 geneve 169.0.0.2 > hv2=$(fetch_column Chassis _uuid name=hv2) > check ovn-sbctl set Port_Binding be0 chassis=$hv2 > wait_row_count Service_Monitor 1 logical_port=be0 status=offline > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > AT_CHECK([ > ip route list vrf ovnvrf1339 | grep -c "blackhole 172.16.1.10" || true > ], [0], [0 > @@ -22831,7 +22783,6 @@ AT_CHECK([ > # recompute hv1's route node. > check ovn-nbctl --wait=hv set Logical_Router_Port lr-origin-share \ > options:dynamic-routing-redistribute-local-only=true > -wait_row_count sb:Advertised_Route_Status 0 chassis_name=hv1 > > sm_v4=$(ovn-sbctl --bare --columns=_uuid find Service_Monitor \ > logical_port=be0 ip='"192.168.0.10"' port=80 protocol=tcp) > @@ -22867,23 +22818,12 @@ OVS_WAIT_UNTIL([ > route_recompute_ct=$(ovn-appctl inc-engine/show-stats route recompute) > test "$route_recompute_ct" -ne 0 > ]) > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > -check_column '' Advertised_Route_Status withdrawal_reasons \ > - advertised_route=$lb_ar chassis_name=hv1 > OVS_WAIT_UNTIL([ > ip route list vrf ovnvrf1339 | grep -q "blackhole 172.16.1.10"]) > > # Stop the backend and wait for route withdrawal. > kill `cat $be0_pid_file` > wait_row_count Service_Monitor 1 logical_port=be0 status=offline > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > -check_column 'service-monitor=no-online-backend' \ > - Advertised_Route_Status withdrawal_reasons \ > - advertised_route=$lb_ar chassis_name=hv1 > OVS_WAIT_UNTIL([ > ! ip route list vrf ovnvrf1339 | grep -q "blackhole 172.16.1.10"]) > > @@ -22947,9 +22887,6 @@ OVS_WAIT_UNTIL([ > route_recompute_ct=$(ovn-appctl inc-engine/show-stats route recompute) > test "$route_recompute_ct" -ne 0 > ]) > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > OVS_WAIT_UNTIL([ > ! ip route list vrf ovnvrf1339 | grep -q "blackhole 172.16.1.10"]) > check ovn-sbctl destroy Service_Monitor $unrelated_sm > @@ -22983,9 +22920,6 @@ AT_CHECK([ > ip -6 route list vrf ovnvrf1339 | grep -c "blackhole fd00::200" || > true > ], [0], [0 > ]) > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar_v6 \ > - advertised_route_uuid=$lb_ar_v6 chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > > # Pause northd so it cannot overwrite the monitor ip, then rewrite the > # ip to its expanded textual form. A forced recompute makes the > @@ -23010,12 +22944,6 @@ AT_CHECK([ > ip -6 route list vrf ovnvrf1339 | grep -c "blackhole fd00::200" || > true > ], [0], [0 > ]) > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar_v6 \ > - advertised_route_uuid=$lb_ar_v6 chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > -check_column 'service-monitor=no-online-backend' \ > - Advertised_Route_Status withdrawal_reasons \ > - advertised_route=$lb_ar_v6 chassis_name=hv1 > # Resume northd. It repairs the monitor ip back to compressed form. > check as northd ovn-appctl -t ovn-northd resume > wait_row_count Service_Monitor 1 logical_port=be0 ip='"fd00::10"' \ > @@ -23025,9 +22953,6 @@ wait_row_count Service_Monitor 1 logical_port=be0 > ip='"fd00::10"' \ > # unconditional. > check ovn-nbctl clear Load_Balancer lb0 health_check > wait_row_count Service_Monitor 0 logical_port=be0 > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > OVS_WAIT_UNTIL([ > ip route list vrf ovnvrf1339 | grep -q "blackhole 172.16.1.10"]) > > @@ -23047,21 +22972,10 @@ check test "$route_recompute_ct" -eq 0 > check ovn-sbctl destroy Service_Monitor $ungated_sm > check as northd ovn-appctl -t ovn-northd resume > > -# Add a second VIP so both routes can be deleted in one transaction. > -check ovn-nbctl --wait=hv lb-add lb0 172.16.1.11:80 192.168.0.10:80 > -lb_ar2=$(ovn-sbctl --bare --columns=_uuid find Advertised_Route \ > - ip_prefix=172.16.1.11) > -test -n "$lb_ar2" > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar2 \ > - advertised_route_uuid=$lb_ar2 chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > - > # Remove the routes. > check ovn-nbctl --wait=hv lr-lb-del lr-target lb0 > wait_row_count sb:Advertised_Route 0 ip_prefix='"172.16.1.10"' > -wait_row_count sb:Advertised_Route 0 ip_prefix='"172.16.1.11"' > wait_row_count sb:Advertised_Route 0 ip_prefix='"fd00::200"' > -wait_row_count sb:Advertised_Route_Status 0 chassis_name=hv1 > > OVS_APP_EXIT_AND_WAIT([ovn-controller]) > > @@ -23518,28 +23432,12 @@ lb_ar=$(ovn-sbctl --columns=_uuid,external_ids > find Advertised_Route \ > /source.*lb/ { print uuid; exit } > ') > test -n "$lb_ar" > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > - > -# The NAT route has no status row. > -nat_ar=$(ovn-sbctl --columns=_uuid,tracked_port find Advertised_Route \ > - ip_prefix=172.16.1.10 | awk ' > - /_uuid/ { uuid = $3 } > - /tracked_port/ && length($3) != 36 { print uuid; exit } > - ') > -test -n "$nat_ar" > -wait_row_count sb:Advertised_Route_Status 0 advertised_route=$nat_ar \ > - chassis_name=hv1 > > # Start the listener and install the LB route. > be_pid_file=$(mktemp be0_http.XXX.pid) > NETNS_DAEMONIZE([be0_ns], > [[$PYTHON $srcdir/test-l7.py http]], [$be_pid_file]) > wait_row_count Service_Monitor 1 logical_port=be0 status=online > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > # Both routes are installed at different priorities. > AT_CHECK([ > ip route list vrf ovnvrf1342 | grep -c "blackhole 172.16.1.10" > @@ -23548,12 +23446,6 @@ AT_CHECK([ > > # Disable the LB route. The NAT route remains. > check ovn-sbctl set Advertised_Route $lb_ar external_ids:enabled=false > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > -check_column 'administrative-policy=disabled' \ > - Advertised_Route_Status withdrawal_reasons \ > - advertised_route=$lb_ar chassis_name=hv1 > AT_CHECK([ > ip route list vrf ovnvrf1342 | grep -c "blackhole 172.16.1.10" > ], [0], [1 > @@ -23561,73 +23453,10 @@ AT_CHECK([ > > # Re-enable the LB route. > check ovn-sbctl remove Advertised_Route $lb_ar external_ids enabled > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > - > -# Delete the local status row and wait for the controller to recreate it. > -old_status=$(ovn-sbctl --bare --columns=_uuid \ > - find Advertised_Route_Status advertised_route=$lb_ar chassis_name=hv1) > -check ovn-sbctl destroy Advertised_Route_Status $old_status > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > -repaired_status=$(ovn-sbctl --bare --columns=_uuid \ > - find Advertised_Route_Status advertised_route=$lb_ar chassis_name=hv1) > -AT_CHECK([test "$old_status" != "$repaired_status"]) > - > -# Corrupt the status and wait for the controller to restore it. > -check ovn-sbctl set Advertised_Route_Status $repaired_status \ > - desired_status=withdrawn operational_status=unknown \ > - withdrawal_reasons:unexpected=forced-corruption > error=forced-corruption > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=advertised operational_status=installed > -check_column '' Advertised_Route_Status withdrawal_reasons \ > - advertised_route=$lb_ar chassis_name=hv1 > -OVS_WAIT_UNTIL([ > - test X"`ovn-sbctl --bare --columns=error \ > - find Advertised_Route_Status advertised_route=$lb_ar \ > - chassis_name=hv1`" = X > -]) > - > -# The controller removes an unexpected row bearing its chassis name. > -hv1_chassis=$(fetch_column Chassis _uuid name=hv1) > -unexpected_status=$(ovn-sbctl create Advertised_Route_Status \ > - advertised_route_uuid=$hv1_chassis chassis=$hv1_chassis \ > - chassis_name=hv1 desired_status=advertised operational_status=unknown) > -OVS_WAIT_UNTIL([ > - ! ovn-sbctl get Advertised_Route_Status $unexpected_status _uuid \ > - 2>/dev/null > -]) > - > -# Table 252 (RT_TABLE_COMPAT) is rejected by route exchange. Check the > -# reported error, then restore the VRF table. > -check ovn-nbctl --wait=hv set Logical_Router lr-origin \ > - options:dynamic-routing-vrf-id=252 > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - chassis_name=hv1 desired_status=advertised operational_status=unknown > -OVS_WAIT_UNTIL([ > - ovn-sbctl --bare --columns=error find Advertised_Route_Status \ > - advertised_route=$lb_ar chassis_name=hv1 | > - grep -q 'invalid route table ID' > -]) > - > -check ovn-nbctl --wait=hv set Logical_Router lr-origin \ > - options:dynamic-routing-vrf-id=1342 > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - chassis_name=hv1 desired_status=advertised > operational_status=installed > -OVS_WAIT_UNTIL([ > - test X"`ovn-sbctl --bare --columns=error find Advertised_Route_Status > \ > - advertised_route=$lb_ar chassis_name=hv1`" = X > -]) > > # Stop the listener and withdraw the LB route. > kill `cat $be_pid_file` > wait_row_count Service_Monitor 1 logical_port=be0 status=offline > -wait_row_count sb:Advertised_Route_Status 1 advertised_route=$lb_ar \ > - advertised_route_uuid=$lb_ar chassis_name=hv1 \ > - desired_status=withdrawn operational_status=withdrawn > # The NAT route remains installed. > AT_CHECK([ > ip route list vrf ovnvrf1342 | grep -c "blackhole 172.16.1.10" > @@ -23686,8 +23515,6 @@ exact_ar=$(ovn-sbctl --bare --columns=_uuid find > Advertised_Route \ > test -n "$exact_ar" > AT_CHECK([! ovn-sbctl --bare get Advertised_Route $exact_ar external_ids > | \ > grep -Eq 'source|distributed-lb|health-checks']) > -wait_row_count sb:Advertised_Route_Status 0 advertised_route=$exact_ar \ > - chassis_name=hv1 > AT_CHECK([ > ip route list vrf ovnvrf1342 | grep -c "blackhole 172.16.1.20" > ], [0], [1 > @@ -23803,12 +23630,6 @@ check ovn-sbctl set Port_Binding be0 chassis=$hv2 > OVS_WAIT_UNTIL([ > ! ip route list vrf ovnvrf1342 | grep -q "blackhole 172.16.1.10"]) > > -# With the backend remote and local-only enabled, hv1 must not > -# publish an Advertised_Route_Status row for the VIP: the route is > -# not selected for this chassis, so no status is recorded. > -wait_row_count sb:Advertised_Route_Status 0 \ > - chassis_name=hv1 > - > # Return the backend to hv1. > check ovn-sbctl clear Port_Binding be0 chassis > check ovn-sbctl destroy Chassis $hv2 > @@ -23820,11 +23641,6 @@ wait_row_count Port_Binding 1 logical_port=be0 > chassis=$hv1_uuid > OVS_WAIT_UNTIL([ > ip route list vrf ovnvrf1342 | grep -q "blackhole 172.16.1.10"]) > > -# With the backend local again, hv1 publishes an Advertised_Route_Status > -# row with desired_status=advertised. > -wait_row_count sb:Advertised_Route_Status 1 \ > - chassis_name=hv1 > - > # Disable local-only. Even with the backend on a remote chassis the > # route stays because local-only no longer restricts installation. > check ovn-nbctl --wait=hv set Logical_Router_Port lr-origin-share \ > diff --git a/utilities/ovn-sbctl.8.xml b/utilities/ovn-sbctl.8.xml > index 12bc58dd1..18c4a5d36 100644 > --- a/utilities/ovn-sbctl.8.xml > +++ b/utilities/ovn-sbctl.8.xml > @@ -322,9 +322,8 @@ > <dt>[<code>--if-exists</code>] <var>chassis-del > <var>chassis</var></var></dt> > <dd> > <p> > - Deletes <var>chassis</var>, its <var>encaps</var> and > - <var>gateway_ports</var>, and its > - <code>Advertised_Route_Status</code> records. > + Deletes <var>chassis</var> and its <var>encaps</var> and > + <var>gateway_ports</var>. > </p> > > <p> > diff --git a/utilities/ovn-sbctl.c b/utilities/ovn-sbctl.c > index d7fbc765e..c06bc435c 100644 > --- a/utilities/ovn-sbctl.c > +++ b/utilities/ovn-sbctl.c > @@ -360,9 +360,6 @@ pre_get_info(struct ctl_context *ctx) > > ovsdb_idl_add_column(ctx->idl, &sbrec_chassis_private_col_name); > > - ovsdb_idl_add_column(ctx->idl, > - &sbrec_advertised_route_status_col_chassis_name); > - > ovsdb_idl_add_column(ctx->idl, &sbrec_encap_col_type); > ovsdb_idl_add_column(ctx->idl, &sbrec_encap_col_ip); > > @@ -513,20 +510,6 @@ cmd_chassis_del(struct ctl_context *ctx) > free(sbctl_ch_priv); > } > > - if (sbrec_server_has_advertised_route_status_table(ctx->idl)) > { > - const struct sbrec_advertised_route_status_table > - *status_table = > - sbrec_advertised_route_status_table_get(ctx->idl); > - const struct sbrec_advertised_route_status *status; > - SBREC_ADVERTISED_ROUTE_STATUS_TABLE_FOR_EACH_SAFE ( > - status, status_table) { > - if (!strcmp(status->chassis_name, > - sbctl_ch->ch_cfg->name)) { > - sbrec_advertised_route_status_delete(status); > - } > - } > - } > - > sbrec_chassis_delete(sbctl_ch->ch_cfg); > } > shash_find_and_delete(&sbctl_ctx->chassis, ctx->argv[1]); > -- > 2.53.0 > > > Thank you Dmitrii, applied to main with the nits taken care of. Regards, Ales _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
