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>
This commit is contained in:
Jeff Darcy 2012-11-05 11:24:57 -05:00 committed by Vijay Bellur
parent 009c728b40
commit 128514fcb7
2 changed files with 50 additions and 7 deletions

View File

@ -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,

41
tests/bugs/bug-873367.t Executable file
View File

@ -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;