diff options
author | Andy Zhou <azhou@nicira.com> | 2015-10-14 16:57:52 -0700 |
---|---|---|
committer | Andy Zhou <azhou@ovn.org> | 2015-12-11 14:22:32 -0800 |
commit | aefd97b779035f83369723b129f14c80364e5f1e (patch) | |
tree | 21d742147566f10423694512ec70ab877d4c3558 /lib/ovsdb-data.c | |
parent | 6cef8e87b3237d3233a6696844e41f5c614aae17 (diff) | |
download | openvswitch-aefd97b779035f83369723b129f14c80364e5f1e.tar.gz |
lib: avoid set size check when generating diff datum from json
Added ovsdb_transient_datum_from_json() to avoid size check for
the diff datum that is transient in nature.
Suppose a datum contains set, and the max number of elements is 2.
If we are changing from set that contains [A, B], to a set contains
[C, D], the diff datum will contains 4 elements [A, B, C, D].
Thus diff datum should not be constrained by the size limit. However
the datum after diff is applied should not violate the size limit.
Signed-off-by: Andy Zhou <azhou@nicira.com>
Acked-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'lib/ovsdb-data.c')
-rw-r--r-- | lib/ovsdb-data.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/ovsdb-data.c b/lib/ovsdb-data.c index a62e92e06..f7d0b06e7 100644 --- a/lib/ovsdb-data.c +++ b/lib/ovsdb-data.c @@ -1268,6 +1268,25 @@ ovsdb_datum_from_json(struct ovsdb_datum *datum, return error; } +/* Parses 'json' as a datum of the type described by 'type' for internal + * use. This function is similar to 'ovsdb_datum_from_json', except the + * member size of set or map is not checked. + * + * The datum generated should be used then discard. It is not suitable + * for storing into IDL because of the possible member size violation. */ +struct ovsdb_error * +ovsdb_transient_datum_from_json(struct ovsdb_datum *datum, + const struct ovsdb_type *type, + const struct json *json) +{ + struct ovsdb_type relaxed_type = *type; + + relaxed_type.n_min = 0; + relaxed_type.n_max = UINT_MAX; + + return ovsdb_datum_from_json(datum, &relaxed_type, json, NULL); +} + /* Converts 'datum', of the specified 'type', to JSON format, and returns the * JSON. The caller is responsible for freeing the returned JSON. * |