mbox series

[ovs-dev,0/5] ovsdb: transaction: Bug Fixes + Reuse of column diffs.

Message ID 20231218020249.3447973-1-i.maximets@ovn.org
Headers show
Series ovsdb: transaction: Bug Fixes + Reuse of column diffs. | expand

Message

Ilya Maximets Dec. 18, 2023, 2:02 a.m. UTC
This patch set contains a few bug fixes for transaction processing and
an optimization.

The first patch is just a bug fix.  The 2nd and 3rd are also bug fixes,
but they only affect performance, not correctness.

The last two patches intruduce a new functionality to reuse the column
diffs stored in the file during transaction replay.

All in all this patch set gives about 4x performance improvement for
transaction processing after reading from the storage, i.e.
significantly speeds up initial database file read after restart
and improves performance of transactions in clustered databases
(storage_read from raft module).

For example, with this change applied, initial read of OVSDB file
containing 136K transactions for large OVN port groups and address
sets on my laptop takes 11 seconds vs 43 seconds without.

Ilya Maximets (5):
  ovsdb: Fix incorrect sharing of UUID and _version columns.
  ovsdb: transaction: Avoid diffs for different type references.
  ovsdb: transaction: Don't try to diff unchanged columns.
  ovsdb: Preserve column diffs read from the storage.
  ovsdb: transaction: Calculate added/removed from diff.

 lib/ovsdb-data.c     |  26 +++++++++++
 lib/ovsdb-data.h     |   1 +
 lib/ovsdb-types.h    |  12 +++++
 ovsdb/execution.c    |  14 ++++--
 ovsdb/file.c         |  22 ++++++---
 ovsdb/ovsdb-server.c |   7 ++-
 ovsdb/row.h          |   2 +
 ovsdb/table.c        |   6 ++-
 ovsdb/transaction.c  | 104 ++++++++++++++++++++++++++++++++-----------
 ovsdb/transaction.h  |   6 ++-
 tests/test-ovsdb.c   |   2 +-
 11 files changed, 159 insertions(+), 43 deletions(-)