summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/src/glfs-mgmt.c15
-rw-r--r--glusterfsd/src/glusterfsd-mgmt.c17
-rw-r--r--rpc/rpc-lib/src/rpc-transport.h5
-rw-r--r--rpc/rpc-transport/socket/src/socket.c2
4 files changed, 31 insertions, 8 deletions
diff --git a/api/src/glfs-mgmt.c b/api/src/glfs-mgmt.c
index 045080d667a..6b65e517a67 100644
--- a/api/src/glfs-mgmt.c
+++ b/api/src/glfs-mgmt.c
@@ -792,11 +792,16 @@ mgmt_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,
switch (event) {
case RPC_CLNT_DISCONNECT:
if (!ctx->active) {
- gf_msg ("glfs-mgmt", GF_LOG_ERROR, errno,
- API_MSG_REMOTE_HOST_CONN_FAILED,
- "failed to connect with remote-host: %s (%s)",
- ctx->cmd_args.volfile_server,
- strerror (errno));
+ if (rpc_trans->connect_failed)
+ gf_msg ("glfs-mgmt", GF_LOG_ERROR, 0,
+ API_MSG_REMOTE_HOST_CONN_FAILED,
+ "failed to connect to remote-host: %s",
+ ctx->cmd_args.volfile_server);
+ else
+ gf_msg ("glfs-mgmt", GF_LOG_INFO, 0,
+ API_MSG_REMOTE_HOST_CONN_FAILED,
+ "disconnected from remote-host: %s",
+ ctx->cmd_args.volfile_server);
if (!rpc->disabled) {
/*
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
index 6871582abb0..3f06893fafa 100644
--- a/glusterfsd/src/glusterfsd-mgmt.c
+++ b/glusterfsd/src/glusterfsd-mgmt.c
@@ -2100,9 +2100,20 @@ mgmt_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,
switch (event) {
case RPC_CLNT_DISCONNECT:
- GF_LOG_OCCASIONALLY (log_ctr1, "glusterfsd-mgmt", GF_LOG_ERROR,
- "failed to connect with remote-host: %s (%s)",
- ctx->cmd_args.volfile_server, strerror (errno));
+ if (rpc_trans->connect_failed) {
+ GF_LOG_OCCASIONALLY (log_ctr1, "glusterfsd-mgmt",
+ GF_LOG_ERROR,
+ "failed to connect to remote-"
+ "host: %s",
+ ctx->cmd_args.volfile_server);
+ } else {
+ GF_LOG_OCCASIONALLY (log_ctr1, "glusterfsd-mgmt",
+ GF_LOG_INFO,
+ "disconnected from remote-"
+ "host: %s",
+ ctx->cmd_args.volfile_server);
+ }
+
if (!rpc->disabled) {
/*
* Check if dnscache is exhausted for current server
diff --git a/rpc/rpc-lib/src/rpc-transport.h b/rpc/rpc-lib/src/rpc-transport.h
index e3b630e2919..ff6567c198e 100644
--- a/rpc/rpc-lib/src/rpc-transport.h
+++ b/rpc/rpc-lib/src/rpc-transport.h
@@ -212,6 +212,11 @@ struct rpc_transport {
char *ssl_name;
dict_t *clnt_options; /* store options received from
* client */
+ /* connect_failed: saves the connect() syscall status as socket_t
+ * member holding connect() status can't be accessed by higher gfapi
+ * layer or in client management notification handler functions
+ */
+ gf_boolean_t connect_failed;
};
struct rpc_transport_ops {
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index 0ee75951207..d062cbbc4fb 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -3146,6 +3146,7 @@ socket_connect (rpc_transport_t *this, int port)
}
}
+ this->connect_failed = _gf_false;
if (ign_enoent) {
ret = connect_loop (priv->sock,
SA (&this->peerinfo.sockaddr),
@@ -3169,6 +3170,7 @@ socket_connect (rpc_transport_t *this, int port)
/* TBD: What about ENOENT, we will do getsockopt there
as well, so how is that exempt from such a problem? */
priv->connect_failed = 1;
+ this->connect_failed = _gf_true;
goto handler;
}