mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
lib: add diff and apply diff APIs for ovsdb_datum
When an OVSDB column change its value, it is more efficient to only send what has changed, rather than sending the entire new copy. This is analogous to software programmer send patches rather than the entire source file. For columns store a single element, the "diff" datum is the same as the "new" datum. For columns that store set or map, it is only necessary to send the information about the elements changed (including addition or removal). The "diff" for those types are all elements that are changed. Those APIs are mainly used for implementing a new OVSDB server "update2" JSON-RPC notification, which encodes modifications of a column with the contents of those "diff"s. Later patch implements the "update2" notification. Signed-off-by: Andy Zhou <azhou@nicira.com> Acked-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
|
||||
/* Copyright (c) 2009, 2010, 2011, 2012, 2015 Nicira, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -216,6 +216,18 @@ void ovsdb_datum_subtract(struct ovsdb_datum *a,
|
||||
const struct ovsdb_datum *b,
|
||||
const struct ovsdb_type *b_type);
|
||||
|
||||
/* Generate and apply diffs */
|
||||
void ovsdb_datum_diff(struct ovsdb_datum *diff,
|
||||
const struct ovsdb_datum *old,
|
||||
const struct ovsdb_datum *new,
|
||||
const struct ovsdb_type *type);
|
||||
|
||||
struct ovsdb_error *ovsdb_datum_apply_diff(struct ovsdb_datum *new,
|
||||
const struct ovsdb_datum *old,
|
||||
const struct ovsdb_datum *diff,
|
||||
const struct ovsdb_type *type)
|
||||
OVS_WARN_UNUSED_RESULT;
|
||||
|
||||
/* Raw operations that may not maintain the invariants. */
|
||||
void ovsdb_datum_remove_unsafe(struct ovsdb_datum *, size_t idx,
|
||||
const struct ovsdb_type *);
|
||||
|
Reference in New Issue
Block a user