summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2015-02-17 12:12:11 +0100
committerKaleb KEITHLEY <kkeithle@redhat.com>2015-03-17 05:10:17 -0700
commit6b3704990257643da54100d8581856a7d2c72f86 (patch)
tree53256b40fc8f36aa0989649a69867acd2fa38faa /xlators
parent2b97b57cd8c71cb07b7002cf3483e9cfc9403c58 (diff)
socket: use TCP_USER_TIMEOUT to detect client failures quicker
Use the network.ping-timeout to set the TCP_USER_TIMEOUT socket option (see 'man 7 tcp'). The option sets the transport.tcp-user-timeout option that is handled in the rpc/socket layer on the protocol/server side. This socket option makes detecting unclean disconnected clients more reliable. When the socket gets closed, any locks that the client held are been released. This makes it possible to reduce the fail-over time for applications that run on systems that became unreachable due to a network partition or general system error client-side (kernel panic, hang, ...). It is not trivial to create a test-case for this at the moment. We need a client that unclean disconnects and an other client that tries to take over the lock from the disconnected client. URL: http://supercolony.gluster.org/pipermail/gluster-devel/2014-May/040755.html Change-Id: I5e5f540a49abfb5f398291f1818583a63a5f4bb4 BUG: 1129787 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/8065 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: soumya k <skoduri@redhat.com> Reviewed-by: Santosh Pradhan <santosh.pradhan@gmail.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c12
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c5
-rw-r--r--xlators/protocol/server/src/server.c6
3 files changed, 20 insertions, 3 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index cc97baf6f21..1c33f3febb3 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -2994,7 +2994,8 @@ out:
}
int
-glusterd_transport_keepalive_options_get (int *interval, int *time)
+glusterd_transport_keepalive_options_get (int *interval, int *time,
+ int *timeout)
{
int ret = 0;
xlator_t *this = NULL;
@@ -3008,6 +3009,9 @@ glusterd_transport_keepalive_options_get (int *interval, int *time)
ret = dict_get_int32 (this->options,
"transport.socket.keepalive-time",
time);
+ ret = dict_get_int32 (this->options,
+ "transport.tcp-user-timeout",
+ timeout);
return 0;
}
@@ -3018,6 +3022,7 @@ glusterd_transport_inet_options_build (dict_t **options, const char *hostname,
dict_t *dict = NULL;
int32_t interval = -1;
int32_t time = -1;
+ int32_t timeout = -1;
int ret = 0;
GF_ASSERT (options);
@@ -3044,10 +3049,11 @@ glusterd_transport_inet_options_build (dict_t **options, const char *hostname,
}
/* Set keepalive options */
- glusterd_transport_keepalive_options_get (&interval, &time);
+ glusterd_transport_keepalive_options_get (&interval, &time, &timeout);
if ((interval > 0) || (time > 0))
- ret = rpc_transport_keepalive_options_set (dict, interval, time);
+ ret = rpc_transport_keepalive_options_set (dict, interval,
+ time, timeout);
*options = dict;
out:
gf_log ("glusterd", GF_LOG_DEBUG, "Returning %d", ret);
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index 77f6853dd51..b0a3b0c8c39 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -842,6 +842,11 @@ struct volopt_map_entry glusterd_volopt_map[] = {
},
/* Server xlator options */
+ { .key = "network.ping-timeout",
+ .voltype = "protocol/server",
+ .option = "transport.tcp-user-timeout",
+ .op_version = GD_OP_VERSION_3_7_0,
+ },
{ .key = "network.tcp-window-size",
.voltype = "protocol/server",
.op_version = 1
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c
index 023f2a6234f..aea88b623cc 100644
--- a/xlators/protocol/server/src/server.c
+++ b/xlators/protocol/server/src/server.c
@@ -1198,6 +1198,12 @@ struct volume_options options[] = {
{ .key = {"volume-filename.*"},
.type = GF_OPTION_TYPE_PATH,
},
+ { .key = {"transport.tcp-user-timeout"},
+ .type = GF_OPTION_TYPE_TIME,
+ .min = 0,
+ .max = 1013,
+ .default_value = "42", /* default like network.ping-timeout */
+ },
{ .key = {"transport.*"},
.type = GF_OPTION_TYPE_ANY,
},