summaryrefslogtreecommitdiff
path: root/ovsdb
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2021-12-19 15:09:40 +0100
committerIlya Maximets <i.maximets@ovn.org>2022-03-03 15:25:55 +0100
commit015994d37fa441844f9c0890109074b06e64e7d0 (patch)
tree3d26a19b1ff3ee6853bb226af61bbd12be2334c2 /ovsdb
parenta3e97b1af1bdcaa802c6caa9e73087df7077d2b1 (diff)
downloadopenvswitch-015994d37fa441844f9c0890109074b06e64e7d0.tar.gz
ovsdb: row: Optimize row updates by applying diffs in-place.
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. Acked-by: Mike Pattrick <mkp@redhat.com> Acked-by: Han Zhou <hzhou@ovn.org> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'ovsdb')
-rw-r--r--ovsdb/row.c16
1 files 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);