Thanks Darrell, this looks good to me, but I'm not familiar with every aspect of ovs-vtep.
I'm mostly interested in this patch because it fixes an intermittent failure of the testcase "ovn-controller-vtep - vtep-macs 1". Russell (since you commented on v1), does this look good to you? Thanks, Daniele 2016-07-14 14:59 GMT-07:00 Darrell Ball <dlu...@gmail.com>: > Presently, ovs-vtep expects the datapath tunnel key to be available > in the VTEP DB at startup. This may not be the case which is also > observed as interrmittent unit test failures. This patch allows > for the tunnel key to later appear in the VTEP database. > > Signed-off-by: Darrell Ball <dlu...@gmail.com> > --- > > v1->v2: Cleanup the existing code with broken error handling. > > vtep/ovs-vtep | 28 ++++++++++++++-------------- > 1 file changed, 14 insertions(+), 14 deletions(-) > > diff --git a/vtep/ovs-vtep b/vtep/ovs-vtep > index e52c66f..b32a82a 100644 > --- a/vtep/ovs-vtep > +++ b/vtep/ovs-vtep > @@ -91,7 +91,6 @@ class Logical_Switch(object): > self.local_macs = set() > self.remote_macs = {} > self.unknown_dsts = set() > - self.tunnel_key = 0 > self.setup_ls() > self.replication_mode = "service_node" > > @@ -99,16 +98,6 @@ class Logical_Switch(object): > vlog.info("destroying lswitch %s" % self.name) > > def setup_ls(self): > - column = vtep_ctl("--columns=tunnel_key find logical_switch " > - "name=%s" % self.name) > - tunnel_key = column.partition(":")[2].strip() > - if tunnel_key and isinstance(eval(tunnel_key), six.integer_types): > - self.tunnel_key = tunnel_key > - vlog.info("using tunnel key %s in %s" > - % (self.tunnel_key, self.name)) > - else: > - self.tunnel_key = 0 > - vlog.warn("invalid tunnel key for %s, using 0" % self.name) > > if ps_type: > ovs_vsctl("--may-exist add-br %s -- set Bridge %s > datapath_type=%s" > @@ -175,7 +164,7 @@ class Logical_Switch(object): > del self.ports[lbinding] > self.update_flood() > > - def add_tunnel(self, tunnel): > + def add_tunnel(self, tunnel, tunnel_key): > global tun_id > vlog.info("adding tunnel %s" % tunnel) > encap, ip = tunnel.split("/") > @@ -189,7 +178,7 @@ class Logical_Switch(object): > > ovs_vsctl("add-port %s %s -- set Interface %s type=vxlan " > "options:key=%s options:remote_ip=%s" > - % (self.short_name, tun_name, tun_name, > self.tunnel_key, ip)) > + % (self.short_name, tun_name, tun_name, tunnel_key, ip)) > > for i in range(10): > port_no = ovs_vsctl("get Interface %s ofport" % tun_name) > @@ -259,6 +248,17 @@ class Logical_Switch(object): > tunnels = set() > parse_ucast = True > > + column = vtep_ctl("--columns=tunnel_key find logical_switch " > + "name=%s" % self.name) > + tunnel_key = column.partition(":")[2].strip() > + if tunnel_key and isinstance(eval(tunnel_key), six.integer_types): > + vlog.info("update_remote_macs: using tunnel key %s in %s" > + % (tunnel_key, self.name)) > + else: > + vlog.info("Invalid tunnel key %s in %s post VTEP DB requery" > + % (tunnel_key, self.name)) > + return > + > mac_list = vtep_ctl("list-remote-macs %s" % self.name > ).splitlines() > for line in mac_list: > if (line.find("mcast-mac-remote") != -1): > @@ -282,7 +282,7 @@ class Logical_Switch(object): > old_tunnels = set(self.tunnels.keys()) > > for tunnel in tunnels.difference(old_tunnels): > - self.add_tunnel(tunnel) > + self.add_tunnel(tunnel, tunnel_key) > > for tunnel in old_tunnels.difference(tunnels): > self.del_tunnel(tunnel) > -- > 1.9.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev