[ovs-dev] [PATCH ovn 2/2] ovn-nbd: Match bindings on lport name.

Ben Pfaff blp at nicira.com
Mon Apr 6 21:39:33 UTC 2015


On Mon, Apr 06, 2015 at 11:27:06AM -0400, Russell Bryant wrote:
> When ovn-nbd is looking through bindings to figure out if any logical
> ports in the northbound DB need to have their 'up' state changed, it
> should be using the logical port's name instead of UUID for matching
> up to rows in the OVN db.
> 
> The switch to using the name instead of UUID means we don't have a
> quick lookup so we use the same approach that's used for handling
> updates in the other direction.  We start by hashing all of the
> logical ports by name.  As we iterate through the bindings, we can
> then look up ports by name quickly.
> 
> Signed-off-by: Russell Bryant <rbryant at redhat.com>

The following is risky because HMAP_FOR_EACH_WITH_HASH doesn't
necessarily leave its first argument ('hash_node' in this case) NULL
when the loop finishes.  Instead, it will be, in this case,
&hash_node->node.  Since 'node' is the first member in
lport_hash_node, that works out OK here, but reordering members will
cause it to blow up, so I try to avoid this kind of construction.

       HMAP_FOR_EACH_WITH_HASH(hash_node, node,
               hash_string(binding->logical_port, 0), &lports_hmap) {
           if (!strcmp(binding->logical_port, hash_node->lport->name)) {
               break;
           }
       }

       if (!hash_node) {
           /* The logical port doesn't exist for this binding.  This can happen
            * under normal circumstances when ovn-nbd hasn't gotten around to
            * pruning the Binding yet. */
           continue;
       }

This has caught people out before, so now I've sent out a patch that
should make it more obvious:
        http://openvswitch.org/pipermail/dev/2015-April/053401.html



More information about the dev mailing list