On Tue, Nov 10, 2015 at 9:23 AM, Ben Pfaff <b...@ovn.org> wrote: > On Wed, Oct 21, 2015 at 09:45:27PM -0700, Andy Zhou wrote: >> Add functions that can generate "update2" notification for a >> "monitor2" session. "monitor2" and "update2" are RFC 7047 extensions >> deescribed by ovsdb-server(1) manpage. See the manpage changes >> for more details. >> >> Signed-off-by: Andy Zhou <az...@nicira.com> > > Thanks for implementing this! > > I think that there is only a one-character difference between > ovsdb_monitor_compose_update() and ovsdb_monitor_compose_update2(): the > first calls ovsdb_monitor_compose_row_update(), the latter calls > ovsdb_monitor_compose_row_update2(). If so, and if they won't diverge a > lot in later patches, then I'd suggest finding a way to avoid so much > code duplication. You could, for example, use a conditional test inside > the function, or a function pointer.
Thanks for pointing this out. I was planing for a bigger change than it turns out to be. Collapse both function into a single ovsdb_monitor_compose_update() function that takes a callback function that will generate row updates. > > There's a fair amount of code duplication from > ovsdb_monitor_compose_row_update() and > ovsdb_monitor_compose_row_update2(), also. Is there a way to cleanly > reduce that? Yes, there are some logic duplications at the beginning part of both functions, refactor out common logics into a separate function in V2. Hope it looks better now. > > Manpage > ------- > Thanks for working on this. Folded those changes into V2. > I have some suggestions for the manpage. I'm appending an incremental > diff. > > Thanks, > > Ben. > > diff --git a/ovsdb/ovsdb-server.1.in b/ovsdb/ovsdb-server.1.in > index 1d68fd6..6c85729 100644 > --- a/ovsdb/ovsdb-server.1.in > +++ b/ovsdb/ovsdb-server.1.in > @@ -248,84 +248,87 @@ monitors with the same identifier. > .IP "4.1.12. Monitor2" > A new monitor method added in Open vSwitch version 2.5. Monitor2 allows > for more efficient update notifications (described below). > - > -Monitor method described in Section 4.1.5 also applies to monitor2, with > -the following exceptions. > - > +.IP > +The monitor method described in Section 4.1.5 also applies to > +monitor2, with the following exceptions. > +. > .RS > .IP \(bu > -RPC request method becomes "montior2" > +RPC request method becomes "monitor2". > .IP \(bu > Replay result follows <table-updates2>, described in Section 4.1.13. > .IP \(bu > Subsequent changes are sent to the client using the "update2" monitor > notification, described in Section 4.1.13 > .RE > - > +. > +.IP > Both monitor and monitor2 sessions can exist concurrently. However, > -monitor and monitor2 shares the smae <json-value> parameter space; it > -must be unique among all monitor and monitor2 seesion. > - > +monitor and monitor2 shares the same <json-value> parameter space; it > +must be unique among all monitor and monitor2 sessions. > +. > .IP "4.1.13. Update2 notification" > The "update2" notification is sent by the server to the client to report > changes in tables that are being monitored following a "monitor2" request > -as described above. The notifaction has the following members: > - > +as described above. The notification has the following members: > +. > .RS > .nf > "method": "update2" > "params": [<json-value>, <table-updates2>] > -"id": NULL > +"id": null > .fi > .RE > - > +. > .IP > The <json-value> in "params" is the same as the value passed as the > <json-value> in "params" for the corresponding "monitor" request. > <table-updates2> is an object that maps from a table name to a > <table-update2>. > -A <table-update2> is an object htat maps from row's UUID to a <row-update2> > object. A <row-update2> is an object with one of the following members: > - > +A <table-update2> is an object that maps from row's UUID to a <row-update2> > object. A <row-update2> is an object with one of the following members: > +. > .RS > -.nf > -"initial": <row> present for "initial' updates > -"insert": <row> present for "insert' updates > -"delete": <row> present for "delete' updates > -"modify": <row> present for "modify' updates > -.fi > +.IP "\(dqinitial\(dq: <row>" > +present for "initial" updates > +.IP "\(dqinsert\(dq: <row>" > +present for "insert" updates > +.IP "\(dqdelete\(dq: <row>" > +present for "delete" updates > +.IP "\(dqmodify\(dq: <row>" > +present for "modify" updates > .RE > - > +. > .IP > The format of <row> is described in Section 5.1. > - > +. > .IP > -<row> is always a NULL object with a "delete" object. In "initial" and > -"insert" objects, <row> omits columns whose values equal to default > +<row> is always a null object for a "delete" update. In "initial" and > +"insert" updates, <row> omits columns whose values equal the default > value of the column type. > - > +. > .IP > -In "modify" object, <row> contains only the columns that are modified. > +For a "modify" update, <row> contains only the columns that are modified. > <row> stores the difference between the old and new value for those columns, > as described below. > - > +. > .IP > For columns with single value, the difference is the value of the new > column. > - > +. > .IP > The difference between two sets are all elements that only belong > to one of the sets. > - > +. > .IP > -The difference between two maps are all key value pairs whose keys appears > -in only one of the maps. And elements with overlapping > -keys between the two maps, but are associated with different values. > -For those elements, <row> stores the key value pair from the new column. > - > +The difference between two maps are all key-value pairs whose keys > +appears in only one of the maps, plus the key-value pairs whose keys > +appear in both maps but with different values. For the latter > +elements, <row> includes the value from the new column. > +. > .IP > -Note that initial views of rows are not presented in update2 notifications, > +Initial views of rows are not presented in update2 notifications, > but in the response object to the monitor2 request. The formatting of the > <table-updates2> object, however, is the same in either case. > - > +. > .IP "5.1. Notation" > For <condition>, RFC 7047 only allows the use of \fB!=\fR, \fB==\fR, > \fBincludes\fR, and \fBexcludes\fR operators with set types. Open _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev