Skip to content

fix: 整合 Issue #703 稳定性修复并发布 6.3.1#720

Draft
zhibeigg wants to merge 15 commits into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-version
Draft

fix: 整合 Issue #703 稳定性修复并发布 6.3.1#720
zhibeigg wants to merge 15 commits into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-version

Conversation

@zhibeigg

@zhibeigg zhibeigg commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

原有问题

Issue #703 的审计结果分布在核心异步、数据库、平台适配、Minecraft 功能模块和构建发布等多个区域。单独修复其中一处不能证明这些改动串联后仍然兼容,也不能形成一个可直接进行真实环境测试的补丁版本。

原基线主要存在以下风险:

  • Future、协程和平台任务在异常或取消后可能永久 pending,后台任务和资源无法结束。
  • 数据库/Redis 在并发写入、启动、重连和关闭时可能重复建行、旧值覆盖新值、误关共享资源或泄漏连接。
  • Bukkit/Folia、Velocity、Bungee、Application、AfyBroker、Hytale 的线程、生命周期、命令和对象包装存在平台语义偏差。
  • Porticus 分包、导航平滑、配置泛型、SQL 方言、JEXL、语言重载和颜色解析在边界输入下可能产生错误结果。
  • Maven POM/主制品可能不完整,且使用新 JDK 编译时无法阻止 Java 9+ API 进入 Java 8 制品。

典型触发场景与后果

  • 插件启停、热重载或异步动作抛错:Future 永久等待、生命周期倒退、任务在线程池中残留,服务器无法完整卸载插件。
  • 多线程或多节点同时写玩家数据,Redis 正在重连时关服:重复记录、数据回档、连接池耗尽、关闭后重新连接。
  • Folia 上从异步回调操作 Player/Inventory/World:触发线程检查异常、背包竞态、区域 tick 阻塞或物品部分丢失。
  • 大型跨服消息、复杂地形寻路、嵌套配置或连续语言重载:消息无法重组、路径穿墙/越界、配置类型错误、旧语言条目残留。
  • 下游从 Maven 引用构件或在 Java 8 服务端运行新 JDK 编译产物:缺少传递依赖、拿到空/错误 JAR,或运行时出现缺类和缺方法错误。

本 PR 修改

修改目的

提供一个包含 Issue #703 全部修复、已经过跨 PR 冲突处理和全仓验收的单一 6.3.1 候选版本,方便维护者和测试人员直接部署,而不需要手工组合多个分支。

兼容性与行为变化

  • 保持公开签名和二进制兼容,不引入破坏性 API 变更。
  • 不新增阻塞等待;数据库与 Redis I/O 保持异步。
  • Bukkit/Folia 线程敏感操作改为在正确的全局、区域或实体线程执行。
  • 失败路径由静默挂起改为可观察的异常/取消终态。
  • 版本仅递增补丁位:6.3.0 -> 6.3.1
  • 当前保持 Draft,作为统一真实环境测试与最终审查入口。

整合来源

自动化验证

  • ./gradlew test --rerun-tasks --continue --stacktrace --no-parallel
    • 163 个任务全部重新执行并成功。
  • ./gradlew build --continue --stacktrace --no-parallel
    • 457 个任务完成,verifyJava8CompatibilityverifyPublishingModel 通过。
  • ./gradlew publishToMavenLocal -Dmaven.repo.local=<isolated-m2> --stacktrace --no-parallel
    • 57 个有效 publication 全部发布成功,纯聚合与空占位项目未发布。
  • 隔离仓库制品核验
    • 逐一校验 57 组 POM、Shadow 主制品和 sources 制品。
    • 扫描 9257 个常规 class,最高 class major 为 52(Java 8)。
    • platform-*-implcommon-reflex 正常发布。
    • HikariCP 以 POM compile 依赖暴露,未被合并进数据库 Shadow 主制品。
  • 玩家数据库集成冲突回归测试通过。

真实环境测试建议

  • Bukkit/Paper/Folia:插件启停、调度路由、菜单/背包、计分板及 NMS 消息。
  • Velocity/Bungee:命令注册与注销、事件 Future、跨服 Porticus 大消息与断线场景。
  • Hytale/AfyBroker/Application:生命周期、命令权限/补全、任务取消与关闭。
  • MySQL/SQLite/H2:并发首次写、延迟保存、旧库重复数据迁移和插件关闭落库。
  • Redis 单机/集群:认证失败、断线重连、订阅、关闭期间迟到连接与资源回收。
  • Maven 消费端:从隔离仓库解析常用模块并在 Java 8 环境进行加载 smoke。

Closes #703

zhibeigg added 15 commits July 14, 2026 05:46
确保 Future 异常可观察,消除递归删除死锁并可靠关闭文件监听与加载资源。
确保链任务和重复调度在失败或取消时终止,避免 Future 与协程永久挂起。
确保动作异常与取消能够结束上下文并回收运行任务,同时序列化远程读取并将计分板更新切回平台线程。
保证事件监听、类访问器缓存与延迟集合并发安全,并让命令树只构建一次且隔离每次执行结果。
确保数据源、连接、客户端和线程资源在启动失败、重连及并发关服场景下可靠释放,并补充相关回归测试。
通过复合唯一索引、兼容迁移和原子 upsert 阻止重复记录,并收敛缓存延迟写与调度竞态以确保最新值最终落库。
保留声明集合语义并按数据库方言生成合法 SQL,同时确保 JEXL 配置变更后重建引擎。
避免无上下文同步任务错误落到全局区域线程,并让 UI、虚拟背包与 NMS 操作按玩家或区域线程执行;同时保证物品数量不足时不发生部分扣除。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 修复全仓审计确认的稳定性与兼容性缺陷

1 participant