Skip to content

Commit 2999255

Browse files
committed
Keep last exception cause in errors list
1 parent 4717288 commit 2999255

File tree

4 files changed

+36
-5
lines changed

4 files changed

+36
-5
lines changed

elastic_transport/_async_transport.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,8 @@ async def perform_request( # type: ignore[override, return]
323323
# exception not to interrupt the retries.
324324
pass
325325

326+
errors.append(e)
327+
326328
if not retry or attempt >= max_retries:
327329
# Since we're exhausted but we have previously
328330
# received some sort of response from the API
@@ -340,7 +342,6 @@ async def perform_request( # type: ignore[override, return]
340342
max_retries,
341343
exc_info=e,
342344
)
343-
errors.append(e)
344345

345346
else:
346347
# If we got back a response we need to check if that status

elastic_transport/_transport.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,8 @@ def perform_request( # type: ignore[return]
401401
# exception not to interrupt the retries.
402402
pass
403403

404+
errors.append(e)
405+
404406
if not retry or attempt >= max_retries:
405407
# Since we're exhausted but we have previously
406408
# received some sort of response from the API
@@ -418,7 +420,6 @@ def perform_request( # type: ignore[return]
418420
max_retries,
419421
exc_info=e,
420422
)
421-
errors.append(e)
422423

423424
else:
424425
# If we got back a response we need to check if that status

tests/async_/test_async_transport.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,41 @@ async def test_request_will_fail_after_x_retries():
139139
)
140140
],
141141
node_class=AsyncDummyNode,
142+
max_retries=0,
143+
)
144+
145+
with pytest.raises(ConnectionError) as e:
146+
await t.perform_request("GET", "/")
147+
148+
assert 1 == len(t.node_pool.get().calls)
149+
assert len(e.value.errors) == 1
150+
151+
# max_retries=3
152+
t = AsyncTransport(
153+
[
154+
NodeConfig(
155+
"http",
156+
"localhost",
157+
80,
158+
_extras={"exception": ConnectionError("abandon ship")},
159+
)
160+
],
161+
node_class=AsyncDummyNode,
162+
max_retries=3,
142163
)
143164

144165
with pytest.raises(ConnectionError) as e:
145166
await t.perform_request("GET", "/")
146167

147168
assert 4 == len(t.node_pool.get().calls)
169+
assert len(e.value.errors) == 4
170+
assert all(isinstance(error, ConnectionError) for error in e.value.errors)
171+
172+
# max_retries=2 in perform_request()
173+
with pytest.raises(ConnectionError) as e:
174+
await t.perform_request("GET", "/", max_retries=2)
175+
176+
assert 7 == len(t.node_pool.get().calls)
148177
assert len(e.value.errors) == 3
149178
assert all(isinstance(error, ConnectionError) for error in e.value.errors)
150179

tests/test_transport.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def test_request_will_fail_after_x_retries():
139139
t.perform_request("GET", "/")
140140

141141
assert 1 == len(t.node_pool.get().calls)
142-
assert len(e.value.errors) == 0
142+
assert len(e.value.errors) == 1
143143

144144
# max_retries=3
145145
t = Transport(
@@ -159,15 +159,15 @@ def test_request_will_fail_after_x_retries():
159159
t.perform_request("GET", "/")
160160

161161
assert 4 == len(t.node_pool.get().calls)
162-
assert len(e.value.errors) == 3
162+
assert len(e.value.errors) == 4
163163
assert all(isinstance(error, ConnectionError) for error in e.value.errors)
164164

165165
# max_retries=2 in perform_request()
166166
with pytest.raises(ConnectionError) as e:
167167
t.perform_request("GET", "/", max_retries=2)
168168

169169
assert 7 == len(t.node_pool.get().calls)
170-
assert len(e.value.errors) == 2
170+
assert len(e.value.errors) == 3
171171
assert all(isinstance(error, ConnectionError) for error in e.value.errors)
172172

173173

0 commit comments

Comments
 (0)