ced322123a0a23f6a6e7c20700d741e0094a9ab1
过期判定(真实缺陷): - 节点原先按内容里的 generatedAt 判过期,而 revision 是内容寻址的。内容长期不变时 主站每分钟重发同一 revision 会被判为 APPLY_OLD 直接丢弃,新鲜度永远停在首次接收 那天——于是主站明明在线且持续同步,备机仍在第 7 天开始返回 503。 - 改为按「最近一次成功接收并校验通过的主站快照时刻」判定:同 revision 重发会刷新 新鲜度;重启时以落盘内容的生成时间作为起点,避免重启即续期。 - 该时刻取自节点本地时钟、不参与签名,重放旧 revision 无法续期。 下载 HTTP 服务: - 请求行改按 ISO-8859-1 显式解码(原依赖平台默认字符集)。 - 查询串与键值拆分的 split 加 limit=2:参数值含 '='(如 base64 padding)不再被截断。 - sendFileRange 缓冲 1 KiB -> 64 KiB,降低大包下载的系统调用开销。 队列上报与通知: - server/node 通道加 volatile;主站未连接或通道失效时跳过状态上报,不再以 NPE 形式 被外层 catch 吞掉后每 5 秒刷一条 error(队列保留,等重连重放)。 - 无待上报任务时不再发送空数组。 - 已下载完成的通知移出 addToQueue 的持锁路径并改为异步,避免同步 HTTP 卡住节点主锁; 且仅生产构造启用,测试不外呼。 已下载完成的重复校验: - 归档校验结果按「路径 + 大小」缓存(大小变化或超一小时才重算),避免重连时把所有 未完成任务整包读取重算 CRC。 测试:13 项全过(新增 MultiThreadedHTTPServerTest 5 项;SubscriptionSnapshotStoreTest 增加「同 revision 重发续期」「超期未收到推送才过期」;DownloadCheckServiceTest 增加 有效归档跨重复入队判定一致)。
Description
No description provided
349 KiB
Languages
Java
100%