Blob Blame History Raw
From a6db1b71102835ada48a9d4785d1588f365ea990 Mon Sep 17 00:00:00 2001
From: Krishnan Parthasarathi <kparthas@redhat.com>
Date: Mon, 3 Aug 2015 13:28:09 +0530
Subject: [PATCH 256/279] client, rpc: make ping-timeout configurable for glusterfs clients

Change-Id: Idd94adb0457aaffce7330f56f98cebafa2c4dae8
BUG: 1252359
Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com>
Reviewed-on: http://review.gluster.org/11818
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
(cherry picked from commit 3403370ebeaf16567b79022c6ac48b2e0cd50db5)
Reviewed-on: http://review.gluster.org/11848
Reviewed-on: https://code.engineering.redhat.com/gerrit/55045
Reviewed-by: Raghavendra Gowdappa <rgowdapp@redhat.com>
Tested-by: Raghavendra Gowdappa <rgowdapp@redhat.com>
---
 rpc/rpc-lib/src/rpc-clnt.c           |   15 +++++++++++++++
 rpc/rpc-lib/src/rpc-clnt.h           |    1 +
 xlators/protocol/client/src/client.c |   23 ++++++++++++++---------
 3 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c
index 2878372..5fbe072 100644
--- a/rpc/rpc-lib/src/rpc-clnt.c
+++ b/rpc/rpc-lib/src/rpc-clnt.c
@@ -1802,6 +1802,21 @@ out:
 void
 rpc_clnt_reconfig (struct rpc_clnt *rpc, struct rpc_clnt_config *config)
 {
+        if (config->ping_timeout) {
+                if (config->ping_timeout != rpc->conn.ping_timeout)
+                        gf_log (rpc->conn.name, GF_LOG_INFO,
+                                "changing ping timeout to %d (from %d)",
+                                config->ping_timeout,
+                                rpc->conn.ping_timeout);
+
+                pthread_mutex_lock (&rpc->conn.lock);
+                {
+                rpc->conn.ping_timeout = config->ping_timeout;
+                }
+                pthread_mutex_unlock (&rpc->conn.lock);
+
+        }
+
         if (config->rpc_timeout) {
                 if (config->rpc_timeout != rpc->conn.config.rpc_timeout)
                         gf_log (rpc->conn.name, GF_LOG_INFO,
diff --git a/rpc/rpc-lib/src/rpc-clnt.h b/rpc/rpc-lib/src/rpc-clnt.h
index faae485..ee46a9a 100644
--- a/rpc/rpc-lib/src/rpc-clnt.h
+++ b/rpc/rpc-lib/src/rpc-clnt.h
@@ -125,6 +125,7 @@ struct rpc_clnt_config {
         int    rpc_timeout;
         int    remote_port;
         char * remote_host;
+        int    ping_timeout;
 };
 
 
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c
index fb45128..db7a07a 100644
--- a/xlators/protocol/client/src/client.c
+++ b/xlators/protocol/client/src/client.c
@@ -2374,21 +2374,22 @@ client_check_event_threads (xlator_t *this, clnt_conf_t *conf, int32_t old,
 int
 reconfigure (xlator_t *this, dict_t *options)
 {
-	clnt_conf_t *conf              = NULL;
-	int          ret               = -1;
-        int          subvol_ret        = 0;
-        char        *old_remote_subvol = NULL;
-        char        *new_remote_subvol = NULL;
-        char        *old_remote_host   = NULL;
-        char        *new_remote_host   = NULL;
-        int32_t      new_nthread       = 0;
+	clnt_conf_t *conf                       = NULL;
+	int          ret                        = -1;
+        int          subvol_ret                 = 0;
+        char        *old_remote_subvol          = NULL;
+        char        *new_remote_subvol          = NULL;
+        char        *old_remote_host            = NULL;
+        char        *new_remote_host            = NULL;
+        int32_t      new_nthread                = 0;
+        struct rpc_clnt_config rpc_config       = {0,};
 
 	conf = this->private;
 
         GF_OPTION_RECONF ("frame-timeout", conf->rpc_conf.rpc_timeout,
                           options, int32, out);
 
-        GF_OPTION_RECONF ("ping-timeout", conf->opt.ping_timeout,
+        GF_OPTION_RECONF ("ping-timeout", rpc_config.ping_timeout,
                           options, int32, out);
 
         GF_OPTION_RECONF ("event-threads", new_nthread, options,
@@ -2430,6 +2431,10 @@ reconfigure (xlator_t *this, dict_t *options)
                 }
         }
 
+        /* Reconfiguring client xlator's @rpc with new frame-timeout
+         * and ping-timeout */
+        rpc_clnt_reconfig (conf->rpc, &rpc_config);
+
         GF_OPTION_RECONF ("filter-O_DIRECT", conf->filter_o_direct,
                           options, bool, out);
 
-- 
1.7.1