Repository navigation
Releases: jayantTang/DSH_Mobile
Releases · jayantTang/DSH_Mobile
Release list
relay-v0.1.6 · CORS 修复与中转健壮性加固
变更
- 修复(P1):CORS 中间件在响应写出后才设置
Access-Control-Allow-Origin,net/http 在 WriteHeader 时已快照响应头,真实连接上该头丢失,跨域浏览器客户端读不到任何 JSON 响应(单测用 ResponseRecorder 长期漏检)。黑盒套件新增经真实 HTTP 往返的 ACAO 断言防回归。 - 队列字节上限从「读-判-加」改为 CAS 预留:多设备并发向同一电脑链路入队时不再瞬时越过
--queue-bytes。 - 关停时显式冲盘用量账本:SIGTERM 等收尾超时的场景下,内存账本尾巴(最多 30 秒用量)不再丢失。
- 流式帧丢弃从只进计数器改为阈值告警:单连接累计丢满 100 帧记一条
backpressure:stream事故(只含链路与计数,不含帧内容),静默丢帧在运维上可见。 - 监控告警的类别与详情改用路由模板(原来用原始路径),与文档承诺的日志隐私口径对齐。
- 错误出口收敛:
busy→503+Retry-After与 5xx 信封从 httpapi/files/feedback 三份同构实现收进apierr一处;设备 Bearer 鉴权两份副本下沉到authn。 - 清理:删除一次性基准工具
cmd/driverbench;device-hygiene提示改指 Go 的dsh-relay purge;Makefile新增test-blackbox(黑盒契约对本二进制,118 项)与soak-smoke两个闸门目标;notify_push_e2e的四处定时等待改为轮询。
影响范围
- 只升级中转服务端二进制(
/opt/dsh-relay-go);协议帧、关闭码、SQLite schema、admin 子命令的 JSON 输出均不变,App 与连接器无需升级。 - 对外行为的唯一变化:非预检响应现在真实携带
Access-Control-Allow-Origin: *(原本就应该有)。 - 数据库无迁移;回滚 = 换回原二进制并
systemctl restart dsh-relay-go。
升级方式
按 relay-go/deploy/README.md §6 的更新路径:归档旧二进制 → 安装新二进制与 build.json → systemctl restart dsh-relay-go → 健康检查。本次发布已按此完成。
已知问题
- L2 渠道(干净 Linux 容器跑 relay 黑盒)未跑——本机不启用容器运行时;黑盒新增断言已在 L1 对本二进制实测通过,CI 口径由下次 CI 运行覆盖。
- RSS 在 1000 设备档(182 MB)仍高于 Python 版(132 MB),线上规模余量充足,暂不处理。
- 流式帧在极端背压下按设计丢弃(保连接),客户端若无缺号重传会缺数据;本次已加阈值告警便于发现。
relay-v0.1.5 · 修复 Go 日志解析、矩阵行首写星期
变更
- 修复:Go 中转的日志行在
journalctl输出里带时间戳前缀,报告侧按行首判断 JSON 导致一条都认不出——切到 Go 之后日报矩阵只剩 Python 阶段没闭合的旧 span,看起来「今天整天只有 3 个账号」。 - 活跃矩阵行首改为「周六 10-24」,周末行加左侧灰条与浅底,工作日/周末的差别不必自己数日期。
影响范围
- 只影响
ops-report的hourlyActivity与日报渲染;协议、数据库、App 行为不变。 - 需要部署
relay/admin.py(日报取数入口);Go 服务二进制不变,不必重启。
升级方式
scp relay/admin.py root@$DSH_OTA_HOST:/opt/dsh-relay/admin.py已知问题
- Go 在电脑断线时只给设备发 HostStatus,不逐台写
device detached:这类设备的 span 会延伸到窗口末端,矩阵偏高;等下次改 hub 日志时补。 - 今天尚未到来的小时与「没人用」都是浅灰格,只能靠悬停区分。
relay-v0.1.4 · 14 天活跃矩阵 + Go 日志解析修复
变更
- 日报的活跃分布图从「过去 72 小时」改成「14 天 × 24 小时」矩阵(每行一天、24 列一小时),窗口按本地日起算,行列是整齐的 24×14。
- 修复:Go 中转上线后,活跃重建仍在按 Python 的文本日志格式匹配,导致这张图在 Go 上恒为空;现在同时认 JSON 行(
deviceId/agentId字段)与旧的文本行。 - 日志单元改为列表:默认同时读
dsh-relay与dsh-relay-go,跨切换点的时间窗不会再缺一半。
影响范围
- 仅影响运维报告(
ops-report)与日报渲染;连接协议、数据库结构、App 行为不变。 - 数据库
user_version不变(8),不需迁移。 - 旧版本 Python
admin.py与 Go 版并存时,两边输出口径一致(windowDays/windowHours/buckets)。
升级方式
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" \
-o relay-go/bin/dsh-relay-linux-amd64 ./cmd/dsh-relay
scp relay-go/bin/dsh-relay-linux-amd64 root@$DSH_OTA_HOST:/tmp/dsh-relay-new
ssh root@$DSH_OTA_HOST 'install -m 0755 /tmp/dsh-relay-new /opt/dsh-relay-go/bin/dsh-relay && systemctl restart dsh-relay-go'Python 侧 relay/admin.py 同步部署到 /opt/dsh-relay/admin.py(日报取数入口,无需重启服务)。
已知问题
- 日报矩阵里「今天尚未到来的小时」与「有数据但没人用」都是同一种浅灰格,只能从悬停提示区分。
- 活跃重建依赖
journalctl:读不到日志时buckets为null,该图整块跳过(不编数字);14 天窗口每次生成约 4 秒。
relay v0.1.3:心跳截止放宽到 60 秒
relay v0.1.3:心跳截止放宽到 60 秒
变更
- 心跳等待时限从 10 秒放宽到 60 秒(ping 仍每 30 秒一次)。原来的 10 秒低于连接器 20 秒心跳间隔,空闲链路每 20 秒必被误判一次:2026-10-24 一天产生 200+ 次
heartbeat timed out(单个连接器 140 次)和多条 flap 告警。 - 60 秒是连接器心跳的 3 倍,与连接器自身
pongTimeoutMs=60s同口径;Python 版(aiohttpheartbeat=30.0)的实际容忍是 45 秒。 - README 心跳口径与默认值回归测试同步更新。
影响范围
- 仅中转服务端。iOS App 与连接器无需升级;协议、端点、关闭码不变。
- 死链回收上限从约 30 秒变为约 90 秒(30 秒 ping + 60 秒等待),对移动端可接受。
升级方式
- 生产已于 2026-10-24 13:16 CST 部署
relayVersion=go-0.1.3(commitfd24db6),Caddy 与数据库未动。 - 上一版二进制与
build.json留档在/opt/dsh-relay-go/bin/versions/20261024.1316/;回滚时替换回去并systemctl restart dsh-relay-go。
已知问题
- 部署后约 6 分钟观察窗口内
heartbeat timed out为 0、flap 告警为 0;此前每 2–5 分钟必现。单次入站停滞超过 90 秒的弱网链路仍会断开重连,属预期。
relay v0.1.2
relay-v0.1.2
变更
- 中转由 Python 实现切换为 Go 单二进制,2026-10-24 03:21 CST 起承担生产流量
(relayVersion=go-0.1.2)。对外协议、端点、错误码与关闭码不变。 - 修正未验证退避期间的 429 原因与计数。
- 补齐 APNs 在线 notify 路径测试,并在 sandbox 真发一次。
- 修复转发快路径未替换落单代理项。
影响范围
- iOS App 与连接器无需升级;端口、路径与 SQLite schema(
user_version=8)不变。 - Python 版仍可直接读取 Go 版写出的数据库,回滚不需要迁移。
- 部署形态不变:单进程
127.0.0.1:8787,Caddy 反代/dsh-link/*。
升级方式
将 Linux 二进制安装到 /opt/dsh-relay-go/bin/dsh-relay,写入同目录 build.json,
安装 dsh-relay-go.service 后执行:
/opt/dsh-relay-go/deploy/switch.sh --to-go
回滚:
/opt/dsh-relay-go/deploy/switch.sh --to-python
本次生产指纹:commit cb8639e,二进制 sha256
548943866e4c0057a1211d15345c5f3201e51f7071490c64a1dd38ea29f37427。
已知问题
- APNs 只在 sandbox 环境验证,production 环境未验。
- 1000 设备档 RSS 约 182 MB,高于 Python 版的 132 MB;当前线上规模余量充足。
- Python 实现保留为回滚目标与黑盒契约基线,尚未退役。