@@ -97,6 +97,34 @@ def test_unknown_result_class(self):
9797 with pytest .raises (ConnectionException ):
9898 rf .result ()
9999
100+ def test_query_releases_request_id_when_send_fails_after_registration (self ):
101+ session = self .make_session ()
102+ pool = session ._pools .get .return_value
103+ connection = Connection ('1.2.3.4' )
104+ connection .push = Mock (side_effect = ConnectionException ("write failed" ))
105+
106+ initial_request_ids = len (connection .request_ids )
107+ request_id = connection .request_ids .popleft ()
108+ connection .in_flight += 1
109+ pool .borrow_connection .return_value = (connection , request_id )
110+
111+ def return_connection (conn ):
112+ with conn .lock :
113+ conn .in_flight -= 1
114+
115+ pool .return_connection .side_effect = return_connection
116+
117+ query = SimpleStatement ("SELECT * FROM foo" )
118+ message = QueryMessage (query = query .query_string , consistency_level = ConsistencyLevel .ONE )
119+ rf = ResponseFuture (session , message , query , 1 )
120+
121+ assert rf ._query ('ip1' ) is None
122+ pool .return_connection .assert_called_once_with (connection )
123+ assert connection .in_flight == 0
124+ assert len (connection .request_ids ) == initial_request_ids
125+ assert request_id in connection .request_ids
126+ assert not connection ._requests
127+
100128 def test_set_keyspace_result (self ):
101129 session = self .make_session ()
102130 rf = self .make_response_future (session )
0 commit comments