ovsdb_datum_apply_diff_in_place() is much faster than the usual ovsdb_datum_apply_diff() in most cases, because it doesn't clone or compare unnecessary data. Since the original destination datum is destroyed anyway, we might use the faster function here to speed up transaction processing.
ovsdb_row_update_columns() with xor is mainly used by relay databases. So, this change should improve their performance. Signed-off-by: Ilya Maximets <[email protected]> --- ovsdb/row.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/ovsdb/row.c b/ovsdb/row.c index e83c60a21..40f53b0a5 100644 --- a/ovsdb/row.c +++ b/ovsdb/row.c @@ -244,24 +244,18 @@ ovsdb_row_update_columns(struct ovsdb_row *dst, for (i = 0; i < columns->n_columns; i++) { const struct ovsdb_column *column = columns->columns[i]; - struct ovsdb_datum xor_datum; struct ovsdb_error *error; if (xor) { - error = ovsdb_datum_apply_diff(&xor_datum, - &dst->fields[column->index], - &src->fields[column->index], - &column->type); + error = ovsdb_datum_apply_diff_in_place( + &dst->fields[column->index], + &src->fields[column->index], + &column->type); if (error) { return error; } - } - - ovsdb_datum_destroy(&dst->fields[column->index], &column->type); - - if (xor) { - ovsdb_datum_swap(&dst->fields[column->index], &xor_datum); } else { + ovsdb_datum_destroy(&dst->fields[column->index], &column->type); ovsdb_datum_clone(&dst->fields[column->index], &src->fields[column->index], &column->type); -- 2.31.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
