Skip to content

Releases: jayantTang/DSH_Mobile

relay-v0.1.6 · CORS 修复与中转健壮性加固

Choose a tag to compare

@jayantTang jayantTang released this 24 Oct 08:15

变更

  • 修复(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 日志解析、矩阵行首写星期

Choose a tag to compare

@jayantTang jayantTang released this 24 Oct 07:15

变更

  • 修复: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 日志解析修复

Choose a tag to compare

@jayantTang jayantTang released this 24 Oct 06:40

变更

  • 日报的活跃分布图从「过去 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 秒

Choose a tag to compare

@jayantTang jayantTang released this 24 Oct 05:22

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 版(aiohttp heartbeat=30.0)的实际容忍是 45 秒。
  • README 心跳口径与默认值回归测试同步更新。

影响范围

  • 仅中转服务端。iOS App 与连接器无需升级;协议、端点、关闭码不变。
  • 死链回收上限从约 30 秒变为约 90 秒(30 秒 ping + 60 秒等待),对移动端可接受。

升级方式

  • 生产已于 2026-10-24 13:16 CST 部署 relayVersion=go-0.1.3(commit fd24db6),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

Choose a tag to compare

@jayantTang jayantTang released this 24 Oct 03:58

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 实现保留为回滚目标与黑盒契约基线,尚未退役。