diff --git a/elasticsearch/_async/http_aiohttp.py b/elasticsearch/_async/http_aiohttp.py index 161cfeb03..8c3a99572 100644 --- a/elasticsearch/_async/http_aiohttp.py +++ b/elasticsearch/_async/http_aiohttp.py @@ -300,10 +300,9 @@ async def perform_request( raw_data = await response.text() duration = self.loop.time() - start - # We want to reraise a cancellation. - except asyncio.CancelledError: + # We want to reraise a cancellation or recursion error. + except (asyncio.CancelledError, RecursionError): raise - except Exception as e: self.log_request_fail( method, diff --git a/elasticsearch/connection/http_requests.py b/elasticsearch/connection/http_requests.py index 4480079fe..84526d8d5 100644 --- a/elasticsearch/connection/http_requests.py +++ b/elasticsearch/connection/http_requests.py @@ -166,6 +166,8 @@ def perform_request( response = self.session.send(prepared_request, **send_kwargs) duration = time.time() - start raw_data = response.content.decode("utf-8", "surrogatepass") + except RecursionError: + raise except Exception as e: self.log_request_fail( method, diff --git a/elasticsearch/connection/http_urllib3.py b/elasticsearch/connection/http_urllib3.py index 73a207d06..e343616db 100644 --- a/elasticsearch/connection/http_urllib3.py +++ b/elasticsearch/connection/http_urllib3.py @@ -253,6 +253,8 @@ def perform_request( ) duration = time.time() - start raw_data = response.data.decode("utf-8", "surrogatepass") + except RecursionError: + raise except Exception as e: self.log_request_fail( method, full_url, url, orig_body, time.time() - start, exception=e