On Fri, Mar 18, 2016 at 5:15 PM, Ben Pfaff <b...@ovn.org> 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 <az...@ovn.org> > > Thank you! > > Acked-by: Ben Pfaff <b...@ovn.org> >
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 dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev