summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVijay Bellur <vijay@gluster.com>2010-10-08 04:54:36 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-10-08 04:28:44 -0700
commit99b04920189df06cfd8704a773c51cdb995b7ae0 (patch)
treebac61cfb6be363e29da58023cc968b95fb9c1d12
parent95d595d9cbe727401021cf1caf0d59b3ab12d454 (diff)
support for configuring keepalive idle time
Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1802 (Gluster volume creation failed) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1802
-rw-r--r--doc/glusterd.vol2
-rw-r--r--rpc/rpc-transport/socket/src/socket.c21
-rw-r--r--rpc/rpc-transport/socket/src/socket.h1
3 files changed, 19 insertions, 5 deletions
diff --git a/doc/glusterd.vol b/doc/glusterd.vol
index 48cad9579a2..b96cbe8eaaf 100644
--- a/doc/glusterd.vol
+++ b/doc/glusterd.vol
@@ -4,6 +4,8 @@ volume management
option transport-type socket,rdma
option transport.socket.listen-port 6969
option transport.rdma.listen-port 6968
+ option transport.socket.keepalive-time 10
+ option transport.socket.keepalive-interval 2
# option listen-port 6969
end-volume
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index c5246822a7c..341c8e94a39 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -363,7 +363,7 @@ __socket_nodelay (int fd)
static int
-__socket_keepalive (int fd, int keepalive_intvl)
+__socket_keepalive (int fd, int keepalive_intvl, int keepalive_idle)
{
int on = 1;
int ret = -1;
@@ -381,7 +381,7 @@ __socket_keepalive (int fd, int keepalive_intvl)
if (ret == -1)
goto err;
#else
- ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepalive_intvl,
+ ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepalive_idle,
sizeof (keepalive_intvl));
if (ret == -1)
goto err;
@@ -394,7 +394,7 @@ __socket_keepalive (int fd, int keepalive_intvl)
done:
gf_log ("", GF_LOG_TRACE, "Keep-alive enabled for socket %d, interval "
- "%d", fd, keepalive_intvl);
+ "%d, idle: %d", fd, keepalive_intvl, keepalive_idle);
err:
return ret;
@@ -1802,7 +1802,8 @@ socket_server_event_handler (int fd, int idx, void *data,
if (priv->keepalive) {
ret = __socket_keepalive (new_sock,
- priv->keepaliveintvl);
+ priv->keepaliveintvl,
+ priv->keepaliveidle);
if (ret == -1)
gf_log (this->name, GF_LOG_ERROR,
"Failed to set keep-alive: %s",
@@ -2010,7 +2011,8 @@ socket_connect (rpc_transport_t *this, int port)
if (priv->keepalive) {
ret = __socket_keepalive (priv->sock,
- priv->keepaliveintvl);
+ priv->keepaliveintvl,
+ priv->keepaliveidle);
if (ret == -1)
gf_log (this->name, GF_LOG_ERROR,
"Failed to set keep-alive: %s",
@@ -2600,6 +2602,12 @@ socket_init (rpc_transport_t *this)
priv->keepaliveintvl = keepalive;
}
+ if (dict_get_uint32 (this->options,
+ "transport.socket.keepalive-time",
+ &keepalive) == 0) {
+ priv->keepaliveidle = keepalive;
+ }
+
priv->windowsize = (int)windowsize;
out:
this->private = priv;
@@ -2699,5 +2707,8 @@ struct volume_options options[] = {
{ .key = {"transport.socket.keepalive-interval"},
.type = GF_OPTION_TYPE_INT
},
+ { .key = {"transport.socket.keepalive-time"},
+ .type = GF_OPTION_TYPE_INT
+ },
{ .key = {NULL} }
};
diff --git a/rpc/rpc-transport/socket/src/socket.h b/rpc/rpc-transport/socket/src/socket.h
index f7471ffb85c..f54b64c2ad2 100644
--- a/rpc/rpc-transport/socket/src/socket.h
+++ b/rpc/rpc-transport/socket/src/socket.h
@@ -189,6 +189,7 @@ typedef struct {
char lowlat;
char nodelay;
int keepalive;
+ int keepaliveidle;
int keepaliveintvl;
} socket_private_t;