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();
|
||||
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(
|
||||
"targets", targets,
|
||||
@ -285,8 +293,12 @@ public class StoreSubmissionService {
|
||||
|
||||
// 3. Request upload URL
|
||||
Map<String, Object> uploadUrlResp = huaweiGetUploadUrl(clientId, token, hwAppId, file);
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> urlInfo = (Map<String, Object>) ((List<?>) uploadUrlResp.get("urlList")).get(0);
|
||||
List<Map<String, Object>> urlList = asMapList(uploadUrlResp.get("urlList"));
|
||||
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");
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> uploadHeaders = (Map<String, String>) urlInfo.get("headers");
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户