[ovs-dev] [PATCH monitor_cond 06/12] ovsdb: add API for changing monitor session's conditions
Liran Schour
lirans at il.ibm.com
Tue Jan 5 13:13:59 UTC 2016
That will be used to by jsonrpc-server for monitor_cond_change
method See ovsdb-server (1) man page.
Signed-off-by: Liran Schour <lirans at 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
More information about the dev
mailing list