fix: 完善自动导入异常中断与恢复

- 自动导入基础设施异常触发批次熔断,保留完整日志并输出安全错误信息

- 增加恢复令牌与租约围栏、无文档失败项重建及消息退避机制

- 前端展示中断状态并在状态请求失败后自动恢复轮询

- 补充批次中断迁移、配置与并发异常路径测试
This commit is contained in:
2026-08-10 11:26:00 +08:00
parent 54d85ae460
commit bae7b18977
33 changed files with 3725 additions and 221 deletions

View File

@@ -59,4 +59,35 @@ describe('page data recovery', () => {
expect(get).toHaveBeenCalledTimes(2);
expect(wrapper.text()).not.toContain('数据加载失败,请重试');
});
it('coalesces repeated reloads while a page request is still running', async () => {
let resolveInitialRequest: (value: {
data: { records: never[]; totalRow: number };
}) => void = () => {};
const initialRequest = new Promise<{
data: { records: never[]; totalRow: number };
}>((resolve) => {
resolveInitialRequest = resolve;
});
const get = vi
.fn()
.mockReturnValueOnce(initialRequest)
.mockResolvedValue({ data: { records: [], totalRow: 0 } });
const wrapper = mount(PageData, {
global: {
directives: { loading: {} },
},
props: { pageUrl: '/page', requestClient: { get } },
});
const firstReload = (wrapper.vm as any).reload({ silent: true });
const secondReload = (wrapper.vm as any).reload({ silent: true });
expect(get).toHaveBeenCalledTimes(1);
resolveInitialRequest({ data: { records: [], totalRow: 0 } });
await Promise.all([firstReload, secondReload]);
await flushPromises();
expect(get).toHaveBeenCalledTimes(2);
});
});