ovsdb: Provide a way for for_each_txn_row() callback to delete any row.
authorBen Pfaff <blp@nicira.com>
Tue, 1 Mar 2011 21:31:08 +0000 (13:31 -0800)
committerBen Pfaff <blp@nicira.com>
Thu, 10 Mar 2011 19:24:00 +0000 (11:24 -0800)
commita8c37dc5a2e5f1abc914299ffb841109f2145c35
tree52316875b4fabbca7e4c48b99ea3ce91571a1a6a
parent0dc66db95bdceeaac2e32b581d2494fd773b17ae
ovsdb: Provide a way for for_each_txn_row() callback to delete any row.

for_each_txn_row() restricts the txn_rows that its callback may delete.
Until now, this has meant that its callback could not delete any rows
that were created within the transaction being processed.  These rows have
txn_rows with null 'old' and nonnull 'new', so to delete them requires
either removing the txn_row entirely (forbidden by for_each_txn_row()) or
clearing its 'new' to null.  The latter is forbidden because a txn_row
is not allowed to have both 'old' and 'new' null.

Until now, this has not been a significant restriction, because none of
the processing at transaction commit time required deleting arbitrary rows.
Implementing garbage collection, however, does require this ability, so
this commit makes it possible by eliminating the requirement that at least
'old' or 'new' be nonnull.
ovsdb/transaction.c