- proxy/:core、plugin-api、luckperms 及其上游子模块 vendor/luckperms - messaging/、backend/ 保持在根目录(messaging 是代理与后端共用的 API) - build-logic/(原 proxy-build-logic) - testing/:smoke/ 与 benchmarks/,不进入发行物 Gradle 项目名不变(settings.gradle.kts 映射目录),任务路径与 Maven 坐标照旧。 脚本的仓库根定位、文档与记录中的链接同步更新。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.7 KiB
MoonBridge MariaDB 13.0.2 验收
环境:macOS arm64、Temurin JDK 25.0.3、Gradle 9.6.1、Node.js 26.8.1、OrbStack Docker。基于 MoonBridge 52ffadcd2649,LuckPerms 官方子模块固定为 25f223317a9ec2b6e73369126b630eca07d79506,上游源码未修改。
构建与实际驱动
新检出的代码完成 bash ./gradlew check assemble --no-daemon --max-workers=2:49 个 JUnit suite、309 个测试,0 失败、0 错误、0 跳过,包含实际分发包的显式 H2 内部验收。最终配置资源修改后再次执行相同检查与打包,成功;未改动的测试任务复用结果。
已读取实际分发插件 JAR 中的 config.yml,确认默认 storage-method: mariadb。验收使用该分发包中的真正插件,经正式 PluginHost 的独立类加载器加载 LuckPerms。插件 SHA-256:d5b8a73c795ef2e5437e0ec3ea151ba4df30d8880ca7b5448fe7fae1520c3416。
LuckPerms 原生依赖管理器实际下载、校验并重定位 mariadb-driver-3.5.2.jar。MariaDB 服务器版本为 SELECT VERSION() 返回的 13.0.2-MariaDB-ubu2604;Redis 为 7.4.11。隔离服务只监听本机回环地址,使用随机测试凭据与独立表前缀:
- MariaDB:
mariadb@sha256:d4fdec0510ad498e4f3127da30a99df3745bd6d5e611ae6ac5f76403d9284a8d - Redis:
redis@sha256:c6eabf748fc7a61dbb5a705c78bcf3d6377b1127a97d0ce965c11c44ba46896f
实际服务验收
同一 JVM 内的两个独立 PluginHost、插件副本、类加载器和数据目录连接真正的 MariaDB/Redis。两个实例先加载相同 UUID,随后由 A 修改权限并等待 B 的已加载缓存更新,没有调用手工同步命令。SQL 模式使用 messaging-service: auto,日志确认选择原生 SQL messenger;Redis 模式使用 Redis messenger,权限仍写入 MariaDB。
| 场景 | 结果 |
|---|---|
| 跨实例授权、显式拒绝、撤销、组继承与个人覆盖 | 两种 messenger 均 PASS |
| 不同 server 上下文、临时权限到期 | 两种模式均 PASS |
| 关闭插件后以新类加载器读取持久化数据 | 两种模式均 PASS |
| MariaDB 停机:已有缓存仍可查,新 UUID 准备失败且结果为 UNAVAILABLE | PASS |
| MariaDB 恢复:新连接加载成功,新的权限写入可读 | PASS,首次恢复尝试成功 |
| Redis 停机:A 写入 MariaDB,B 缓存没有即时收到修改 | PASS |
| Redis 两个订阅恢复后:新变更同步到 B,重启 B 后可读取停机期间和恢复后的两项权限 | PASS |
最终数据库查询确认 mariadb_lp_user_permissions 有 6 行、redis_lp_user_permissions 有 5 行,恢复后的权限及 Redis 停机期间写入的权限均在 MariaDB 中。两轮验收均返回 PERMISSION_NETWORK_ACCEPTANCE_PASS,退出码 0;插件关闭后等待 500ms,没有未捕获后台异常。预期停机期间的连接失败日志不属于未捕获异常。
本机原始证据保存在忽略的构建目录:
build/permission-network/permission-network-sql-18344677148309595004/build/permission-network/permission-network-redis-16265096492059865389/build/permission-network-sql-outage.log、build/permission-network-redis-outage.logbuild/permission-services/database-evidence.txt、build/mariadb-check.log
已删除本轮两个容器和数据卷、移除凭据文件,并核验保留配置的密码已脱敏。复现入口见 MariaDB 文档。
证据边界
本轮验证实际插件包与真实数据库服务,不包含新的游戏客户端、Uranium/Bukkit 联测、Web Editor 往返、远程 TLS 部署或生产数据迁移。既有 MySQL/H2/客户端记录保留为历史证据。Redis pub/sub 不补发断线窗口通知,不能据此宣称故障期间所有实例保持一致。