On Fri, Apr 01, 2016 at 02:14:27PM +0200, Liran Schour wrote:
> Ben Pfaff <b...@ovn.org> wrote on 30/03/2016 07:56:01 PM:
> 
> > On Tue, Mar 22, 2016 at 11:24:14PM +0200, Liran Schour wrote:
> > > Ben Pfaff <b...@ovn.org> wrote on 22/03/2016 07:23:33 PM:
> > > 
> > > > On Fri, Mar 04, 2016 at 08:08:59AM +0000, Liran Schour wrote:
> > > > > Hold session's conditions in ovsdb_monitor_session_condition. Pass 
> it
> > > > > to ovsdb_monitor for generating "update2" notifications.
> > > > > Add functions that can generate "update2" notification for a
> > > > > "monitor_cond" session.
> > > > > JSON cache is enabled only for session's with true condition only.
> > > > > "monitor_cond" and "monitor_cond_change" are RFC 7047 extensions
> > > > > described by ovsdb-server(1) manpage.
> > > > > 
> > > > > Signed-off-by: Liran Schour <lir...@il.ibm.com>
> > > > 
> > > > I think that ovsdb_monitor_table_condition_set() has a memory leak 
> in
> > > > the error case; it does not free the 'error' returned to it.
> > > > 
> > > 
> > > Right. Will fix that.
> > > 
> > > > I'm a little confused about ovsdb_monitor_session_condition.  Why is
> > > > this a separate data structure?  That is, why is there a separate 
> shash
> > > > of conditions rather than incorporating a condition into
> > > > ovsdb_monitor_table?
> > > > 
> > > 
> > > A single ovsdb_monitor instance can be used by many jsonrpc sessions 
> (as 
> > > long as they share the same set of tables and columns). 
> > > Ovsdb_monitor_condition_session is holding the condition state per 
> each 
> > > jsonrpc session. Each session, in ovsdb_monitor, can have a different 
> set 
> > > of conditions and it is being represented by 
> > > ovsdb_monitor_session_condition with ovsdb_monitor_table_condition per 
> 
> > > table.
> > > The trivial option was to divide ovsdb_monitor into 2 different 
> instances 
> > > if we have 2 sessions with different sets of conditions. But, 
> condition is 
> > > changing during the lifetime of monitor session. And by holding 
> sessions 
> > > with different conditions under the same ovsdb_monitor we can reduce 
> the 
> > > computation needed to insert row changes to ovsdb_monitor. (insert 
> once 
> > > instead of twice)
> > 
> > Those downsides of having a monitor per (monitored columns, condition)
> > seem pretty minor.  It also seems to me like the "obvious" way to
> > implement this.  It seems like, for example, the problem of caching with
> > conditions is much easier if the data structures are organized this
> > way.  Did you actually try implementing it that way and determine that
> > there was some insuperable difficulty?
> 
> No, I did not try implementing it in the 'trivial' way. The reason is 
> twofold: first, to gain the ability to share the computed updates between 
> sessions, also as per-session conditions change; second, to gain the 
> ability to 'fall back' to using a Json cache for condition-less tables. (A 
> typical monitor session includes conditioned tables and condition-less 
> tables).
> 
> My implementation choice achieves the above and has the complexity of 
> processing a DB update in O(#conditioned columns). The 'trivial' 
> alternative would not achieve the above in the general case and would have 
> the complexity of processing a DB update in O(#jsonrpc sessions with 
> matched conditions), in the best case.
> 
> As I see it, the above stated benefits of the more complex design worth 
> the complexity increase in the code, given also that the memory complexity 
> is similar.

As I understand it, the implementation in this patch series cannot share
a cache of changes across sessions that include a condition, even if the
condition is the same.  Is that correct?
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to