07th-mod / 07th-mod/python-patcher

Corrupted/broken .aria2 file can cause install to fail in an unrecoverable manner

未關閉
#158 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
bug
主要語言
JavaScript
星號
214
分支
12
PR 合併指標
30 天內沒有已合併 PR

描述

(NOTE: unconfirmed - I haven't tried reproducing this myself, but I'm pretty sure this is correct)

We currently have some resume functionality in the installer, provided by aria2. Aria2 uses a `.aria2` file to keep track of the download progress.

If the `.aria2` file becomes corrupted or unreadable, they won't be able to complete the install, even if they retry the whole install process, as aria2 won't automatically clear the `.aria2` file if it is corrupted.

You'll get an error like `errorCode=1 Failed to read from the segment file Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z.aria2`

If this happens (with the current installer), the only way for the user to currently recover from this situation is to:
- Delete the corrupted `.aria2` file
- Delete the entire downloads folder (like `Umineko Question (Ch. 1-4) Downloads`)
- Start the installer again in another folder to reset all installer state

I'm not sure about how to tackle this (or if to leave it, and just put a note in the wiki). A couple options:

1. It would be nice to have a button which just resets all state related to the installer. We currently have a bit red "force full re-install" button which kind of does this, but this is only available if you already have performed an install - not on the first time you install the mod. So having a button which is always there which is like "clear all installer state and start install" might be a solution.
2. Aria2 may also have a flag which automatically deletes the `.aria2` file if it is corrupted, but I don't know if it exists.
3. We could try to detect this exception from aria2 in the installer itself, then delete the offending file.

Here is an example log file from a user who had this issue:

```log

<<< Status: 4% Downloading: 5.57 GB (total) DL Folder: [Umineko Question (Ch. 1-4) Downloads] URL: [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] (Attempt: 1/3) >>>
----- BEGIN EXECUTING COMMAND: [./aria2c --file-allocation=none --continue=true --retry-wait=5 -m 0 -x 8 -s 8 -j 1 --auto-file-renaming=false --allow-overwrite=true --follow-metalink=mem --check-integrity=true --disable-ipv6=true -d Umineko Question (Ch. 1-4) Downloads https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] -----

07/11 15:27:46 [NOTICE]
Downloading 1 item(s)

07/11 15:27:46 [NOTICE]
Download complete: [MEMORY]
Umineko-Graphics-1080p-v3.7z.meta4

07/11 15:27:46 [ERROR]
Exception caught
Exception: [RequestGroup.cc:760]
errorCode=1 Download aborted.
-> [DefaultBtProgressInfoFile.cc:240]
errorCode=1 Failed to read from the segment file Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z.aria2

07/11 15:27:46 [NOTICE]
Download GID#c22be35ae30d97a9 not complete: Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z

Download Results:
gid |stat|avg speed |path/URI
======+====+===========+=======================================================
86b97b|OK | n/a|[MEMORY]
Umineko-Graphics-1080p-v3.7z.meta4
c22be3|ERR | n/a|Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z

Status Legend:
(OK):download completed.(ERR):error occurred.

aria2 will resume download if the transfer is restarted.
If there are any errors, then see the log file. See '-l' option in help/man page for details.
--------------- EXECUTION FINISHED ---------------

ERROR - failed to download [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4]. Trying again in 3 seconds...
<<< Status: 4% Downloading: 5.57 GB (total) DL Folder: [Umineko Question (Ch. 1-4) Downloads] URL: [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] (Attempt: 2/3) >>>
----- BEGIN EXECUTING COMMAND: [./aria2c --file-allocation=none --continue=true --retry-wait=5 -m 0 -x 8 -s 8 -j 1 --auto-file-renaming=false --allow-overwrite=true --follow-metalink=mem --check-integrity=true --disable-ipv6=true -d Umineko Question (Ch. 1-4) Downloads https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] -----

07/11 15:27:49 [NOTICE]
Downloading 1 item(s)

07/11 15:27:50 [NOTICE]
Download complete: [MEMORY]
Umineko-Graphics-1080p-v3.7z.meta4

07/11 15:27:50 [ERROR]
Exception caught
Exception: [RequestGroup.cc:760]
errorCode=1 Download aborted.
-> [DefaultBtProgressInfoFile.cc:240]
errorCode=1 Failed to read from the segment file Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z.aria2

07/11 15:27:50 [NOTICE]
Download GID#2b2ac9784f531ec6 not complete: Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z

Download Results:
gid |stat|avg speed |path/URI
======+====+===========+=======================================================
dba9f2|OK | n/a|[MEMORY]
Umineko-Graphics-1080p-v3.7z.meta4
2b2ac9|ERR | n/a|Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z

Status Legend:
(OK):download completed.(ERR):error occurred.

aria2 will resume download if the transfer is restarted.
If there are any errors, then see the log file. See '-l' option in help/man page for details.
--------------- EXECUTION FINISHED ---------------

ERROR - failed to download [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4]. Trying again in 3 seconds...
<<< Status: 4% Downloading: 5.57 GB (total) DL Folder: [Umineko Question (Ch. 1-4) Downloads] URL: [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] (Attempt: 3/3) >>>
----- BEGIN EXECUTING COMMAND: [./aria2c --file-allocation=none --continue=true --retry-wait=5 -m 0 -x 8 -s 8 -j 1 --auto-file-renaming=false --allow-overwrite=true --follow-metalink=mem --check-integrity=true --disable-ipv6=true -d Umineko Question (Ch. 1-4) Downloads https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] -----

07/11 15:27:53 [NOTICE]
Downloading 1 item(s)

07/11 15:27:53 [NOTICE]
Download complete: [MEMORY]
Umineko-Graphics-1080p-v3.7z.meta4

07/11 15:27:53 [ERROR]
Exception caught
Exception: [RequestGroup.cc:760]
errorCode=1 Download aborted.
-> [DefaultBtProgressInfoFile.cc:240]
errorCode=1 Failed to read from the segment file Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z.aria2

07/11 15:27:53 [NOTICE]
Download GID#927551f0cd5ded18 not complete: Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z

Download Results:
gid |stat|avg speed |path/URI
======+====+===========+=======================================================
393104|OK | n/a|[MEMORY]
Umineko-Graphics-1080p-v3.7z.meta4
927551|ERR | n/a|Umineko Question (Ch. 1-4) Downloads/Umineko-Graphics-1080p-v3.7z

Status Legend:
(OK):download completed.(ERR):error occurred.

aria2 will resume download if the transfer is restarted.
If there are any errors, then see the log file. See '-l' option in help/man page for details.
--------------- EXECUTION FINISHED ---------------

ERROR - failed to download [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4]. Trying again in 3 seconds...
Exception in thread Thread-98:
Traceback (most recent call last):
File "D:\obj\windows-release\37win32_Release\msi_python\zip_win32\threading.py", line 926, in _bootstrap_inner
File "D:\obj\windows-release\37win32_Release\msi_python\zip_win32\threading.py", line 870, in run
File "D:\07th-mod_installer\httpGUI.py", line 667, in errorPrintingInstaller
installerFunction(args)
File "D:\07th-mod_installer\uminekoInstaller.py", line 135, in mainUmineko
downloaderAndExtractor.download()
File "D:\07th-mod_installer\common.py", line 940, in download
raise DownloadAndVerifyError("ERROR - Failed to download [{}] after {} attempts. Check aria2/7z in log for details. Installation Stopped".format(url, attempt + 1))
common.DownloadAndVerifyError: ERROR - Failed to download [https://07th-mod.com/Beato/1080p/Umineko-Graphics-1080p-v3.7z.meta4] after 3 attempts. Check aria2/7z in log for details. Installation Stopped
```

貢獻指南

這個儲存庫沒有索引到貢獻指南

研究方向

查看 common.py 中第 940 行附近的安裝程式下載處理以及 aria2 命令執行。錯誤日誌顯示 .aria2 檔案損壞。需要找到呼叫 aria2 的位置並決定修復方案:要麼偵測特定錯誤並刪除 .aria2 檔案,要麼新增面向使用者的重設按鈕。檢查 aria2 文件中處理損壞分段檔案的標誌。測試涉及模擬損壞的 .aria2 檔案並驗證安裝程式能否恢復。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
cli, tooling
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。