@@ -558,11 +558,13 @@ def _cache_credentials(self, source, credentials):
558
558
members = self .__members .copy ().values ()
559
559
member = select_member (members , ReadPreference .PRIMARY_PREFERRED )
560
560
sock_info = self .__socket (member )
561
- # Logout any previous user for this source database
562
- self .__check_auth (sock_info )
563
- auth .authenticate (credentials , sock_info , self .__simple_command )
564
- sock_info .authset .add (credentials )
565
- member .pool .maybe_return_socket (sock_info )
561
+ try :
562
+ # Since __check_auth was called in __socket
563
+ # there is no need to call it here.
564
+ auth .authenticate (credentials , sock_info , self .__simple_command )
565
+ sock_info .authset .add (credentials )
566
+ finally :
567
+ member .pool .maybe_return_socket (sock_info )
566
568
567
569
self .__auth_credentials [source ] = credentials
568
570
@@ -917,7 +919,11 @@ def __socket(self, member):
917
919
918
920
sock_info = member .pool .get_socket ()
919
921
920
- self .__check_auth (sock_info )
922
+ try :
923
+ self .__check_auth (sock_info )
924
+ except OperationFailure :
925
+ member .pool .maybe_return_socket (sock_info )
926
+ raise
921
927
return sock_info
922
928
923
929
def disconnect (self ):
@@ -1123,8 +1129,6 @@ def __send_and_receive(self, member, msg, **kwargs):
1123
1129
member .pool .maybe_return_socket (sock_info )
1124
1130
1125
1131
return response
1126
- except OperationFailure :
1127
- raise
1128
1132
except (ConnectionFailure , socket .error ), why :
1129
1133
host , port = member .pool .pair
1130
1134
member .pool .discard_socket (sock_info )
0 commit comments