Skip to content

CloudStorage 0.2.2 · 面板正常重启检查点修复

Pre-release
Pre-release

Choose a tag to compare

@Moeary Moeary released this 25 Oct 02:17

CloudStorage v0.2.2 · Paper 1.21.1 / Java 21

修复 MCSM 等面板直接启动 JAR 时,正常 stop、世界保存完成后仍反复冻结云仓的问题。客户端打印机 1.1.5-cloud.1+1.21.1 无需更新。

先看升级说明

旧版已经冻结的仓库,不会仅凭 pending=0 自动解锁。

  1. 正常停服,联合备份 plugins/CloudStorage/ 与全部世界/玩家数据。
  2. 用附件 cloud-storage-0.2.2.jar 替换旧 CloudStorage JAR,同一服务端只保留一个版本,再启动。
  3. 若旧状态仍显示冻结,先 cs status、cs recover list。核对旧停服日志和近期物品转移后,若无待处理转移且实际数量一致,由管理员执行 一次 cs recover unlock,再 cs status 确认。
  4. 此后正常 stop 和启动会使用新退出凭据,不需每次手动解锁,也不需在 MCSM 中安装 Python 或修改启动命令。

存在 PENDING、强杀或存盘故障时应审计,不可随意选择 before/after。不要删除数据库、手改 active 或设置开服自动解冻。

修复方式

  • onDisable 仍只准备停机候选,不提前清除 dirty。
  • 在 Paper 完成玩家/世界 I/O、报告完整正常退出后,JVM 关闭钩子写入与 session 绑定的原子退出凭据;数据库仍不在钩子中解冻。
  • 下次启动再核验旧进程身份已退出、凭据与候选/会话一致且无 PENDING,才识别为正常停机。
  • 强杀、插件已卸载但世界尚未保存完就中断、热卸载、Paper 异常退出、旧/坏凭据与未完成转移继续冻结。
  • 保留默认全服共享仓、普通玩家共享仓/接口权限、每 UUID 输入 5+输出 5、中文搜索及按需打印协议。

实际验证

  • 27 项 Java 测试、5 项 Python 测试通过,包含独立子 JVM 凭据与存活进程/旧凭据/PENDING 拒绝。
  • 与正式服相同的 Paper 1.21.1 build 116:连续三轮直接启动/正常停服,实际 JVM 退出码均为 0,未使用外部 finalizer,未再误冻结。
  • Paper build 133 完整回归通过:普通玩家共享仓/接口 5+5、物品守恒、精准放置、两次独立正常重启、强杀、onDisable 后保存未完成时强杀、热卸载、异常退出和初始化失败保护。测试启动器不再偷偷调用外部 finalizer。

测试为隔离的真实 Java/Paper 进程,模拟面板直接启动方式;并未远程修改正式服务器。完整记录见 testing-0.2.2.md。本版本仍作为测试发布,复杂投影整体建造及大型服性能须继续实测。

附件包含已验证的生产 JAR、对应提交源码及 SHA256SUMS.txt;生产 JAR 不含测试 probe,源码包保留测试源码,不包含世界、账号或数据库。凭据文件 storage.sqlite.shutdown.properties 应与数据库一样受服务器文件权限保护,切勿自行伪造。