Skip to content

fix(platform): 修复生命周期终态与任务清理#715

Open
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-platform-lifecycle-cleanup
Open

fix(platform): 修复生命周期终态与任务清理#715
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-platform-lifecycle-cleanup

Conversation

@zhibeigg

@zhibeigg zhibeigg commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

原有问题

平台生命周期和执行器缺少明确的终态,异步启动、关闭与任务句柄绑定之间可能发生倒退或遗漏清理:

  • Application 未完整触发 ACTIVE,关闭期间仍可能收到迟到的启用回调,生命周期从 DISABLE 倒退到 ENABLE/ACTIVE。
  • Application、Velocity、AfyBroker 执行器在停止后仍可能接收任务,延迟绑定的句柄和异常也可能丢失。
  • Velocity 异步事件/关闭流程没有统一的 Future 终态,监听器失败时调用方可能无法观察。
  • Bukkit 命令注销只删除部分映射,主名、别名、namespace 或内部绑定可能残留。
  • Application 命令递归注销、控制台关闭和资源流/URI 处理存在遗漏。

典型触发场景与后果

  • 插件快速启用后立即禁用,或启动 Future 在关闭后才完成:已进入 DISABLE 的插件再次触发 ENABLE/ACTIVE,清理后的资源被重新使用。
  • 插件禁用同时提交延迟/重复任务:任务在停止后继续执行,线程池无法关闭或访问已释放对象。
  • Velocity 事件监听器异步失败:事件 Future 永久等待,关闭流程被卡住且异常被吞掉。
  • reload 后以相同主名或 alias 重新注册命令:旧映射仍指向失效插件,出现命令冲突、重复执行或无法重注册。

本 PR 修改

  • 补齐 Application 的 ACTIVE 生命周期,并以单向终态状态机阻止关闭期间发生生命周期倒退;停止标记下仍允许执行 DISABLE 清理。
  • 为 Application、Velocity、AfyBroker 执行器增加停止终态、幂等取消、延迟句柄绑定、停止后拒绝、异常报告和线程池关闭。
  • 使用 Velocity EventTask 串联异步关闭,保留旧同步入口,并为自定义事件增加 callAsync() 以暴露完成和异常状态。
  • PluginCommand 身份清理 Bukkit 主名、别名、namespace 及内部绑定,同名重注册前移除旧映射。
  • 修复 Application 命令递归注销、控制台终态及资源流/URI 路径关闭。

修改目的

让所有平台生命周期只向前推进,并确保插件停止后不再产生新任务或残留注册;异步事件和关闭流程的异常必须能够被调用方观察。

兼容性与行为变化

  • 保留既有公开同步入口和 JVM 签名。
  • Application 会补发此前缺失的 ACTIVE 生命周期。
  • 插件停止后提交的新任务会被拒绝,而不是静默遗留。
  • 命令注销现在会完整清除该命令的全部映射。

验证

  • ./gradlew :common:test :platform:platform-application:test :platform:platform-bukkit-impl:test :platform:platform-velocity:test :platform:platform-velocity-impl:test :platform:platform-afybroker:test --rerun-tasks --no-parallel
  • ./gradlew :common:build :platform:platform-application:build :platform:platform-bukkit-impl:build :platform:platform-velocity:build :platform:platform-velocity-impl:build :platform:platform-afybroker:build --no-parallel
  • 关键公开 JVM 构造器、字段和方法签名检查
  • git diff --check upstream/dev/6.3.0...HEAD

Refs #703

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.

1 participant