Skip to content

fix(online): 在线总览五路查询并发化并将聚合谓词下推存储层 - #820

Merged
AlianBlank merged 1 commit into
mainfrom
feature/auto-server-source-worker-run-12293-20261027T2330
Oct 28, 2026
Merged

AlianBlank merged 1 commit into
mainfrom
feature/auto-server-source-worker-run-12293-20261027T2330

Conversation

@AlianBlank

@AlianBlank AlianBlank commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes GFX-1093
Closes #721

Summary by CodeRabbit

  • 新功能
    • 新增在线概览统计,可按租户、应用和区服查看在线玩家、会话、队伍、对局及匹配队列情况。
    • 增加按玩法模式和区域汇总的队列深度、等待时长及近期分配票据数统计。
  • 优化
    • 概览数据改为并发获取并汇总,近期吞吐统计覆盖最近 60 秒。

OnlineOverviewService.ReviewAsync 由依次 await 全量拉取改为六路存储聚合读
Task.WhenAll 并发执行,总延迟取最大者;五个存储接口新增作用域内聚合读方法
(Presence 在线计数、Session/Party/Match 按状态分组计数、MatchTicket 按
(Mode,Region) 槽位的队列深度+等待秒合计与吞吐窗口票据计数,新 DTO
OnlineMatchQueueSlotAggregate),统计口径不变、集中在服务类文档,谓词随
契约下推存储层,服务层不再消费全量行;InMemory 实现为锁内扫描不产出实体
副本,结果与原内存聚合逐字段等价(既有总览测试全绿)。

Linear: GFX-1093
@linear-code

linear-code Bot commented Oct 27, 2026

Copy link
Copy Markdown

GFX-1093

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ae78b921-085a-43ff-b8a5-99c6d5492608
Commits

Reviewing files that changed from the base of the PR and between 2e3c01e and 5e77a5b.

Files selected for processing: 12
  • Capability/GameFrameX.Capability.Online.Foundation/Presence/IOnlinePresenceStore.cs
  • Capability/GameFrameX.Capability.Online.Foundation/Presence/InMemoryOnlinePresenceStore.cs
  • Capability/GameFrameX.Capability.Online.Foundation/Session/IOnlineSessionStore.cs
  • Capability/GameFrameX.Capability.Online.Foundation/Session/InMemoryOnlineSessionStore.cs
  • Capability/GameFrameX.Capability.Online.Match/IOnlineMatchActorStore.cs
  • Capability/GameFrameX.Capability.Online.Match/InMemoryOnlineMatchActorStore.cs
  • Capability/GameFrameX.Capability.Online.Matchmaking/IOnlineMatchTicketStore.cs
  • Capability/GameFrameX.Capability.Online.Matchmaking/InMemoryOnlineMatchTicketStore.cs
  • Capability/GameFrameX.Capability.Online.Matchmaking/OnlineMatchQueueSlotAggregate.cs
  • Capability/GameFrameX.Capability.Online.Matchmaking/Party/IOnlinePartyStore.cs
  • Capability/GameFrameX.Capability.Online.Matchmaking/Party/InMemoryOnlinePartyStore.cs
  • Capability/GameFrameX.Capability.Online.Operations/Overview/OnlineOverviewService.cs

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

存储层新增在线状态和匹配队列的聚合查询。OnlineOverviewService.ReviewAsync 改为并发读取六路聚合结果,并据此计算总览快照中的计数、重连率、队列概况和吞吐量。

Changes: 在线总览聚合

Layer / File(s) Summary
作用域状态分布统计
Capability/GameFrameX.Capability.Online.Foundation/Presence/*、Capability/GameFrameX.Capability.Online.Foundation/Session/*、Capability/GameFrameX.Capability.Online.Match/IOnlineMatchActorStore.cs、Capability/GameFrameX.Capability.Online.Match/InMemoryOnlineMatchActorStore.cs、Capability/GameFrameX.Capability.Online.Matchmaking/Party/*
新增按租户、应用和区服统计在线玩家、非终态会话、非终态队伍及活跃对局的方法。存储实现按对应状态规则过滤和分组。
匹配队列槽位聚合
Capability/GameFrameX.Capability.Online.Matchmaking/IOnlineMatchTicketStore.cs、Capability/GameFrameX.Capability.Online.Matchmaking/InMemoryOnlineMatchTicketStore.cs、Capability/GameFrameX.Capability.Online.Matchmaking/OnlineMatchQueueSlotAggregate.cs
新增按 (Mode, Region) 聚合排队票据的队列深度和等待时长,以及统计时间窗内分配所消耗票据数的方法。
总览服务并发读取
Capability/GameFrameX.Capability.Online.Operations/Overview/OnlineOverviewService.cs
ReviewAsync 并发调用六个存储聚合查询,并将状态分布和队列聚合结果合并到快照。吞吐统计使用左开右闭的最近 60 秒时间窗。

Priority: Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant Overview as OnlineOverviewService
  participant Presence as IOnlinePresenceStore
  participant Session as IOnlineSessionStore
  participant Party as IOnlinePartyStore
  participant Match as IOnlineMatchActorStore
  participant Tickets as IOnlineMatchTicketStore
  par 并发读取在线玩家数
    Overview->>Presence: CountOnlineByServerAsync
    Presence-->>Overview: 在线玩家数
  and 并发读取会话状态分布
    Overview->>Session: CountNonTerminalByScopeAsync
    Session-->>Overview: 会话状态分布
  and 并发读取队伍状态分布
    Overview->>Party: CountNonTerminalByScopeAsync
    Party-->>Overview: 队伍状态分布
  and 并发读取活跃对局状态分布
    Overview->>Match: CountActiveByScopeAsync
    Match-->>Overview: 对局状态分布
  and 并发读取排队聚合
    Overview->>Tickets: AggregateQueuedBySlotAsync
    Tickets-->>Overview: 队列深度和等待时长
  and 并发读取分配票据聚合
    Overview->>Tickets: CountAssignmentTicketsBySlotAsync
    Tickets-->>Overview: 分配票据数
  end
  Overview->>Overview: 合并聚合结果并填充快照
Loading

Possibly related PRs

Merge Risk: Minimal · up to 5e77a

The aggregation changes are mergeable after normal checks; no issue requiring a pre-merge fix was established.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed 标题准确概括了主要变更:将在线总览查询并发化,并将聚合条件下推到存储层。标题中的“五路”与变更摘要描述的六路并发读取不完全一致,但不影响标题对核心改动的表达。
Linked Issues check Passed [#721] 直接关联 issue 的编码要求有两项:(1) 并发执行查询;(2) 将聚合下推到存储层,且只返回聚合所需数据。

证据:
- 要求 (1):已满足。OnlineOverviewService.ReviewAsync(head)创建六个存储聚合任务,并通过 Task.WhenAll 并发等待。总延迟取最大值,不再是各查询之和。
- 要求 (2):已满足。以下接口新增聚合方法:…
Out of Scope Changes check Passed 变更集中于在线总览的聚合读取路径,与 #721 的范围一致。

逐项说明:
- OnlineOverviewService:改为并发聚合读取,并删除全量列表扫描与队列累加辅助逻辑。该部分直接实现 #721。
- 五个存储接口及对应 InMemory 实现:新增聚合方法。它们是存储侧下推的必要组成部分。
- OnlineMatchQueueSlotAggregate:新增 DTO,用于承载队…
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within survi…
Full details: Linked Issues check

Explanation

[#721] 直接关联 issue 的编码要求有两项:(1) 并发执行查询;(2) 将聚合下推到存储层,且只返回聚合所需数据。

证据:

  • 要求 (1):已满足。OnlineOverviewService.ReviewAsync(head)创建六个存储聚合任务,并通过 Task.WhenAll 并发等待。总延迟取最大值,不再是各查询之和。
  • 要求 (2):已满足。以下接口新增聚合方法:IOnlinePresenceStore.CountOnlineByServerAsync、IOnlineSessionStore.CountNonTerminalByScopeAsync、IOnlinePartyStore.CountNonTerminalByScopeAsync、IOnlineMatchActorStore.CountActiveByScopeAsync、IOnlineMatchTicketStore.AggregateQueuedBySlotAsync 与 CountAssignmentTicketsBySlotAsync。各方法在存储侧完成过滤与计数(InMemory 实现在全局锁内扫描)。服务层只消费计数或 OnlineMatchQueueSlotAggregate 聚合行,不再读取全量实体行。
  • 聚合结果由服务层推导:会话数与重连率来自状态分布;平均等待由 TotalWaitSeconds / TicketCount 计算。这与 issue 所述的 COUNT/SUM 需求一致。

差异说明(不构成未满足要求):

  • issue 描述五个查询。PR 实际并发六路,吞吐窗口(最近 60 秒分配票据数)为独立一路。issue 未禁止增加查询,其核心要求是并发与下推。
  • issue 举例列出 COUNT/SUM/MAX。当前实现未使用 MAX。总览快照的字段清单中未见需要 MAX 的指标,因此不视为缺失。

测试:issue 未要求新增自动化测试,因此测试不作为本次判定条件。PR 仅声明既有总览测试通过,未给出测试名称。

不确定性:仅在变更文件摘要中见到 InMemory 实现。Capability/GameFrameX.Capability.Online.Matchmaking 目录列表中仅见 InMemory 实现。其他目录中是否存在这些接口的其他存储实现,本次无法完整核实。计算结果与旧版内存聚合等价的说法,也未由测试证据直接证明。

Full details: Out of Scope Changes check

Explanation

变更集中于在线总览的聚合读取路径,与 #721 的范围一致。

逐项说明:

  • OnlineOverviewService:改为并发聚合读取,并删除全量列表扫描与队列累加辅助逻辑。该部分直接实现 #721。
  • 五个存储接口及对应 InMemory 实现:新增聚合方法。它们是存储侧下推的必要组成部分。
  • OnlineMatchQueueSlotAggregate:新增 DTO,用于承载队列深度、等待秒数与吞吐计数。它是票据聚合接口的返回类型,属于实现所需。
  • 服务文档注释:补充统计口径与六路并发说明。该变更描述实现行为,属于同一改动的一部分。

未见与 #721 无关的功能变更。吞吐窗口、在线玩家数、会话数、队伍数、对局数与队列概况均为既有总览指标。本次改动只改变其取数方式,未见新增无关指标。

限制:判定依据为变更文件摘要与 head 上的 OnlineOverviewService.cs 源码。未对每个 InMemory 聚合实现逐行核对。

Full details: Docstring Coverage

Explanation

Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 18 functions across 12 files.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

Copy link
Copy Markdown

@AlianBlank
AlianBlank merged commit bb9ef4d into main Oct 28, 2026
3 checks passed
@AlianBlank
AlianBlank deleted the feature/auto-server-source-worker-run-12293-20261027T2330 branch October 28, 2026 10:56
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.

Overview 五个查询依次 await 且全表拉取

1 participant