Andy Zhou <az...@ovn.org> wrote on 22/01/2016 04:09:47 AM: > On Sat, Jan 16, 2016 at 12:16 AM, Liran Schour <lir...@il.ibm.com> wrote: > 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; > + } > If we do: > condition->can_cache = ovsdb_condition_empty(&mtc->new_condition); > then we don't have worry about how can_cache is initialized. Slightly better > for maintenance. I think. >
Not exactly. Can_cache is true only if all tables has an empty condition. Maybe we should hold a counter of the number of tables that has a none empty condition. Then a counter==0 means that can_cache is true. Will change the code to include that. (By that we will add the possibility that a session is being backed to a state of can_cache == true) > + > + 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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev