Skip to content

[Task][P2] 为持久运行提供带采集新鲜度的状态聚合指标 #331

Closed

Description

@Aias00

独立交付与输入输出

已授权的持久 Run/Task 状态读取能力 → 当前状态存量、采集时间及采集失败状态。

验收条件

  • 区分进程 transition counter、当前持久状态 gauge 和精确审计历史;重启不把进程计数当成持久存量。
  • 通过中立有界聚合读取契约消费存储,具体 SQL/Redis 实现在可选适配侧;Core 不直接全表扫描或引入 JDBC/Redis。
  • 成功采集才更新 snapshot 时间,失败保留旧快照并标明过期;不能用失败时的零值伪装积压清空。
  • 明确多副本语义:同一共享存储全局快照不能直接求和;分片模式另声明作用域和聚合方法。标签消费 [Task][P1] 约束动态 Agent 与插件指标的标签基数和注册生命周期 #318,不用 run/tenant 任意值扩张。
  • reference 测试 CREATED→RUNNING→终态后的存量、采集失败后的新鲜度、进程重启及两实例共享快照;提供正确多副本查询示例。

非目标与任务归属

父任务 #306。不实现全新审计库、看板平台或持久状态机;#317 继续负责进程执行指标,#236 负责运行事件,存储生产集成可后续分仓实施。

参考依据及限制

参考本地 stream-agent 当前工作区:TaskMetrics.java 的 Snapshot/collect,docs/observability.md 对共享数据库副本取 max 及汇总时间的说明。

该工作区 HEAD 为 b2cc81ac95a5d7ce9aadf7f4867fbd87764b54b1,相关内容含未提交/未跟踪修改,不能使用该 SHA 宣称上述文件已发布。本次仅静态查看源码和测试,没有执行验证;本单是 ARGI 能力演进,不是已复现 BUG,也不直接复制平台实现。

ARGI 分析基线 04c5686;优先复用已有契约,独立 Agent/Workflow 不依赖 Graph/Loop,不强制一任务一模块。破坏性变化需说明收益、较小替代方案、影响、目标版本和迁移;离线、真实服务及跨 JVM 保证分别验收。

Activity

  1. konlue commented on Nov 8, 2026

    @konlue
    Contributor

    您好,我想认领 #331。

    方案(契约 + Memory 参考 + 契约测试,全部落在 argi-runtime-core 的 run/metrics/ 新包)

    • PersistedRunStateReader:中立有界聚合读取契约——一次 PersistedRunStateQuery(RunNamespace 作用域 + 关注的 RunState 子集)换回按状态计数的聚合结果,实现侧用自己的存储计算(SQL GROUP BY / Redis 计数器),Core 不做全表扫描、不引 JDBC/Redis/micrometer;SQL/Redis 实现按 persistence-ownership 边界放适配仓。
    • PersistedRunStateSnapshot:按状态存量 + collectedAt(只有成功采集才推进)+ 显式 stale 标记与 staleSince(首次失败时刻)——采集失败保留旧值并标过期,不用零值伪装积压清空。
    • FreshnessGatedRunStateAggregator:新鲜度闸门——成功推进快照;失败保留最后已知值;新建聚合器无快照(current() 为 empty),进程重启不能拿进程计数或零值冒充持久存量(进程 transition counter 属 [Task][P1] 统一运行、步骤与调用 attempt 的指标统计语义 #317,运行事件属 [Feature] 完善中立执行事件及可恢复的前端运行视图 #236,审计历史不在此重建,包 javadoc 声明三类测量的区分)。
    • 多副本语义:共享存储的两实例观察到同一快照(相加会双倍计数,禁止);分片模式每实例独占 namespace,全局 = 跨 namespace 求和,由消费侧声明——javadoc + 测试承载。
    • 标签有界:维度只有 RunState 值,run/tenant 只作作用域参数(遵循 [Task][P1] 约束动态 Agent 与插件指标的标签基数和注册生命周期 #318 的低基数原则)。issue 的 CREATED 在中立词汇中为 PENDING。

    测试

    沿用 RunStoreContractTest 抽象契约模式:PersistedRunStateReaderContractTest(抽象,4 用例:生命周期 PENDING→RUNNING→SUCCEEDED 存量、状态子集过滤、空 store 全零、namespace 即作用域)+ MemoryRunStoreReaderTest(Memory 参考实现直跑);FreshnessGatedRunStateAggregatorTest 8 用例(注 Clock 驱动时间):首采前无快照、成功采集推进时间、失败保留旧值标 stale(值不变非零、staleSince 取首次失败)、恢复后恢复 fresh、首次失败无历史时传播异常、重启后从 store 重建、共享存储同快照不求和、分片求和示例。

  2. added a commit that references this issue on Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions