Skip to content

Commit 9ce95f4

Browse files
authored
🐛 Nodeports filemanager incorrectly closes request (ITISFoundation#3300)
1 parent 0df13e5 commit 9ce95f4

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

packages/simcore-sdk/src/simcore_sdk/node_ports_common/file_io_utils.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from pydantic import AnyUrl
1919
from servicelib.utils import logged_gather
2020
from tenacity._asyncio import AsyncRetrying
21+
from tenacity.after import after_log
2122
from tenacity.before_sleep import before_sleep_log
2223
from tenacity.retry import retry_if_exception_type
2324
from tenacity.stop import stop_after_attempt
@@ -105,7 +106,8 @@ async def download_link_to_file(
105106
wait=wait_exponential(min=1, max=10),
106107
stop=stop_after_attempt(num_retries),
107108
retry=retry_if_exception_type(ClientConnectionError),
108-
before_sleep=before_sleep_log(log, logging.WARNING),
109+
before_sleep=before_sleep_log(log, logging.WARNING, exc_info=True),
110+
after=after_log(log, log_level=logging.ERROR),
109111
):
110112
with attempt:
111113
async with session.get(url) as response:
@@ -165,32 +167,33 @@ async def _upload_file_part(
165167
wait=wait_exponential(min=1, max=10),
166168
stop=stop_after_attempt(num_retries),
167169
retry=retry_if_exception_type(ClientConnectionError),
168-
before_sleep=before_sleep_log(log, logging.WARNING),
170+
before_sleep=before_sleep_log(log, logging.WARNING, exc_info=True),
171+
after=after_log(log, log_level=logging.ERROR),
169172
):
170173
with attempt:
171-
response = await session.put(
174+
async with session.put(
172175
upload_url,
173176
data=file_uploader,
174177
headers={
175178
"Content-Length": f"{file_part_size}",
176179
},
177-
)
178-
response.raise_for_status()
179-
if pbar.update(file_part_size) and io_log_redirect_cb:
180-
await io_log_redirect_cb(f"{pbar}")
181-
# NOTE: the response from minio does not contain a json body
182-
assert response.status == web.HTTPOk.status_code # nosec
183-
assert response.headers # nosec
184-
assert "Etag" in response.headers # nosec
185-
received_e_tag = json.loads(response.headers["Etag"])
186-
log.info(
187-
"--> completed upload %s of %s, [%s], %s",
188-
f"{file_part_size=}",
189-
f"{file_to_upload=}",
190-
f"{part_index+1}/{num_parts}",
191-
f"{received_e_tag=}",
192-
)
193-
return (part_index, received_e_tag)
180+
) as response:
181+
response.raise_for_status()
182+
if pbar.update(file_part_size) and io_log_redirect_cb:
183+
await io_log_redirect_cb(f"{pbar}")
184+
# NOTE: the response from minio does not contain a json body
185+
assert response.status == web.HTTPOk.status_code # nosec
186+
assert response.headers # nosec
187+
assert "Etag" in response.headers # nosec
188+
received_e_tag = json.loads(response.headers["Etag"])
189+
log.info(
190+
"--> completed upload %s of %s, [%s], %s",
191+
f"{file_part_size=}",
192+
f"{file_to_upload=}",
193+
f"{part_index+1}/{num_parts}",
194+
f"{received_e_tag=}",
195+
)
196+
return (part_index, received_e_tag)
194197
raise exceptions.S3TransferError(
195198
f"Unexpected error while transferring {file_to_upload} to {upload_url}"
196199
)

0 commit comments

Comments
 (0)