[ovs-dev] [PATCH] bridge: Populate interface status/statistics as soon as a port is added.

Andrew Evans aevans at nicira.com
Tue Jun 28 20:10:49 UTC 2011


On Tue, 2011-06-28 at 13:05 -0700, Andrew Evans wrote:
> On Tue, 2011-06-28 at 12:53 -0700, Ben Pfaff wrote:
> > On Tue, Jun 28, 2011 at 12:49:37PM -0700, Andrew Evans wrote:
> > > On Tue, 2011-06-28 at 09:05 -0700, Ben Pfaff wrote:
> > > > On Mon, Jun 27, 2011 at 06:57:31PM -0700, Andrew Evans wrote:
> > > > > Currently there's a lag of up to five seconds before the status and statistics
> > > > > columns in the Interface table are populated when a port is first added to a
> > > > > bridge. This may confuse systems that expect those columns to be populated
> > > > > right away.
> > > > > 
> > > > > Bug #5820.
> > > > 
> > > > Do you think that we could do this just in the case where we added a
> > > > new port?
> > > 
> > > Ok. I had to resort to checking the mtu column in the Interface row to
> > > reliably determine when we need to do this. The patch now looks like:
> > 
> > Isn't a test like "if (!iface->cfg->n_ofport)" adequate?
> 
> Yes, except in the case where the Interface row is deleted and re-added
> in the same transaction. I'm trying to cover that case as well.

Here's a simpler patch:

diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index d0a5764..9354403 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -195,7 +195,9 @@ static void iface_set_mac(struct iface *);
 static void iface_set_ofport(const struct ovsrec_interface *, int64_t ofport);
 static void iface_configure_qos(struct iface *, const struct ovsrec_qos *);
 static void iface_configure_cfm(struct iface *);
-static bool iface_refresh_cfm_stats(struct iface *iface);
+static bool iface_refresh_cfm_stats(struct iface *);
+static void iface_refresh_stats(struct iface *);
+static void iface_refresh_status(struct iface *);
 static bool iface_get_carrier(const struct iface *);
 static bool iface_is_synthetic(const struct iface *);
 
@@ -866,6 +868,12 @@ bridge_add_ofproto_ports(struct bridge *br)
                           iface->name, strerror(error));
             }
 
+            /* Populate stats columns in new Interface rows. */
+            if (!iface->cfg->mtu) {
+                iface_refresh_stats(iface);
+                iface_refresh_status(iface);
+            }
+
             /* Add the port, if necessary. */
             if (iface->netdev && iface->ofp_port < 0) {
                 uint16_t ofp_port;





More information about the dev mailing list