File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1745,7 +1745,13 @@ def process_result(result):
17451745 # acquire a new request id
17461746 request_id = self .get_request_id ()
17471747
1748- self .send_msg (query , request_id , process_result )
1748+ try :
1749+ self .send_msg (query , request_id , process_result )
1750+ except Exception as exc :
1751+ with self .lock :
1752+ if request_id not in self ._requests and request_id not in self .request_ids :
1753+ self .request_ids .append (request_id )
1754+ callback (self , exc )
17491755
17501756 @property
17511757 def is_idle (self ):
Original file line number Diff line number Diff line change @@ -389,6 +389,26 @@ def test_wait_for_responses_releases_request_id_when_send_raises_after_registrat
389389 assert len (c .request_ids ) == initial_request_ids
390390 assert not c ._requests
391391
392+ def test_set_keyspace_async_reports_send_failure_and_releases_request_id (self ):
393+ c = self .make_connection ()
394+ c .push = Mock (side_effect = ConnectionException ("write failed" ))
395+ initial_in_flight = c .in_flight
396+ initial_request_ids = len (c .request_ids )
397+ callback_errors = []
398+
399+ def callback (conn , error ):
400+ callback_errors .append (error )
401+ with conn .lock :
402+ conn .in_flight -= 1
403+
404+ c .set_keyspace_async ("ks" , callback )
405+
406+ assert len (callback_errors ) == 1
407+ assert isinstance (callback_errors [0 ], ConnectionException )
408+ assert c .in_flight == initial_in_flight
409+ assert len (c .request_ids ) == initial_request_ids
410+ assert not c ._requests
411+
392412
393413@patch ('cassandra.connection.ConnectionHeartbeat._raise_if_stopped' )
394414class ConnectionHeartbeatTest (unittest .TestCase ):
You can’t perform that action at this time.
0 commit comments