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

Reply via email to