mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-06-26 12:51:16 -03:00
fix(aria2): disable fsync and relax RPC timeouts to prevent aria2 freeze on large files
aria2 default --fsync=true calls fsync() after each write, which blocks the entire single-threaded process on large files under Docker overlay. Add --fsync=false to eliminate this blocking source. Relax aiohttp session timeout: total=30 → sock_connect=10, sock_read=60 so that transient I/O delays don't cut off legitimate tellStatus RPCs. Increase retry params (4 attempts, 3s delay) to give aria2 more recovery time when blocked on synchronous I/O.
This commit is contained in:
@@ -138,7 +138,7 @@ class Aria2Downloader:
|
|||||||
self._transfers.pop(download_id, None)
|
self._transfers.pop(download_id, None)
|
||||||
|
|
||||||
async def _get_status_with_retry(
|
async def _get_status_with_retry(
|
||||||
self, download_id: str, *, max_retries: int = 3, retry_delay: float = 1.0
|
self, download_id: str, *, max_retries: int = 4, retry_delay: float = 3.0
|
||||||
) -> Optional[Dict[str, Any]]:
|
) -> Optional[Dict[str, Any]]:
|
||||||
"""Call get_status with retry for transient RPC failures.
|
"""Call get_status with retry for transient RPC failures.
|
||||||
|
|
||||||
@@ -510,6 +510,7 @@ class Aria2Downloader:
|
|||||||
"--continue=true",
|
"--continue=true",
|
||||||
"--daemon=false",
|
"--daemon=false",
|
||||||
"--quiet=true",
|
"--quiet=true",
|
||||||
|
"--fsync=false",
|
||||||
f"--stop-with-process={os.getpid()}",
|
f"--stop-with-process={os.getpid()}",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -649,7 +650,9 @@ class Aria2Downloader:
|
|||||||
if self._rpc_session is None or self._rpc_session.closed:
|
if self._rpc_session is None or self._rpc_session.closed:
|
||||||
async with self._rpc_session_lock:
|
async with self._rpc_session_lock:
|
||||||
if self._rpc_session is None or self._rpc_session.closed:
|
if self._rpc_session is None or self._rpc_session.closed:
|
||||||
timeout = aiohttp.ClientTimeout(total=30)
|
timeout = aiohttp.ClientTimeout(
|
||||||
|
total=None, sock_connect=10, sock_read=60
|
||||||
|
)
|
||||||
self._rpc_session = aiohttp.ClientSession(timeout=timeout)
|
self._rpc_session = aiohttp.ClientSession(timeout=timeout)
|
||||||
return self._rpc_session
|
return self._rpc_session
|
||||||
|
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ async def test_get_status_with_retry_raises_after_all_retries_exhausted(monkeypa
|
|||||||
await downloader._get_status_with_retry("dummy")
|
await downloader._get_status_with_retry("dummy")
|
||||||
|
|
||||||
msg = str(exc_info.value)
|
msg = str(exc_info.value)
|
||||||
assert "after 3 attempts" in msg
|
assert "after 4 attempts" in msg
|
||||||
assert "connection reset" in msg
|
assert "connection reset" in msg
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user