Skip to content

Commit

Permalink
lib: avoid set size check when generating diff datum from json
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
azhou-nicira committed Dec 11, 2015
1 parent 6cef8e8 commit aefd97b
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
19 changes: 19 additions & 0 deletions lib/ovsdb-data.c
Expand Up @@ -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.
*
Expand Down
5 changes: 5 additions & 0 deletions lib/ovsdb-data.h
Expand Up @@ -161,6 +161,11 @@ struct ovsdb_error *ovsdb_datum_from_json(struct ovsdb_datum *,
const struct json *,
struct ovsdb_symbol_table *)
OVS_WARN_UNUSED_RESULT;
struct ovsdb_error *ovsdb_transient_datum_from_json(
struct ovsdb_datum *,
const struct ovsdb_type *,
const struct json *)
OVS_WARN_UNUSED_RESULT;
struct json *ovsdb_datum_to_json(const struct ovsdb_datum *,
const struct ovsdb_type *);

Expand Down

0 comments on commit aefd97b

Please sign in to comment.