On Fri, Jan 22, 2016 at 1:41 AM, Liran Schour <lir...@il.ibm.com> wrote:

> 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.

You are right.


> 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.

Non empty and non single term clauses?


> 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)
>

A bug fix as well. Thanks.

>
> > +
> > +    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
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to