Skip to content

Commit dc9fbde

Browse files
committed
response-future: release stream id after send failure
1 parent 0842348 commit dc9fbde

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

cassandra/cluster.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4618,6 +4618,7 @@ def _query(self, host, message=None, cb=None):
46184618
self._current_host = host
46194619

46204620
connection = None
4621+
request_id = None
46214622
try:
46224623
# TODO get connectTimeout from cluster settings
46234624
if self.query:
@@ -4642,16 +4643,25 @@ def _query(self, host, message=None, cb=None):
46424643
except ConnectionBusy as exc:
46434644
log.debug("Connection for host %s is busy, moving to the next host", host)
46444645
self._errors[host] = exc
4646+
if connection:
4647+
self._return_connection_after_send_failure(pool, connection, request_id)
46454648
except Exception as exc:
46464649
log.debug("Error querying host %s", host, exc_info=True)
46474650
self._errors[host] = exc
46484651
if self._metrics is not None:
46494652
self._metrics.on_connection_error()
46504653
if connection:
4651-
pool.return_connection(connection)
4654+
self._return_connection_after_send_failure(pool, connection, request_id)
46524655

46534656
return None
46544657

4658+
def _return_connection_after_send_failure(self, pool, connection, request_id):
4659+
if request_id is not None:
4660+
with connection.lock:
4661+
if request_id not in connection._requests and request_id not in connection.request_ids:
4662+
connection.request_ids.append(request_id)
4663+
pool.return_connection(connection)
4664+
46554665
@property
46564666
def has_more_pages(self):
46574667
"""

0 commit comments

Comments
 (0)