That will be used to by jsonrpc-server for monitor_cond_change method See ovsdb-server (1) man page.
Signed-off-by: Liran Schour <lir...@il.ibm.com> --- ovsdb/monitor.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- ovsdb/monitor.h | 7 +++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c index 5e3117a..cf87b98 100644 --- a/ovsdb/monitor.c +++ b/ovsdb/monitor.c @@ -591,6 +591,50 @@ ovsdb_monitor_table_condition_add( return NULL; } +struct ovsdb_error * +ovsdb_monitor_table_condition_change( + struct ovsdb_monitor_session_condition *condition, + const struct ovsdb_table *table, + const struct json *added, + const struct json *removed) +{ + struct ovsdb_monitor_table_condition *mtc = + shash_find_data(&condition->tables, table->schema->name); + struct ovsdb_condition added_cnd = OVSDB_CONDITION_INITIALIZER; + struct ovsdb_condition removed_cnd = OVSDB_CONDITION_INITIALIZER; + struct ovsdb_error *error; + + if (added) { + error = ovsdb_condition_from_json(table->schema, added, + NULL, &added_cnd); + if (error) { + return error; + } + } + if (removed) { + error = ovsdb_condition_from_json(table->schema, removed, + NULL, &removed_cnd); + if (error) { + return error; + } + } + if (!ovsdb_conditions_includes(&mtc->new_condition, + &added_cnd, &removed_cnd)) { + return ovsdb_syntax_error( + removed, NULL, + "conditions does not include removed"); + } + + ovsdb_condition_add(&mtc->new_condition, &added_cnd); + ovsdb_condition_remove(&mtc->new_condition, &removed_cnd); + + if (!ovsdb_condition_empty(&mtc->new_condition)) { + condition->can_cache = false; + } + + return NULL; +} + /* Set session's condition in this ovsdb_monitor */ static void ovsdb_monitor_set_condition( @@ -764,7 +808,7 @@ ovsdb_monitor_compose_row_update( * for 'row' within * 'mt', or NULL if no row update should be sent. * * The caller should specify 'initial' as true if the returned JSON is - * going to be used as part of the initial reply to a "monitor2" request, + * going to be used as part of the initial reply to a "monitor_cond" request, * false if it is going to be used as part of an "update2" notification. * * 'changed' must be a scratch buffer for internal use that is at least @@ -948,6 +992,12 @@ ovsdb_monitor_get_update( ovsdb_monitor_table_untrack_changes(mt, prev_txn); ovsdb_monitor_table_track_changes(mt, next_txn); + + if (dbmon->condition && ovsdb_condition_cmp(mt->old_condition, + mt->new_condition)) { + ovsdb_condition_destroy(mt->old_condition); + ovsdb_condition_clone(mt->old_condition, mt->new_condition); + } } *unflushed = next_txn; ovsdb_monitor_unset_condition(dbmon); diff --git a/ovsdb/monitor.h b/ovsdb/monitor.h index d4063f7..0f6c360 100644 --- a/ovsdb/monitor.h +++ b/ovsdb/monitor.h @@ -106,4 +106,11 @@ void ovsdb_monitor_session_condition_bind( const struct ovsdb_monitor_session_condition *, const struct ovsdb_monitor *); +struct ovsdb_error * +ovsdb_monitor_table_condition_change( + struct ovsdb_monitor_session_condition *condition, + const struct ovsdb_table *table, + const struct json *added, + const struct json *removed); + #endif -- 2.1.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev