Message ID | 20151110173034.GF31271@ovn.org |
---|---|
State | Not Applicable |
Headers | show |
On Tue, Nov 10, 2015 at 9:30 AM, Ben Pfaff <blp@ovn.org> wrote: > On Wed, Oct 21, 2015 at 09:45:28PM -0700, Andy Zhou wrote: >> ovsdb-server now accepts the new "monitor2" request. The next >> patch will switch IDL to use monitor2 by default. >> >> Signed-off-by: Andy Zhou <azhou@nicira.com> > > I think that the NEWS item can be clearer and that the jsonrpc-code can > be a little cleaner: > > diff --git a/NEWS b/NEWS > index 3bac6e3..8b28ad9 100644 > --- a/NEWS > +++ b/NEWS > @@ -28,7 +28,8 @@ Post-v2.4.0 > - Add support for connection tracking through the new "ct" action > and "ct_state"/"ct_zone"/"ct_mark"/"ct_label" match fields. Only > available on Linux kernels with the connection tracking module loaded. > - - Add "monitor2" and "update2", which are RFC 7047 extions. > + - ovsdb-server: > + * New "monitor2" and "update2" extensions to RFC 7047. Thanks, folded into V2. > > > v2.4.0 - 20 Aug 2015 > diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c > index 53c97cd..0ea42b6 100644 > --- a/ovsdb/jsonrpc-server.c > +++ b/ovsdb/jsonrpc-server.c > @@ -833,6 +833,20 @@ execute_transaction(struct ovsdb_jsonrpc_session *s, struct ovsdb *db, > return NULL; > } > > +static struct jsonrpc_msg * > +ovsdb_jsonrpc_session_handle_monitor(struct ovsdb_jsonrpc_session *s, > + struct jsonrpc_msg *request, > + enum ovsdb_monitor_version version) > +{ > + struct jsonrpc_msg *reply; > + struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply); > + if (!reply) { > + reply = ovsdb_jsonrpc_monitor_create(s, db, request->params, > + version, request->id); > + } > + return reply; > +} > + > static void > ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s, > struct jsonrpc_msg *request) > @@ -844,16 +858,12 @@ ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s, > if (!reply) { > reply = execute_transaction(s, db, request); > } > - } else if (!strcmp(request->method, "monitor") || > - !strcmp(request->method, "monitor2")) { > - struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply); > - if (!reply) { > - int l = strlen(request->method) - strlen("monitor"); > - enum ovsdb_monitor_version version = l ? OVSDB_MONITOR_V2 > - : OVSDB_MONITOR_V1; > - reply = ovsdb_jsonrpc_monitor_create(s, db, request->params, > - version, request->id); > - } > + } else if (!strcmp(request->method, "monitor")) { > + reply = ovsdb_jsonrpc_session_handle_monitor(s, request, > + OVSDB_MONITOR_V1); > + } else if (!strcmp(request->method, "monitor2")) { > + reply = ovsdb_jsonrpc_session_handle_monitor(s, request, > + OVSDB_MONITOR_V2); > } else if (!strcmp(request->method, "monitor_cancel")) { > reply = ovsdb_jsonrpc_monitor_cancel(s, json_array(request->params), > request->id); > @@ -1332,20 +1342,7 @@ static struct jsonrpc_msg * > ovsdb_jsonrpc_create_notify(const struct ovsdb_jsonrpc_monitor *m, > struct json *params) > { > - const char *method; > - > - switch(m->version) { > - case OVSDB_MONITOR_V1: > - method = "update"; > - break; > - case OVSDB_MONITOR_V2: > - method = "update2"; > - break; > - case OVSDB_MONITOR_VERSION_MAX: > - default: > - OVS_NOT_REACHED(); > - } > - > + const char *method = m->version == OVSDB_MONITOR_V1 ? "update" : "update2"; > return jsonrpc_create_notify(method, params); > } > > > > Acked-by: Ben Pfaff <blp@ovn.org>
diff --git a/NEWS b/NEWS index 3bac6e3..8b28ad9 100644 --- a/NEWS +++ b/NEWS @@ -28,7 +28,8 @@ Post-v2.4.0 - Add support for connection tracking through the new "ct" action and "ct_state"/"ct_zone"/"ct_mark"/"ct_label" match fields. Only available on Linux kernels with the connection tracking module loaded. - - Add "monitor2" and "update2", which are RFC 7047 extions. + - ovsdb-server: + * New "monitor2" and "update2" extensions to RFC 7047. v2.4.0 - 20 Aug 2015 diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 53c97cd..0ea42b6 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -833,6 +833,20 @@ execute_transaction(struct ovsdb_jsonrpc_session *s, struct ovsdb *db, return NULL; } +static struct jsonrpc_msg * +ovsdb_jsonrpc_session_handle_monitor(struct ovsdb_jsonrpc_session *s, + struct jsonrpc_msg *request, + enum ovsdb_monitor_version version) +{ + struct jsonrpc_msg *reply; + struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply); + if (!reply) { + reply = ovsdb_jsonrpc_monitor_create(s, db, request->params, + version, request->id); + } + return reply; +} + static void ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s, struct jsonrpc_msg *request) @@ -844,16 +858,12 @@ ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s, if (!reply) { reply = execute_transaction(s, db, request); } - } else if (!strcmp(request->method, "monitor") || - !strcmp(request->method, "monitor2")) { - struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply); - if (!reply) { - int l = strlen(request->method) - strlen("monitor"); - enum ovsdb_monitor_version version = l ? OVSDB_MONITOR_V2 - : OVSDB_MONITOR_V1; - reply = ovsdb_jsonrpc_monitor_create(s, db, request->params, - version, request->id); - } + } else if (!strcmp(request->method, "monitor")) { + reply = ovsdb_jsonrpc_session_handle_monitor(s, request, + OVSDB_MONITOR_V1); + } else if (!strcmp(request->method, "monitor2")) { + reply = ovsdb_jsonrpc_session_handle_monitor(s, request, + OVSDB_MONITOR_V2); } else if (!strcmp(request->method, "monitor_cancel")) { reply = ovsdb_jsonrpc_monitor_cancel(s, json_array(request->params), request->id); @@ -1332,20 +1342,7 @@ static struct jsonrpc_msg * ovsdb_jsonrpc_create_notify(const struct ovsdb_jsonrpc_monitor *m, struct json *params) { - const char *method; - - switch(m->version) { - case OVSDB_MONITOR_V1: - method = "update"; - break; - case OVSDB_MONITOR_V2: - method = "update2"; - break; - case OVSDB_MONITOR_VERSION_MAX: - default: - OVS_NOT_REACHED(); - } - + const char *method = m->version == OVSDB_MONITOR_V1 ? "update" : "update2"; return jsonrpc_create_notify(method, params); }