On Sun, May 22, 2016 at 04:36:18PM -0500, Ryan Moats wrote:
> As a side effect, tunnel context is persisted.
> 
> Signed-off-by: Ryan Moats <rmo...@us.ibm.com>

Thanks for the new version!  I hardly have any comments this time so I
think we're really close ;-)

There appears to be a memory leak in the process_full_encaps case.  At
least, I think that this loop should free(old_hash_node):
+        HMAP_FOR_EACH_POP(old_hash_node, node, &keep_tunnel_hmap_by_uuid) {
+            ;
+        }
+        hmap_destroy(&keep_tunnel_hmap_by_uuid);
If it does not need to free the hash node, then I do not think that the
loop does anything useful, because it's OK to destroy an hmap that
still contains nodes.

Please start comments with a capital letter and end them with a period,
e.g. in these cases:
+                /* lookup the tunnel by row uuid and remove it */
+    /* track the southbound idl */

check_and_update_tunnel() tries to use ovsrec_interface_set_name() on an
existing tunnel, but the server will reject this because the 'name'
column in the Interface table is immutable.

When check_and_update_tunnel() fails to find a tunnel, should it try to
create it?  Alternatively, should it warn that it does not exist?

Thanks,

Ben.

P.S. Here are some style fixes I suggest folding in:

--8<--------------------------cut here-------------------------->8--

diff --git a/ovn/controller/encaps.c b/ovn/controller/encaps.c
index 226d0a1..7fa55ed 100644
--- a/ovn/controller/encaps.c
+++ b/ovn/controller/encaps.c
@@ -129,7 +129,7 @@ port_lookup_by_uuid(struct hmap *hmap_p, const struct uuid 
*uuid)
     HMAP_FOR_EACH_WITH_HASH (answer, uuid_node, uuid_hash(uuid),
                              hmap_p) {
         if (uuid_equals(uuid, answer->uuid)) {
-            return(answer);
+            return answer;
         }
     }
     return NULL;
@@ -142,7 +142,7 @@ port_lookup_by_port(const struct ovsrec_port *port)
     HMAP_FOR_EACH_WITH_HASH (answer, node, port_hash_rec(port),
                              &tc.tunnel_hmap) {
         if (port == answer->port) {
-            return(answer);
+            return answer;
         }
     }
     return NULL;
@@ -288,10 +288,11 @@ check_and_add_tunnel(const struct sbrec_chassis 
*chassis_rec,
 }
 
 static void
-check_and_update_tunnel(const struct sbrec_chassis *chassis_rec) {
+check_and_update_tunnel(const struct sbrec_chassis *chassis_rec)
+{
     struct port_hash_node *port_node;
-    if ((port_node =port_lookup_by_uuid(&tc.tunnel_hmap_by_uuid,
-                                        &chassis_rec->header_.uuid))) {
+    if ((port_node = port_lookup_by_uuid(&tc.tunnel_hmap_by_uuid,
+                                         &chassis_rec->header_.uuid))) {
         const struct sbrec_encap *encap = preferred_encap(chassis_rec);
         const struct ovsrec_port *port = port_node->port;
         const struct ovsrec_interface *iface = port->interfaces[0];
@@ -390,7 +391,7 @@ encaps_run(struct controller_ctx *ctx, const struct 
ovsrec_bridge *br_int,
                             &old_hash_node->uuid_node);
             }
         }
-        HMAP_FOR_EACH_POP(old_hash_node, node, &keep_tunnel_hmap_by_uuid) {
+        HMAP_FOR_EACH_POP (old_hash_node, node, &keep_tunnel_hmap_by_uuid) {
             ;
         }
         hmap_destroy(&keep_tunnel_hmap_by_uuid);
@@ -416,14 +417,10 @@ encaps_run(struct controller_ctx *ctx, const struct 
ovsrec_bridge *br_int,
                                 &port_hash->uuid_node);
                     free(port_hash);
                 }
-                continue;
-            }
-            if (!is_new) {
-                check_and_update_tunnel(chassis_rec);
-                continue;
-            } else {
+            } else if (is_new) {
                 check_and_add_tunnel(chassis_rec, chassis_id);
-                continue;
+            } else {
+                check_and_update_tunnel(chassis_rec);
             }
         }
     }
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to