fix(aihr): sweep upload queue across tenants
This commit is contained in:
+2
-1
@@ -371,10 +371,11 @@ public class AihrUploadQueueService {
|
|||||||
private void sweepAndTrigger() {
|
private void sweepAndTrigger() {
|
||||||
try {
|
try {
|
||||||
ensureTable();
|
ensureTable();
|
||||||
|
// Worker 清扫没有登录线程,必须跨租户处理卡死条目;领取与加工仍按条目租户隔离。
|
||||||
int reset = jdbcTemplate.update("""
|
int reset = jdbcTemplate.update("""
|
||||||
update aihr_knowledge_upload_item
|
update aihr_knowledge_upload_item
|
||||||
set status = 0, update_time = now()
|
set status = 0, update_time = now()
|
||||||
where tenant_id = ? and status = 1
|
where status = 1
|
||||||
and (
|
and (
|
||||||
(update_time < (now() - interval %d minute) and file_name not regexp '\\\\.(mp4|mov|avi|mkv|webm|m4v)$')
|
(update_time < (now() - interval %d minute) and file_name not regexp '\\\\.(mp4|mov|avi|mkv|webm|m4v)$')
|
||||||
or update_time < (now() - interval %d minute)
|
or update_time < (now() - interval %d minute)
|
||||||
|
|||||||
+3
@@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
@Tag("dev")
|
@Tag("dev")
|
||||||
@@ -23,5 +24,7 @@ class AihrUploadQueueServiceTest {
|
|||||||
assertTrue(code.contains("p.tenant_id = i.tenant_id"));
|
assertTrue(code.contains("p.tenant_id = i.tenant_id"));
|
||||||
assertTrue(code.contains("TenantHelper.dynamic(tenantId"));
|
assertTrue(code.contains("TenantHelper.dynamic(tenantId"));
|
||||||
assertTrue(code.contains("new ItemRow(rs.getString(\"tenant_id\")"));
|
assertTrue(code.contains("new ItemRow(rs.getString(\"tenant_id\")"));
|
||||||
|
assertTrue(code.contains("where status = 1\n and ("));
|
||||||
|
assertFalse(code.contains("where tenant_id = ? and status = 1\n and ("));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,3 +100,4 @@
|
|||||||
- 2026-07-14 异步上传队列租户边界修复:请求入队、查询和重试按当前登录租户;后台领取按队列条目租户跨租户扫描,文件加工通过 `TenantHelper.dynamic` 进入对应租户,ZIP 子条目、失败回写和卡死清扫均沿用条目租户;新增队列结构回归测试。AIHR 全量测试 50/50、`ruoyi-admin` 跳测试打包通过;正式多租户文件上传、向量写入和跨租户隔离仍需测试环境回归。
|
- 2026-07-14 异步上传队列租户边界修复:请求入队、查询和重试按当前登录租户;后台领取按队列条目租户跨租户扫描,文件加工通过 `TenantHelper.dynamic` 进入对应租户,ZIP 子条目、失败回写和卡死清扫均沿用条目租户;新增队列结构回归测试。AIHR 全量测试 50/50、`ruoyi-admin` 跳测试打包通过;正式多租户文件上传、向量写入和跨租户隔离仍需测试环境回归。
|
||||||
- 2026-07-14 目录导入异步任务租户边界修复:`startLocalImportTask` 捕获当前租户,并用 `TenantHelper.dynamic` 包住整个后台导入 worker,任务进度、取消状态、OSS/片段/向量写入不再因脱离登录线程回退到 `000000`;新增异步上下文回归测试。正式多租户目录导入仍需测试环境验证。
|
- 2026-07-14 目录导入异步任务租户边界修复:`startLocalImportTask` 捕获当前租户,并用 `TenantHelper.dynamic` 包住整个后台导入 worker,任务进度、取消状态、OSS/片段/向量写入不再因脱离登录线程回退到 `000000`;新增异步上下文回归测试。正式多租户目录导入仍需测试环境验证。
|
||||||
- 2026-07-14 线上只读复核:生产根站点、`/h5/`、租户列表和员工首页 API 均返回 200;线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`,本地最新租户边界修复提交 `6ec17726`、`c95cb1ff` 尚未发布。本次未修改生产环境,发布前需先做测试环境跨租户上传/目录导入回归。
|
- 2026-07-14 线上只读复核:生产根站点、`/h5/`、租户列表和员工首页 API 均返回 200;线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`,本地最新租户边界修复提交 `6ec17726`、`c95cb1ff` 尚未发布。本次未修改生产环境,发布前需先做测试环境跨租户上传/目录导入回归。
|
||||||
|
- 2026-07-14 异步队列清扫修复:上传队列 worker 的卡死任务清扫改为跨租户扫描,避免无登录线程回退到 `000000` 后只清理默认租户;实际加工、失败回写和 SOP 处理仍按队列条目租户隔离。`AihrUploadQueueServiceTest` 与 AIHR 全量测试 51/51 通过;双租户上传/目录导入仍需测试环境回归。
|
||||||
|
|||||||
Reference in New Issue
Block a user