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

Reply via email to