From c6f4b3a47571d87149b86c999b78509185da7647 Mon Sep 17 00:00:00 2001
From: Dumitru Ceara <dceara@redhat.com>
Date: Wed, 13 Jan 2021 10:23:09 +0100
Subject: [PATCH 1/3] ofctrl: Rename 'nb_cfg' to 'req_cfg'.
A future commit will extend the ofctrl OVS barrier sync mechanism to
make it usable by multiple components. One of the use cases will be
'nb_cfg' sync but it may not be the only one.
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Acked-by: Mark Michelson <mmichels@redhat.com>
Acked-by: Numan Siddique <numans@ovn.org>
Signed-off-by: Numan Siddique <numans@ovn.org>
(cherry picked from upstream master commit 2f933fc560330022cfc816ed870da6e5847809c9)
Change-Id: Iddeeeb6aaee189a3e9918426e0dce3f1dbf6ff49
---
controller/ofctrl.c | 70 ++++++++++++++++++++++-----------------------
controller/ofctrl.h | 4 +--
controller/ovn-controller.c | 6 ++--
3 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/controller/ofctrl.c b/controller/ofctrl.c
index a1ac695..9d62e12 100644
--- a/controller/ofctrl.c
+++ b/controller/ofctrl.c
@@ -268,13 +268,14 @@ enum ofctrl_state {
/* An in-flight update to the switch's flow table.
*
* When we receive a barrier reply from the switch with the given 'xid', we
- * know that the switch is caught up to northbound database sequence number
- * 'nb_cfg' (and make that available to the client via ofctrl_get_cur_cfg(), so
- * that it can store it into our Chassis record's nb_cfg column). */
+ * know that the switch is caught up to the requested sequence number
+ * 'req_cfg' (and make that available to the client via ofctrl_get_cur_cfg(),
+ * so that it can store it into external state, e.g., our Chassis record's
+ * nb_cfg column). */
struct ofctrl_flow_update {
struct ovs_list list_node; /* In 'flow_updates'. */
ovs_be32 xid; /* OpenFlow transaction ID for barrier. */
- int64_t nb_cfg; /* Northbound database sequence number. */
+ uint64_t req_cfg; /* Requested sequence number. */
};
static struct ofctrl_flow_update *
@@ -286,8 +287,8 @@ ofctrl_flow_update_from_list_node(const struct ovs_list *list_node)
/* Currently in-flight updates. */
static struct ovs_list flow_updates;
-/* nb_cfg of latest committed flow update. */
-static int64_t cur_cfg;
+/* req_cfg of latest committed flow update. */
+static uint64_t cur_cfg;
/* Current state. */
static enum ofctrl_state state;
@@ -632,8 +633,8 @@ recv_S_UPDATE_FLOWS(const struct ofp_header *oh, enum ofptype type,
struct ofctrl_flow_update *fup = ofctrl_flow_update_from_list_node(
ovs_list_front(&flow_updates));
if (fup->xid == oh->xid) {
- if (fup->nb_cfg >= cur_cfg) {
- cur_cfg = fup->nb_cfg;
+ if (fup->req_cfg >= cur_cfg) {
+ cur_cfg = fup->req_cfg;
}
ovs_list_remove(&fup->list_node);
free(fup);
@@ -763,7 +764,7 @@ ofctrl_destroy(void)
shash_destroy(&symtab);
}
-int64_t
+uint64_t
ofctrl_get_cur_cfg(void)
{
return cur_cfg;
@@ -2024,28 +2025,28 @@ void
ofctrl_put(struct ovn_desired_flow_table *flow_table,
struct shash *pending_ct_zones,
const struct sbrec_meter_table *meter_table,
- int64_t nb_cfg,
+ uint64_t req_cfg,
bool flow_changed)
{
static bool skipped_last_time = false;
- static int64_t old_nb_cfg = 0;
+ static uint64_t old_req_cfg = 0;
bool need_put = false;
if (flow_changed || skipped_last_time || need_reinstall_flows) {
need_put = true;
- old_nb_cfg = nb_cfg;
- } else if (nb_cfg != old_nb_cfg) {
- /* nb_cfg changed since last ofctrl_put() call */
- if (cur_cfg == old_nb_cfg) {
+ old_req_cfg = req_cfg;
+ } else if (req_cfg != old_req_cfg) {
+ /* req_cfg changed since last ofctrl_put() call */
+ if (cur_cfg == old_req_cfg) {
/* If there are no updates pending, we were up-to-date already,
- * update with the new nb_cfg.
+ * update with the new req_cfg.
*/
if (ovs_list_is_empty(&flow_updates)) {
- cur_cfg = nb_cfg;
- old_nb_cfg = nb_cfg;
+ cur_cfg = req_cfg;
+ old_req_cfg = req_cfg;
}
} else {
need_put = true;
- old_nb_cfg = nb_cfg;
+ old_req_cfg = req_cfg;
}
}
@@ -2187,24 +2188,23 @@ ofctrl_put(struct ovn_desired_flow_table *flow_table,
/* Track the flow update. */
struct ofctrl_flow_update *fup, *prev;
LIST_FOR_EACH_REVERSE_SAFE (fup, prev, list_node, &flow_updates) {
- if (nb_cfg < fup->nb_cfg) {
+ if (req_cfg < fup->req_cfg) {
/* This ofctrl_flow_update is for a configuration later than
- * 'nb_cfg'. This should not normally happen, because it means
- * that 'nb_cfg' in the SB_Global table of the southbound
- * database decreased, and it should normally be monotonically
- * increasing. */
- VLOG_WARN("nb_cfg regressed from %"PRId64" to %"PRId64,
- fup->nb_cfg, nb_cfg);
+ * 'req_cfg'. This should not normally happen, because it
+ * means that the local seqno decreased and it should normally
+ * be monotonically increasing. */
+ VLOG_WARN("req_cfg regressed from %"PRId64" to %"PRId64,
+ fup->req_cfg, req_cfg);
ovs_list_remove(&fup->list_node);
free(fup);
- } else if (nb_cfg == fup->nb_cfg) {
+ } else if (req_cfg == fup->req_cfg) {
/* This ofctrl_flow_update is for the same configuration as
- * 'nb_cfg'. Probably, some change to the physical topology
+ * 'req_cfg'. Probably, some change to the physical topology
* means that we had to revise the OpenFlow flow table even
* though the logical topology did not change. Update fp->xid,
* so that we don't send a notification that we're up-to-date
* until we're really caught up. */
- VLOG_DBG("advanced xid target for nb_cfg=%"PRId64, nb_cfg);
+ VLOG_DBG("advanced xid target for req_cfg=%"PRId64, req_cfg);
fup->xid = xid_;
goto done;
} else {
@@ -2216,18 +2216,18 @@ ofctrl_put(struct ovn_desired_flow_table *flow_table,
fup = xmalloc(sizeof *fup);
ovs_list_push_back(&flow_updates, &fup->list_node);
fup->xid = xid_;
- fup->nb_cfg = nb_cfg;
+ fup->req_cfg = req_cfg;
done:;
} else if (!ovs_list_is_empty(&flow_updates)) {
- /* Getting up-to-date with 'nb_cfg' didn't require any extra flow table
- * changes, so whenever we get up-to-date with the most recent flow
- * table update, we're also up-to-date with 'nb_cfg'. */
+ /* Getting up-to-date with 'req_cfg' didn't require any extra flow
+ * table changes, so whenever we get up-to-date with the most recent
+ * flow table update, we're also up-to-date with 'req_cfg'. */
struct ofctrl_flow_update *fup = ofctrl_flow_update_from_list_node(
ovs_list_back(&flow_updates));
- fup->nb_cfg = nb_cfg;
+ fup->req_cfg = req_cfg;
} else {
/* We were completely up-to-date before and still are. */
- cur_cfg = nb_cfg;
+ cur_cfg = req_cfg;
}
flow_table->change_tracked = true;
diff --git a/controller/ofctrl.h b/controller/ofctrl.h
index 64b0ea5..8876956 100644
--- a/controller/ofctrl.h
+++ b/controller/ofctrl.h
@@ -55,12 +55,12 @@ enum mf_field_id ofctrl_get_mf_field_id(void);
void ofctrl_put(struct ovn_desired_flow_table *,
struct shash *pending_ct_zones,
const struct sbrec_meter_table *,
- int64_t nb_cfg,
+ uint64_t nb_cfg,
bool flow_changed);
bool ofctrl_can_put(void);
void ofctrl_wait(void);
void ofctrl_destroy(void);
-int64_t ofctrl_get_cur_cfg(void);
+uint64_t ofctrl_get_cur_cfg(void);
void ofctrl_ct_flush_zone(uint16_t zone_id);
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
index 7551287..42883b4 100644
--- a/controller/ovn-controller.c
+++ b/controller/ovn-controller.c
@@ -798,11 +798,11 @@ restore_ct_zones(const struct ovsrec_bridge_table *bridge_table,
}
}
-static int64_t
+static uint64_t
get_nb_cfg(const struct sbrec_sb_global_table *sb_global_table,
unsigned int cond_seqno, unsigned int expected_cond_seqno)
{
- static int64_t nb_cfg = 0;
+ static uint64_t nb_cfg = 0;
/* Delay getting nb_cfg if there are monitor condition changes
* in flight. It might be that those changes would instruct the
@@ -826,7 +826,7 @@ store_nb_cfg(struct ovsdb_idl_txn *sb_txn, struct ovsdb_idl_txn *ovs_txn,
const struct sbrec_chassis_private *chassis,
const struct ovsrec_bridge *br_int,
unsigned int delay_nb_cfg_report,
- int64_t cur_cfg)
+ uint64_t cur_cfg)
{
if (!cur_cfg) {
return;
--
1.8.3.1