fix(update): 修复华为上传URL NPE及提交批次超时限制
- submitToHuawei: urlList 字段做防御性处理,找不到时降级到 data, 同时输出实际响应内容方便排查 - executeSubmitAsync: allOf.join() 改为 get(20, MINUTES), 防止大文件上传卡住时批次线程永久阻塞 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
1a18925034
当前提交
ac35f7e2fb
@ -228,7 +228,15 @@ public class StoreSubmissionService {
|
|||||||
}))
|
}))
|
||||||
.toList();
|
.toList();
|
||||||
if (!futures.isEmpty()) {
|
if (!futures.isEmpty()) {
|
||||||
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
|
try {
|
||||||
|
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))
|
||||||
|
.get(20, java.util.concurrent.TimeUnit.MINUTES);
|
||||||
|
} catch (java.util.concurrent.TimeoutException te) {
|
||||||
|
log.error("Store submit batch timed out after 20 minutes for version={}", versionId);
|
||||||
|
futures.forEach(f -> f.cancel(true));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Store submit batch wait error for version={}: {}", versionId, e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
recordBatchEvent(v, versionId, batchId, "STORE_SUBMIT_BATCH_END", startedAt, Map.of(
|
recordBatchEvent(v, versionId, batchId, "STORE_SUBMIT_BATCH_END", startedAt, Map.of(
|
||||||
"targets", targets,
|
"targets", targets,
|
||||||
@ -285,8 +293,12 @@ public class StoreSubmissionService {
|
|||||||
|
|
||||||
// 3. Request upload URL
|
// 3. Request upload URL
|
||||||
Map<String, Object> uploadUrlResp = huaweiGetUploadUrl(clientId, token, hwAppId, file);
|
Map<String, Object> uploadUrlResp = huaweiGetUploadUrl(clientId, token, hwAppId, file);
|
||||||
@SuppressWarnings("unchecked")
|
List<Map<String, Object>> urlList = asMapList(uploadUrlResp.get("urlList"));
|
||||||
Map<String, Object> urlInfo = (Map<String, Object>) ((List<?>) uploadUrlResp.get("urlList")).get(0);
|
if (urlList.isEmpty()) urlList = asMapList(uploadUrlResp.get("data"));
|
||||||
|
if (urlList.isEmpty()) {
|
||||||
|
throw new RuntimeException("Huawei: upload url response missing urlList, response=" + summarizeMap(uploadUrlResp));
|
||||||
|
}
|
||||||
|
Map<String, Object> urlInfo = urlList.get(0);
|
||||||
String uploadUrl = (String) urlInfo.get("url");
|
String uploadUrl = (String) urlInfo.get("url");
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, String> uploadHeaders = (Map<String, String>) urlInfo.get("headers");
|
Map<String, String> uploadHeaders = (Map<String, String>) urlInfo.get("headers");
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户