You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WARN [auth] no cache service registered — rate-limit counters use a per-process in-memory
store; a multi-node deployment needs a shared cache (Redis) to enforce limits
globally (ADR-0069 D2)
TL;DR
pnpm dev(showcase)每次启动都报一条"没有 cache 服务,限流退化成进程内内存计数器,多节点部署需要 Redis"。但CacheServicePlugin就在 21 毫秒后注册好了,而且它本来就在已加载插件列表里。和 #4771 是同一类问题(校验/告警跑在提供方注册之前),但在另一个子系统,修法也不同,所以单开。
现场
启动摘要里的已加载插件:
证据
--log-level info的时间戳:WARN [auth] no cache service registered04:28:04.527INFO Service 'cache' registered {"service":"cache"}04:28:04.548INFO CacheServicePlugin: registered memory cache adapter04:28:04.548差 21ms。
为什么值得修
告警本身的建议("多节点需要 Redis")在这个语境下是错的指路:这个部署确实配了 cache 插件,缺的不是 Redis,是"auth 在 cache 注册完之前就问了"。照着这条日志去接 Redis,接完还是会看到同一条 warn。
同 #4771:真正没配 cache 服务的部署会得到一模一样的一条 warn,两种情况无法区分。
修法(择一)
kernel:ready,那时服务注册表才是完整的 —— 与 bug(service-automation): flow 节点类型校验跑在插件贡献的执行器注册之前 —— 每个 ADR-0019 approval flow 都被误报「will fail at execution time」 #4771 同一思路。start()时一次性拍板并缓存"没有 cache",而是在真正用限流计数器时再取一次服务。这样也顺带修掉真正的功能退化 —— 目前即使 cache 后来注册上了,auth 这一侧是不是还捏着启动时那个进程内存储?这一点我没验证,但如果是,那就不只是日志误报,而是限流真的没用上共享 cache。值得在修的时候一并确认。复现
rm -rf examples/app-showcase/.objectstack && pnpm dev看时序:
objectstack dev --seed-admin --log-level info,对比上表两个时间戳。