diff mbox

[ovs-dev] ovsdb-server: Eliminating max session limit

Message ID 1455143625-107098-1-git-send-email-azhou@ovn.org
State Accepted
Headers show

Commit Message

Andy Zhou Feb. 10, 2016, 10:33 p.m. UTC
This patch removes limits on number of concurrent sessions
allowed by ovsdb-server. Historically, it was not an design
goal for OVSDB server to support very high number of sessions.
The imposed limit reflects those design choices.

Work is now underway to improve OVSDB scalability since supporting
large of number of sessions is important for OVN, Removing
this limit makes scalability testing possible.

Signed-off-by: Andy Zhou <azhou@ovn.org>
---
 NEWS                   |  3 +++
 ovsdb/jsonrpc-server.c | 35 ++++++++++++++---------------------
 2 files changed, 17 insertions(+), 21 deletions(-)

Comments

Han Zhou Feb. 10, 2016, 11:15 p.m. UTC | #1
On Wed, Feb 10, 2016 at 2:33 PM, Andy Zhou <azhou@ovn.org> wrote:
>
> This patch removes limits on number of concurrent sessions
> allowed by ovsdb-server. Historically, it was not an design
> goal for OVSDB server to support very high number of sessions.
> The imposed limit reflects those design choices.
>
> Work is now underway to improve OVSDB scalability since supporting
> large of number of sessions is important for OVN, Removing
> this limit makes scalability testing possible.
>
> Signed-off-by: Andy Zhou <azhou@ovn.org>
> ---
>  NEWS                   |  3 +++
>  ovsdb/jsonrpc-server.c | 35 ++++++++++++++---------------------
>  2 files changed, 17 insertions(+), 21 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 8c9f310..18fca10 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -14,6 +14,9 @@ Post-v2.5.0
>       bitrot.
>     - ovs-appctl:
>       * New "vlog/close" command.
> +   - ovsdb-server:
> +     * Remove max number of sessions limit, to enable connection scaling
> +       testing.
>
>
>  v2.5.0 - xx xxx xxxx
> diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
> index ee2026e..0d23b77 100644
> --- a/ovsdb/jsonrpc-server.c
> +++ b/ovsdb/jsonrpc-server.c
> @@ -101,7 +101,7 @@ static struct json
*ovsdb_jsonrpc_monitor_compose_update(
>
>  struct ovsdb_jsonrpc_server {
>      struct ovsdb_server up;
> -    unsigned int n_sessions, max_sessions;
> +    unsigned int n_sessions;
>      struct shash remotes;      /* Contains "struct ovsdb_jsonrpc_remote
*"s. */
>  };
>
> @@ -130,7 +130,6 @@ ovsdb_jsonrpc_server_create(void)
>  {
>      struct ovsdb_jsonrpc_server *server = xzalloc(sizeof *server);
>      ovsdb_server_init(&server->up);
> -    server->max_sessions = 330;   /* Random limit. */
>      shash_init(&server->remotes);
>      return server;
>  }
> @@ -324,25 +323,19 @@ ovsdb_jsonrpc_server_run(struct
ovsdb_jsonrpc_server *svr)
>          struct ovsdb_jsonrpc_remote *remote = node->data;
>
>          if (remote->listener) {
> -            if (svr->n_sessions < svr->max_sessions) {
> -                struct stream *stream;
> -                int error;
> -
> -                error = pstream_accept(remote->listener, &stream);
> -                if (!error) {
> -                    struct jsonrpc_session *js;
> -                    js =
jsonrpc_session_open_unreliably(jsonrpc_open(stream),
> -                                                         remote->dscp);
> -                    ovsdb_jsonrpc_session_create(remote, js);
> -                } else if (error != EAGAIN) {
> -                    VLOG_WARN_RL(&rl, "%s: accept failed: %s",
> -                                 pstream_get_name(remote->listener),
> -                                 ovs_strerror(error));
> -                }
> -            } else {
> -                VLOG_WARN_RL(&rl, "%s: connection exceeded maximum (%d)",
> +            struct stream *stream;
> +            int error;
> +
> +            error = pstream_accept(remote->listener, &stream);
> +            if (!error) {
> +                struct jsonrpc_session *js;
> +                js =
jsonrpc_session_open_unreliably(jsonrpc_open(stream),
> +                                                     remote->dscp);
> +                ovsdb_jsonrpc_session_create(remote, js);
> +            } else if (error != EAGAIN) {
> +                VLOG_WARN_RL(&rl, "%s: accept failed: %s",
>                               pstream_get_name(remote->listener),
> -                             svr->max_sessions);
> +                             ovs_strerror(error));
>              }
>          }
>
> @@ -358,7 +351,7 @@ ovsdb_jsonrpc_server_wait(struct ovsdb_jsonrpc_server
*svr)
>      SHASH_FOR_EACH (node, &svr->remotes) {
>          struct ovsdb_jsonrpc_remote *remote = node->data;
>
> -        if (remote->listener && svr->n_sessions < svr->max_sessions) {
> +        if (remote->listener) {
>              pstream_wait(remote->listener);
>          }
>
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev


Acked-by: Han Zhou <zhouhan@gmail.com>

--
Best regards,
Han
Ben Pfaff Feb. 10, 2016, 11:34 p.m. UTC | #2
On Wed, Feb 10, 2016 at 02:33:45PM -0800, Andy Zhou wrote:
> This patch removes limits on number of concurrent sessions
> allowed by ovsdb-server. Historically, it was not an design
> goal for OVSDB server to support very high number of sessions.
> The imposed limit reflects those design choices.
> 
> Work is now underway to improve OVSDB scalability since supporting
> large of number of sessions is important for OVN, Removing
> this limit makes scalability testing possible.
> 
> Signed-off-by: Andy Zhou <azhou@ovn.org>

Acked-by: Ben Pfaff <blp@ovn.org>
Andy Zhou Feb. 11, 2016, 1:34 a.m. UTC | #3
On Wed, Feb 10, 2016 at 3:34 PM, Ben Pfaff <blp@ovn.org> wrote:

> On Wed, Feb 10, 2016 at 02:33:45PM -0800, Andy Zhou wrote:
> > This patch removes limits on number of concurrent sessions
> > allowed by ovsdb-server. Historically, it was not an design
> > goal for OVSDB server to support very high number of sessions.
> > The imposed limit reflects those design choices.
> >
> > Work is now underway to improve OVSDB scalability since supporting
> > large of number of sessions is important for OVN, Removing
> > this limit makes scalability testing possible.
> >
> > Signed-off-by: Andy Zhou <azhou@ovn.org>
>
> Acked-by: Ben Pfaff <blp@ovn.org>
>

thanks Ben and Han for reviewing this. Pushed to master.
diff mbox

Patch

diff --git a/NEWS b/NEWS
index 8c9f310..18fca10 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,9 @@  Post-v2.5.0
      bitrot.
    - ovs-appctl:
      * New "vlog/close" command.
+   - ovsdb-server:
+     * Remove max number of sessions limit, to enable connection scaling
+       testing.
 
 
 v2.5.0 - xx xxx xxxx
diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
index ee2026e..0d23b77 100644
--- a/ovsdb/jsonrpc-server.c
+++ b/ovsdb/jsonrpc-server.c
@@ -101,7 +101,7 @@  static struct json *ovsdb_jsonrpc_monitor_compose_update(
 
 struct ovsdb_jsonrpc_server {
     struct ovsdb_server up;
-    unsigned int n_sessions, max_sessions;
+    unsigned int n_sessions;
     struct shash remotes;      /* Contains "struct ovsdb_jsonrpc_remote *"s. */
 };
 
@@ -130,7 +130,6 @@  ovsdb_jsonrpc_server_create(void)
 {
     struct ovsdb_jsonrpc_server *server = xzalloc(sizeof *server);
     ovsdb_server_init(&server->up);
-    server->max_sessions = 330;   /* Random limit. */
     shash_init(&server->remotes);
     return server;
 }
@@ -324,25 +323,19 @@  ovsdb_jsonrpc_server_run(struct ovsdb_jsonrpc_server *svr)
         struct ovsdb_jsonrpc_remote *remote = node->data;
 
         if (remote->listener) {
-            if (svr->n_sessions < svr->max_sessions) {
-                struct stream *stream;
-                int error;
-
-                error = pstream_accept(remote->listener, &stream);
-                if (!error) {
-                    struct jsonrpc_session *js;
-                    js = jsonrpc_session_open_unreliably(jsonrpc_open(stream),
-                                                         remote->dscp);
-                    ovsdb_jsonrpc_session_create(remote, js);
-                } else if (error != EAGAIN) {
-                    VLOG_WARN_RL(&rl, "%s: accept failed: %s",
-                                 pstream_get_name(remote->listener),
-                                 ovs_strerror(error));
-                }
-            } else {
-                VLOG_WARN_RL(&rl, "%s: connection exceeded maximum (%d)",
+            struct stream *stream;
+            int error;
+
+            error = pstream_accept(remote->listener, &stream);
+            if (!error) {
+                struct jsonrpc_session *js;
+                js = jsonrpc_session_open_unreliably(jsonrpc_open(stream),
+                                                     remote->dscp);
+                ovsdb_jsonrpc_session_create(remote, js);
+            } else if (error != EAGAIN) {
+                VLOG_WARN_RL(&rl, "%s: accept failed: %s",
                              pstream_get_name(remote->listener),
-                             svr->max_sessions);
+                             ovs_strerror(error));
             }
         }
 
@@ -358,7 +351,7 @@  ovsdb_jsonrpc_server_wait(struct ovsdb_jsonrpc_server *svr)
     SHASH_FOR_EACH (node, &svr->remotes) {
         struct ovsdb_jsonrpc_remote *remote = node->data;
 
-        if (remote->listener && svr->n_sessions < svr->max_sessions) {
+        if (remote->listener) {
             pstream_wait(remote->listener);
         }