ovsdb: Force strong references to non-root tables to be persistent.
authorBen Pfaff <blp@nicira.com>
Thu, 31 Mar 2011 23:43:43 +0000 (16:43 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 31 Mar 2011 23:43:43 +0000 (16:43 -0700)
commit42a49b96013c6a149ad0bdd9799b22db59630ae7
treeb0258e5df0f041ec3e7000f5fcfbf55b102276f7
parent219c9a73dc5bdff5c1350cc1b9cc10e405fefed2
ovsdb: Force strong references to non-root tables to be persistent.

When a strong reference to a non-root table is ephemeral, the database log
can contain inconsistencies.  In particular, if the column in question is
the only reference to a row, then the row will be created in one logged
transaction but the reference to it will not be logged (because it is
ephemeral).  Thus, any later occurrence of the row later in the log (to
modify it, to delete it, or just to reference it) will yield a transaction
error and reading the database will abort at that point.

This commit fixes the problem by forcing any column with a strong reference
to a non-root table to be persistent.

The change to ovsdb_schema_from_json() looks bigger than it really is: it
just swaps the order of two operations on the schema and updates their
comments.  Similarly for the update to ovs.db.DbSchema.__init__().

Bug #5144.
Reported-by: Sujatha Sumanth <ssumanth@nicira.com>
Bug #5149.
Reported-by: Ram Jothikumar <rjothikumar@nicira.com>
ovsdb/SPECS
ovsdb/ovsdb.c
python/ovs/db/schema.py
tests/ovsdb-schema.at