On Tue, Jun 17, 2025 at 2:59 PM Mark Michelson via dev <ovs-dev@openvswitch.org> wrote: > > The ctl_get_row() function attempts to match a user-provided string to a > particular database row. This works by comparing the user-provided > string to the values of columns provided by the ctl utility (e.g. > ovs-vsctl). > > Before this commit, this comparison could only be made for columns of > type OVSDB_TYPE_INTEGER and OVSDB_TYPE_STRING. If a ctl utility provided > a column of a different type, then db-ctl-base.c would assert in > get_row_by_id(). > > This commit enhances the ability of ctl_get_row() to also retrieve rows > based on columns of type OVSDB_TYPE_UUID. The user-provided string is > converted to a UUID and compared against the column's value. If it > matches, then the row matches. > > Signed-off-by: Mark Michelson <mmich...@redhat.com> > --- > Some context: The OVN southbound database has a Datapath_Binding column > that currently has two external-ids that identify a corresponding > northbound logical datapath by UUID. Being external-ids, the key and > value are both strings. > > The `ovn-sbctl lflow-list` command can take an optional argument to narrow the > output to only logical flows for a relevant datapath. The ovn-sbctl utility > uses ctl_get_row() with the user input to find the relevant datapath. A user > can pass the northbound UUID of the relevant datapath, and ctl_get_row() will > find it using one of the external-ids. > > An upcoming change in OVN is going to change how the Datapath_Binding > records refer to their corresponding northbound logical datapath UUIDs. > Instead of using external-ids, the value is going to be stored in a > column of type UUID. Therefore, in order to preserve current > functionality in OVN, OVS needs to be able to retrieve the row based on a > column of type UUID. This change helps provide that functionality. > ---
I modified the "struct ctl_table_class" variable in ovs-vsctl.c and tested it, this seems to work ok. At first I was worried that a length check would be needed in record_id_equals(), as there is one in the TYPE_STRING uuid check just above, but it doesn't actually seem to be needed. Acked-by: Mike Pattrick <m...@redhat.com> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev