diff options
author | Mohammed Rafi KC <rkavunga@redhat.com> | 2017-05-29 16:00:24 +0530 |
---|---|---|
committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-06-08 15:32:30 +0000 |
commit | 0a20e56d07de3e467e09da885a6b71cdc165de17 (patch) | |
tree | 189ba4075562036bcb0824f247230c5e7e439ecf /rpc/rpc-transport/socket/src | |
parent | 513984ad90531c53fcb7d6f0d581f198a6afcf93 (diff) |
protocol/server: make listen backlog value as configurable
problem:
When we call listen from protocol/server, we are giving a
hard coded valie of 10 if it is not manually given.
With multiplexing, especially when glusterd restarts all
clients may try to connect to the server at a time.
Which will result in overflowing the queue, and kernel
will complain about the errors.
Solution:
This patch will introduce a volume set command to make backlog
value as a configurable. This patch also changes the default
values for backlog from 10 to 128. This changes is only applicable
for sockets listening from protocol.
Example:
gluster volume set <volname> transport.listen-backlog 1024
Note: 1 Brick has to be restarted to get this value in effect
2 This changes won't be reflected in glusterd, or other
xlators which calls listen. If you need, you have to
add this option to the volfile.
Change-Id: I0c5a2bbf28b5db612f9979e7560e05dd82b41477
BUG: 1456405
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
Reviewed-on: https://review.gluster.org/17411
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Diffstat (limited to 'rpc/rpc-transport/socket/src')
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index f5062fb026c..dd7f5d3b77e 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -3536,10 +3536,7 @@ socket_listen (rpc_transport_t *this) goto unlock; } - if (priv->backlog) - ret = listen (priv->sock, priv->backlog); - else - ret = listen (priv->sock, 10); + ret = listen (priv->sock, priv->backlog); if (ret == -1) { gf_log (this->name, GF_LOG_ERROR, @@ -3853,6 +3850,7 @@ reconfigure (rpc_transport_t *this, dict_t *options) gf_boolean_t tmp_bool = _gf_false; char *optstr = NULL; int ret = 0; + uint32_t backlog = 0; uint64_t windowsize = 0; uint32_t timeout = 0; int keepaliveidle = GF_KEEPALIVE_TIME; @@ -3892,6 +3890,13 @@ reconfigure (rpc_transport_t *this, dict_t *options) gf_log (this->name, GF_LOG_DEBUG, "Reconfigued " "transport.tcp-user-timeout=%d", priv->timeout); + if (dict_get_uint32 (options, "transport.listen-backlog", + &backlog) == 0) { + priv->backlog = backlog; + gf_log (this->name, GF_LOG_DEBUG, "Reconfigued " + "transport.listen-backlog=%d", priv->backlog); + } + if (dict_get_int32 (options, "transport.socket.keepalive-time", &(priv->keepaliveidle)) != 0) priv->keepaliveidle = keepaliveidle; @@ -4190,10 +4195,12 @@ socket_init (rpc_transport_t *this) "transport.keepalivecnt=%d", keepalivecnt); if (dict_get_uint32 (this->options, - "transport.socket.listen-backlog", - &backlog) == 0) { - priv->backlog = backlog; + "transport.listen-backlog", + &backlog) != 0) { + + backlog = GLUSTERFS_SOCKET_LISTEN_BACKLOG; } + priv->backlog = backlog; optstr = NULL; @@ -4612,9 +4619,6 @@ struct volume_options options[] = { .type = GF_OPTION_TYPE_INT, .default_value = "9" }, - { .key = {"transport.socket.listen-backlog"}, - .type = GF_OPTION_TYPE_INT - }, { .key = {"transport.socket.read-fail-log"}, .type = GF_OPTION_TYPE_BOOL }, |