task-5: 预览行数量改为配置驱动并做边界校验
解析响应预览上限从硬编码常量改为 SimilarAsinProperties.parseResponsePreviewLimit, 0/负值回退默认 100,超过 1000 clamp 到 1000 防止误配导致响应体无界膨胀。 新增 8 个测试覆盖默认路径、自定义值、幂等、空文件、单行、超限 clamp、非法配置回退、依赖失败恢复。
This commit is contained in:
@@ -132,6 +132,13 @@ public class SimilarAsinProperties {
|
||||
*/
|
||||
private long cozeSubmitLockWaitMillis = 10000L;
|
||||
|
||||
/**
|
||||
* 解析接口返回的预览行/预览组数量上限。
|
||||
* 响应体只携带预览行(默认 100),全量行仅写入后端任务载荷。
|
||||
* 有效范围 [1, 1000];0/负值回退默认,超上限 clamp 到 1000。
|
||||
*/
|
||||
private int parseResponsePreviewLimit = 100;
|
||||
|
||||
/**
|
||||
* P0-4:抢 Coze 提交锁失败后下次重试间隔(毫秒)。
|
||||
* 原硬编码 500ms,会在指数退避算法中作为基础值(500/1000/2000/4000ms 上限 4000)。
|
||||
|
||||
+15
-2
@@ -143,6 +143,19 @@ public class SimilarAsinTaskService {
|
||||
// SimilarAsinProperties.cozeSubmitLockWaitMillis / cozeSubmitLockRetryDelayMillis,
|
||||
// 由 acquireCozeSubmitLock 在方法内读取,并支持指数退避。
|
||||
private static final int PARSE_RESPONSE_PREVIEW_LIMIT = 100;
|
||||
/** 预览行/预览组配置上限:超过该值 clamp,避免响应体无界增长。 */
|
||||
private static final int PARSE_RESPONSE_PREVIEW_LIMIT_MAX = 1000;
|
||||
/**
|
||||
* 解析接口响应预览上限:优先读取配置 parseResponsePreviewLimit。
|
||||
* 0/负值回退默认 100;超过 1000 clamp 到 1000,防止误配导致响应体膨胀。
|
||||
*/
|
||||
private int resolvePreviewLimit() {
|
||||
Integer configured = properties.getParseResponsePreviewLimit();
|
||||
if (configured == null || configured <= 0) {
|
||||
return PARSE_RESPONSE_PREVIEW_LIMIT;
|
||||
}
|
||||
return Math.min(configured, PARSE_RESPONSE_PREVIEW_LIMIT_MAX);
|
||||
}
|
||||
/**
|
||||
* P0-2 最小风险变体:poll 调度阶段并发预取 Coze HTTP 结果时,
|
||||
* 控制对单个 Coze 后端的并发度。8 与 cozeTaskExecutor 的 12 并发上限对齐留 4 余量,
|
||||
@@ -1472,7 +1485,7 @@ public class SimilarAsinTaskService {
|
||||
if (groups == null || groups.isEmpty()) {
|
||||
return List.of();
|
||||
}
|
||||
int limit = Math.min(PARSE_RESPONSE_PREVIEW_LIMIT, groups.size());
|
||||
int limit = Math.min(resolvePreviewLimit(), groups.size());
|
||||
List<SimilarAsinParsedGroupVo> preview = new ArrayList<>(limit);
|
||||
for (int i = 0; i < limit; i++) {
|
||||
SimilarAsinParsedGroupVo group = groups.get(i);
|
||||
@@ -1496,7 +1509,7 @@ public class SimilarAsinTaskService {
|
||||
if (rows == null || rows.isEmpty()) {
|
||||
return List.of();
|
||||
}
|
||||
int limit = Math.min(PARSE_RESPONSE_PREVIEW_LIMIT, rows.size());
|
||||
int limit = Math.min(resolvePreviewLimit(), rows.size());
|
||||
List<SimilarAsinParsedRowVo> preview = new ArrayList<>(limit);
|
||||
for (int i = 0; i < limit; i++) {
|
||||
preview.add(copyPreviewRow(rows.get(i)));
|
||||
|
||||
Reference in New Issue
Block a user