On 1/7/22 21:41, Mike Pattrick wrote:
>> diff --git a/ovsdb/relay.c b/ovsdb/relay.c
>> index ef0e44d34..2df393403 100644
>> --- a/ovsdb/relay.c
>> +++ b/ovsdb/relay.c
>> @@ -222,7 +222,8 @@ ovsdb_relay_process_row_update(struct ovsdb_table *table,
>>
>> static struct ovsdb_error *
>> ovsdb_relay_parse_update__(struct ovsdb *db,
>> - const struct ovsdb_cs_db_update *du)
>> + const struct ovsdb_cs_db_update *du,
>> + const struct uuid *last_id)
>> {
>> struct ovsdb_error *error = NULL;
>> struct ovsdb_txn *txn;
>> @@ -254,8 +255,17 @@ exit:
>> ovsdb_txn_abort(txn);
>> return error;
>> } else {
>> - /* Commit transaction. */
>> - error = ovsdb_txn_propose_commit_block(txn, false);
>> + if (uuid_is_zero(last_id)) {
>> + /* The relay source doesn't support unique transaction ids,
>> + * disabling transaction history for relay. */
>> + ovsdb_txn_history_destroy(db);
>> + ovsdb_txn_history_init(db, false);
>
> Nit: In the case that the relay doesn't support unique transaction ids
> wouldn't this cause us to have to call destroy/init on every update,
> even if it were already turned off?
Yes, it will. But that should not be a big problem here, because
ovsdb_txn_history_destroy() is just one check in that case, and
init should not be heavy either. It's only ~5 memory writes and
that should be negligible in compare with the actual processing of
the received database update.
We could add a separate API call like this:
bool
ovsdb_need_txn_history(struct ovsdb *db)
{
return db->need_txn_history;
}
and check, but it's kind of seems unnecessary for this use case.
(I would like to not use db->need_txn_history directly here, even
though we technically have access to it.)
What do you think?
Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev