summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Darcy <jdarcy@redhat.com>2012-11-05 11:24:57 -0500
committerVijay Bellur <vbellur@redhat.com>2012-11-12 07:17:13 -0800
commit128514fcb7f4943e6c97139f873db68a009ae893 (patch)
treeffdf880dc8f301fc80bf293cde049dfdd8450bdd
parent009c728b401287ef9aa9ee4a7fb509ccc5baa156 (diff)
socket: fix SSL breakage from re/connect handling changes
Change-Id: Ia1f5aeec5628b61cad8a10a9cdc6d9f1c67ec653 BUG: 873367 Signed-off-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-on: http://review.gluster.org/4158 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rw-r--r--rpc/rpc-transport/socket/src/socket.c16
-rwxr-xr-xtests/bugs/bug-873367.t41
2 files changed, 50 insertions, 7 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index b043f52ef83..ff6983f813b 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -2148,12 +2148,13 @@ socket_poller (void *ctx)
gf_log (this->name, GF_LOG_WARNING,
"asynchronous socket_connect_finish failed");
}
- ret = rpc_transport_notify (this->listener,
- RPC_TRANSPORT_ACCEPT, this);
- if (ret != 0) {
- gf_log (this->name, GF_LOG_WARNING,
- "asynchronous rpc_transport_notify failed");
- }
+ }
+
+ ret = rpc_transport_notify (this->listener,
+ RPC_TRANSPORT_ACCEPT, this);
+ if (ret != 0) {
+ gf_log (this->name, GF_LOG_WARNING,
+ "asynchronous rpc_transport_notify failed");
}
for (;;) {
@@ -2232,7 +2233,7 @@ socket_poller (void *ctx)
err:
/* All (and only) I/O errors should come here. */
__socket_disconnect (this);
- rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
+ rpc_transport_notify (this->listener, RPC_TRANSPORT_DISCONNECT, this);
rpc_transport_unref (this);
return NULL;
}
@@ -2632,6 +2633,7 @@ socket_connect (rpc_transport_t *this, int port)
"could not create pipe");
}
+ this->listener = this;
if (pthread_create(&priv->thread,NULL,
socket_poller, this) != 0) {
gf_log(this->name,GF_LOG_ERROR,
diff --git a/tests/bugs/bug-873367.t b/tests/bugs/bug-873367.t
new file mode 100755
index 00000000000..cfbbc98d0b2
--- /dev/null
+++ b/tests/bugs/bug-873367.t
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+. $(dirname $0)/../include.rc
+
+SSL_BASE=/etc/ssl
+SSL_KEY=$SSL_BASE/glusterfs.key
+SSL_CERT=$SSL_BASE/glusterfs.pem
+SSL_CA=$SSL_BASE/glusterfs.ca
+
+cleanup;
+rm -f $SSL_BASE/glusterfs.*
+mkdir -p $B0/1
+mkdir -p $M0
+
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume info;
+
+TEST openssl genrsa -out $SSL_KEY 1024
+TEST openssl req -new -x509 -key $SSL_KEY -subj /CN=Anyone -out $SSL_CERT
+ln $SSL_CERT $SSL_CA
+
+TEST $CLI volume create $V0 $H0:$B0/1
+TEST $CLI volume set $V0 server.ssl on
+TEST $CLI volume set $V0 client.ssl on
+TEST $CLI volume start $V0
+
+TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
+echo some_data > $M0/data_file
+TEST umount $M0
+
+# If the bug is not fixed, the next mount will fail.
+
+TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
+EXPECT some_data cat $M0/data_file
+
+TEST umount $M0
+TEST $CLI volume stop $V0
+TEST $CLI volume delete $V0
+
+cleanup;