-
Story
-
Resolution: Unresolved
-
Major
-
None
While executing transaction, OVSDB needs to find a row where changes
need to be applied. Currently, if condition is not a match on a
row UUID, linear lookup through the table will be performed. See the
implementation of 'ovsdb_query()' function.
However, ovsdb-server maintains hash tables for client-side indexes
specified in the database schema, and these can be used instead of a
linear lookup, if condition contains exact match on one of the indexed
columns.
Though conventional database utilities based on C and Python IDL are
using UUIDs in most cases in transaction, some other clients may perform
transactions with arbitrary conditions. So, it would be nice to have
this use case better optimized.
Example of operation that triggers an indexed lookup:
"where":[["_uuid","==",["uuid","<UUID of the logical switch row>"]]],
"mutations":[["ports","insert",["set",[["named-uuid","rowUUID"]]]]],
"op":"mutate","table":"Logical_Switch"
And operation that triggers a linear lookup even if the 'name' will be a
client-side index according to a database schema ("indexes": [["name"]]):
"where":[["name","==","<host-name>"]],
"mutations":[["ports","insert",["set",[["named-uuid","rowUUID"]]]]],
"op":"mutate","table":"Logical_Switch"
- external trackers