现象
默认配置(reorderOnLoad: true)且存在至少一个已置顶会话时,打开 web 界面后客户端会无限循环调用 POST /api/workspace/insertSessionBefore。短短几秒内产生数万条请求,且全部以 net::ERR_INSUFFICIENT_RESOURCES 失败。
复现步骤
- 在
dsh web profile 中安装 dsh-session-pin(保持默认配置)。
- 置顶至少一个会话。
- 打开 web 界面(无需任何操作),观察 Network:
insertSessionBefore 无限重复且全部失败(net::ERR_INSUFFICIENT_RESOURCES)。
原因分析
lib/client.js 监听会话/工作区列表变化,触发 reapplyOrder() → moveToTop() → workspaces.insertSessionBefore()。
服务端把重排结果持久化后,会向客户端广播一次列表变化事件,客户端收到后再次进入 reapplyOrder() → 形成无限乒乓。
仅靠 reorderOnLoad 门控无法阻止:该开关只跳过首次加载,之后的任意列表变化仍会再次进入重排。
预期行为
仅在置顶顺序确实发生变化时才发起重排;并且不应被"自己刚发起的、已被服务端确认的重排"再次触发(例如:调用前先比较当前顺序,或忽略与本次移动对应的顺序回显事件)。
临时规避
把 reorderOnLoad 设为 false 可停止循环(关闭自动重排后,置顶仅保留标记功能)。
现象
默认配置(
reorderOnLoad: true)且存在至少一个已置顶会话时,打开 web 界面后客户端会无限循环调用POST /api/workspace/insertSessionBefore。短短几秒内产生数万条请求,且全部以net::ERR_INSUFFICIENT_RESOURCES失败。复现步骤
dsh webprofile 中安装 dsh-session-pin(保持默认配置)。insertSessionBefore无限重复且全部失败(net::ERR_INSUFFICIENT_RESOURCES)。原因分析
lib/client.js监听会话/工作区列表变化,触发reapplyOrder()→moveToTop()→workspaces.insertSessionBefore()。服务端把重排结果持久化后,会向客户端广播一次列表变化事件,客户端收到后再次进入
reapplyOrder()→ 形成无限乒乓。仅靠
reorderOnLoad门控无法阻止:该开关只跳过首次加载,之后的任意列表变化仍会再次进入重排。预期行为
仅在置顶顺序确实发生变化时才发起重排;并且不应被"自己刚发起的、已被服务端确认的重排"再次触发(例如:调用前先比较当前顺序,或忽略与本次移动对应的顺序回显事件)。
临时规避
把
reorderOnLoad设为false可停止循环(关闭自动重排后,置顶仅保留标记功能)。