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

Reply via email to