On Fri, Mar 18, 2016 at 5:15 PM, Ben Pfaff <[email protected]> wrote:
> On Thu, Mar 03, 2016 at 12:13:20AM -0800, Andy Zhou wrote:
> > Currently ovsdb_jsonrpc_session are grouped together in a linked
> > list within 'ovsdb_jsonrpc_remote'. This makes sense since most
> > session operations applies to sessions within a remote.
> >
> > However, in order to scale up ovsdb-server with multi-threading, it is
> > more convenient to distribute a sessions to any thread available,
> > regardless which remote it is associated with.
> >
> > This patch introduces a set of APIs that provide operations on
> > a list of sessions. Instead of group sessions by remote, they
> > are linked together in a new ovs_list field 'all_sessions' in the
> > ovsdb_jsonrpc_server struct.
> >
> > With multi-threading, the design is that all sessions managed
> > by a thread will have them linked together on a thread private
> > linked list. At that time, the 'all_sessions' field in
> > ovsdb_jsonrpc_server struct will have all session managed
> > the main process.
> >
> > Signed-off-by: Andy Zhou <[email protected]>
>
> Thank you!
>
> Acked-by: Ben Pfaff <[email protected]>
>
Thanks for the review.
>
> I suggest folding in the following incremental.
>
I will fold in the changes, minus the removal of 'n_seesions' field in
'ovsdb_jsonrpc_server'. It is used
in laster patches. Thanks!
>
> --8<--------------------------cut here-------------------------->8--
>
> diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
> index 4d83157..ec60f33 100644
> --- a/ovsdb/jsonrpc-server.c
> +++ b/ovsdb/jsonrpc-server.c
> @@ -111,18 +111,10 @@ static struct json
> *ovsdb_jsonrpc_monitor_compose_update(
>
> struct ovsdb_jsonrpc_server {
> struct ovsdb_server up;
> - unsigned int n_sessions;
> struct shash remotes; /* Contains "struct ovsdb_jsonrpc_remote
> *"s. */
> struct ovs_list all_sessions; /* All 'ovsdb_jsonrpc_session's. */
> };
>
> -/* Cast an 'ovsdb_server' pointer down into an ovsdb_jsonrpc_server
> pinter.
> - * Caller needs to make sure this conversion is valid. */
> -static struct ovsdb_jsonrpc_server *
> -ovsdb_jsonrpc_server_cast(struct ovsdb_server *s) {
> - return CONTAINER_OF(s, struct ovsdb_jsonrpc_server, up);
> -}
> -
> /* A configured remote. This is either a passive stream listener plus a
> list
> * of the currently connected sessions, or a list of exactly one active
> * session. */
> @@ -399,7 +391,7 @@ void
> ovsdb_jsonrpc_server_get_memory_usage(const struct ovsdb_jsonrpc_server
> *svr,
> struct simap *usage)
> {
> - simap_increase(usage, "sessions", svr->n_sessions);
> + simap_increase(usage, "sessions", list_size(&svr->all_sessions));
> ovsdb_jsonrpc_session_get_memory_usage_all(svr, usage);
> }
>
> @@ -447,16 +439,12 @@ ovsdb_jsonrpc_session_create(struct
> ovsdb_jsonrpc_remote *remote,
> s->js = js;
> s->js_seqno = jsonrpc_session_get_seqno(js);
>
> - server->n_sessions++;
> -
> return s;
> }
>
> static void
> ovsdb_jsonrpc_session_close(struct ovsdb_jsonrpc_session *s)
> {
> - struct ovsdb_jsonrpc_server *server;
> -
> ovsdb_jsonrpc_monitor_remove_all(s);
> ovsdb_jsonrpc_session_unlock_all(s);
> ovsdb_jsonrpc_trigger_complete_all(s);
> @@ -466,8 +454,6 @@ ovsdb_jsonrpc_session_close(struct
> ovsdb_jsonrpc_session *s)
>
> jsonrpc_session_close(s->js);
> list_remove(&s->node);
> - server = ovsdb_jsonrpc_server_cast(s->up.server);
> - server->n_sessions--;
> ovsdb_session_destroy(&s->up);
> free(s);
> }
> @@ -1356,7 +1342,7 @@ ovsdb_jsonrpc_sessions_run(struct ovs_list *sessions)
> struct ovsdb_jsonrpc_session *s, *next;
>
> LIST_FOR_EACH_SAFE (s, next, node, sessions) {
> - int error = ovsdb_jsonrpc_session_run(s);
> + int error = ovsdb_jsonrpc_session_run(s);
> if (error) {
> ovsdb_jsonrpc_session_close(s);
> }
> @@ -1386,7 +1372,7 @@ ovsdb_jsonrpc_sessions_close(struct ovs_list
> *sessions,
> }
> }
>
> -/* Forces all of the JSON-RPC sessions to disconnect and
> +/* Forces all of the JSON-RPC sessions for the given 'remote' to
> disconnect and
> * reconnect. */
> static void
> ovsdb_jsonrpc_sessions_reconnect(struct ovs_list *sessions,
> @@ -1422,7 +1408,7 @@ ovsdb_jsonrpc_sessions_count(const struct ovs_list
> *sessions,
> /* Sets the options for all of the JSON-RPC sessions managed by 'remote'
> to
> * 'options'.
> *
> - * (The dscp value can't be changed directly; the caller must instead
> close and
> + * (The DSCP value can't be changed directly; the caller must instead
> close and
> * re-open the session.) */
> static void
> ovsdb_jsonrpc_sessions_set_options(struct ovs_list *sessions,
>
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev