fix: prevent memory leaks in file handling and HTTP connections

- Fix file handle memory leak in download_file_stream by properly closing and reopening files
- Add requests.Session context manager for proper HTTP connection cleanup
- Remove unnecessary file.seek(0) after file reopening
- Add timeout to prevent hanging connections

This prevents memory accumulation during large file downloads and ensures
proper resource cleanup in all scenarios.

Signed-off-by: Sihyeon Jang <sihyeon.jang@navercorp.com>
This commit is contained in:
Sihyeon Jang 2025-09-20 06:37:10 +09:00
parent dbd7b90123
commit 7042318c34

View file

@ -1694,13 +1694,15 @@ async def download_file_stream(
yield f'data: {{"progress": {progress}, "completed": {current_size}, "total": {total_size}}}\n\n' yield f'data: {{"progress": {progress}, "completed": {current_size}, "total": {total_size}}}\n\n'
if done: if done:
file.seek(0) file.close()
with open(file_path, "rb") as file:
chunk_size = 1024 * 1024 * 2 chunk_size = 1024 * 1024 * 2
hashed = calculate_sha256(file, chunk_size) hashed = calculate_sha256(file, chunk_size)
file.seek(0)
url = f"{ollama_url}/api/blobs/sha256:{hashed}" url = f"{ollama_url}/api/blobs/sha256:{hashed}"
response = requests.post(url, data=file) with requests.Session() as session:
response = session.post(url, data=file, timeout=30)
if response.ok: if response.ok:
res = { res = {