42921ba97b074fed958a72732cffcf16ec2bb296
缺陷修复: - GalleryUtil.parseGid 只捕 IndexOutOfBoundsException:非数字段抛 NumberFormatException、 link 为 null 抛 NPE,都会穿透成 500(按链接查询直接把用户输入喂进来)。现统一返回 null, 由调用方转成业务失败。 - 图片索引缓存不是整体生效:先写 gidToKey 再逐页写 ImageKeyCache,中途失败会留下 「gidToKey 命中但页 key 缺失」的半截缓存,后续请求直接返回已缓存而永远取不到图。 现任何异常都回滚已写入部分,并识别历史半截缓存自动重建。 - 全站请求日志把 AuthCode 明文记入 INFO,改为只记 present/absent。 - selectEnableAuthCode 的 SQL 与全量查询完全相同(都无 isEnable 条件),停用用户的 授权码刷新后仍放行,isEnable 形同虚设;补齐条件并允许 null 按默认 true 处理。 - /validate 手工 String.format 拼 JSON,用户名含引号或反斜杠会产出非法 JSON, 前端 JSON.parse 失败;改用 ObjectMapper 组装。 性能与并发: - Netty IO 线程不再直接做 JDBC:节点上报的任务状态改由单线程顺序执行器落库与推送, 既不打乱「按上报顺序覆盖状态」的语义,也不阻塞心跳与响应。 - 取订阅不再等待第三方归属地查询:先以 unknown 落库并立即分发,归属地由后台线程补齐。 - 搜索关键词与分页参数按 UTF-8 编码,&、#、中文不再破坏上游查询串。 - selectAllGallery 的收藏标记由 O(n*m) 嵌套循环改为集合查找。 - 复用 CustomUtil.objectMapper(8 处 new ObjectMapper);gid2MpvKey 改为有界 LRU(2048); 缩略图清理排序不再每次比较都重读文件属性;FileDownload 关闭响应流,避免大文件下载的 临时文件堆积到 Full GC;移除从未使用的 downloadThread 线程池。 测试:431 项全过(新增索引回滚、半截缓存重建、用户名特殊字符、畸形链接查询、 搜索编码、分发不等待定位、批量收藏标记等用例;异步状态处理用例加 awaitStatusApplied 屏障保持断言确定性)。
Description
No description provided
7.8 MiB
Languages
Java
99.2%
PLpgSQL
0.5%
Shell
0.3%