On 04/02/2015 11:27 AM, Ben Pfaff wrote:
> On Thu, Apr 02, 2015 at 11:24:51AM -0400, Russell Bryant wrote:
>> On 04/02/2015 11:18 AM, Ben Pfaff wrote:
>>> On Wed, Apr 01, 2015 at 08:04:21PM -0400, Russell Bryant wrote:
>>>> When the state of the chassis column in the Bindings table changes for
>>>> any row, ovn-nbd will notice and trigger recalculating the 'up' state
>>>> for all logical ports.
>>>>
>>>> This can be tesed manually by starting up ovs-sandbox with ovn support
>>>> enabled, running ovn-nbd, and then running the following commands:
>>>>
>>>>   ovn-nbctl lswitch-add sw0
>>>>   ovn-nbctl lport-add sw0-port0 sw0
>>>>   port_uuid=$(ovn-nbctl lport-list sw0 | awk '{print $1}')
>>>>   ovsdb-client transact "[\"OVN\",\
>>>>     {\"uuid-name\":\"rowd4eca046_9233_4094_bc55_e28dd49217f9\",\
>>>>     \"row\":{\"logical_port\":\"$port_uuid\",\"chassis\":\"hostname\"},\
>>>>     \"op\":\"insert\",\"table\":\"Bindings\"}]"
>>>>
>>>> ovn-nbd will then see that the 'chassis' column is set in the Bindings
>>>> row for the logical port and will mark the logical port as 'up' in the
>>>> northbound db.
>>>>
>>>> Signed-off-by: Russell Bryant <rbry...@redhat.com>
>>>
>>> "sparse" complained:
>>>     ../ovn/ovn-nbd.c:106:51: warning: expression using sizeof bool
>>>     ../ovn/ovn-nbd.c:109:51: warning: expression using sizeof bool
>>> about this code:
>>>> +        if (*bindings->chassis && (!lport->up || !*lport->up)) {
>>>> +            bool up = true;
>>>> +            nbrec_logical_port_set_up(lport, &up, sizeof up);
>>>> +        } else if (!*bindings->chassis && (!lport->up || *lport->up)) {
>>>> +            bool up = false;
>>>> +            nbrec_logical_port_set_up(lport, &up, sizeof up);
>>>
>>> While I don't think there's anything wrong with "sizeof bool", I didn't
>>> think that "sizeof" was a reasonable way to get the number of elements
>>> in 'up' (which is just 1 of course), so I changed these to literal 1s.
>>>
>>> With that change, I applied both patches to the ovn branch.  Thank you!
>>
>> Thanks for the fix!  I guess I misinterpreted the meaning of that 3rd
>> argument.
>>
>> The prototype for that function seems kind of odd, anyway.  It's just a
>> single boolean, so something like (lport, true) seems sufficient.  The
>> same applies to how "up" appears in the generated struct.  It probably
>> has something to do with convenience in how the code is auto generated
>> though, so it's not a big deal.
> 
> Yes, it's a little odd.  It's because it's really a tri-valued column:
> it can be true or false or empty.  But the interface could still be a
> little nicer.
> 

Ah, good point.  I also didn't realize it was tri-valued at first, which
made my code a little crashy when 'up' was NULL.  :-)

-- 
Russell Bryant
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to