[Bug] 安装整合包时若选用BMCLAPI且刚好遇到返回错误代码的对应文件的节点会导致整合包安装直接失败
Open
Nobody has claimed this yet.
bug
- Dominant language
- Java
- Stars
- 10.1k
- Forks
- 934
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 82
Description
问题描述 | Bug Description
安装整合包时,若选用BMCLAPI,而且刚好遇到分配的节点没有对应文件,或者返回错误代码(403、500等),会导致安装直接失败。
虽然理论上讲应该是对应节点的问题,但HMCL遇到这种情况,是直接取消安装(安装整合包半天结果突然就取消了...啥都没装上,还是挺抓狂的)
启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File
[@.task.AsyncTaskExecutor.lambda$executeNormalTask$31/TRACE] Task failed: org.jackhuang.hmcl.task.Task$StagesHintTask
java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2070)
at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2065)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:571)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:2064)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1634)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:144)
at org.jackhuang.hmcl.util.io.HttpRequest.getStringWithRetry(HttpRequest.java:228)
at org.jackhuang.hmcl.util.io.HttpRequest.access$100(HttpRequest.java:46)
at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.getString(HttpRequest.java:141)
at org.jackhuang.hmcl.util.Lang.lambda$wrap$3(Lang.java:301)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2013)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:531)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:307)
at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:155)
at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:134)
at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:143)
... 8 more
[12:39:14] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$29/TRACE] Task finished: 安装整合包
[12:39:14] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$29/TRACE] Task finished: org.jackhuang.hmcl.task.Task$StageTask
[12:39:14] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$31/TRACE] Task failed: org.jackhuang.hmcl.mod.curse.CurseInstallTask
java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2070)
at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2065)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:571)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:2064)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1634)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:144)
at org.jackhuang.hmcl.util.io.HttpRequest.getStringWithRetry(HttpRequest.java:228)
at org.jackhuang.hmcl.util.io.HttpRequest.access$100(HttpRequest.java:46)
at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.getString(HttpRequest.java:141)
at org.jackhuang.hmcl.util.Lang.lambda$wrap$3(Lang.java:301)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2013)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:531)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:307)
at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:155)
at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:134)
at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:143)
... 8 more
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the failing path in org.jackhuang.hmcl.util.io.HttpRequest and NetworkUtils, then trace how CurseInstallTask handles the download error. Reproduce a BMCLAPI response such as HTTP 403 or 500 and verify that installation does not immediately fail when the assigned node lacks the file or returns an error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100