Skip to content

Commit 6648906

Browse files
authored
[fix][CGS][entrance] parallelgroup cache not updated when entrance instance goes offline (#966)
* #AI commit# 开发阶段: * 修复异常场景,当Entrance实例offline后,ParallelGroup缓存未更新,导致用户任务并发数计算错误 * #AI commit# 开发阶段: * 修复异常场景,当Entrance实例offline后,ParallelGroup缓存未更新,导致用户任务并发数计算错误 * #AI commit# 开发阶段: * 增加异常保护 * #AI commit# 开发阶段: * 修复异常场景,当Entrance实例offline后,ParallelGroup缓存未更新,导致用户任务并发数计算错误
1 parent 0f69c9f commit 6648906

18 files changed

Lines changed: 5368 additions & 0 deletions

docs/dev-1.19.0-entrance-fix/designs/entrance-offline-cache-fix_设计.md

Lines changed: 2030 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
# language: zh-CN
2+
Feature: 修复Entrance Offline后Group缓存未更新的Bug
3+
修复多实例环境下Entrance offline后Group缓存未主动失效导致并发数计算错误的问题
4+
5+
Background:
6+
Given 系统已启动
7+
And 已部署4个Entrance实例
8+
And 数据库连接正常
9+
And RPC服务可用
10+
And 配置用户并发数为100
11+
12+
Rule: Bug复现 - 记录修复前的错误行为
13+
14+
@bug @reproduction @skip
15+
Scenario: 复现Bug - Entrance offline后并发数未更新
16+
Given 集群有4个Entrance实例: A, B, C, D
17+
And Entrance C上有正在运行的任务
18+
And 已提交任务建立了Group缓存(并发数为25)
19+
When 管理员将Entrance C标记为offline
20+
And 用户提交新任务到Entrance A
21+
Then 系统仍按4个实例计算并发数(25个槽位)
22+
And 任务应该提交失败
23+
And 错误信息应该包含"并发数已满"
24+
25+
@bug @reproduction @skip
26+
Scenario: 复现Bug - 缓存50分钟后自动更新
27+
Given 集群有4个Entrance实例: A, B, C, D
28+
And Entrance C已offline超过50分钟
29+
And Group缓存已过期
30+
When 用户提交新任务
31+
Then 系统按3个实例计算并发数(33个槽位)
32+
And 任务应该成功提交
33+
34+
Rule: Bug修复 - 验证修复后的正确行为
35+
36+
@bugfix @critical @smoke
37+
Scenario: 修复后 - Entrance offline时缓存立即清除
38+
Given 集群有4个Entrance实例: A, B, C, D
39+
And Entrance C上有正在运行的任务
40+
And 已提交任务建立了Group缓存(并发数为25)
41+
When 管理员将Entrance C标记为offline
42+
Then 所有Entrance实例应该收到广播消息
43+
And 各实例的Group缓存应该在5秒内清除
44+
And 缓存清除应该被记录到日志
45+
46+
@bugfix @critical
47+
Scenario: 修复后 - offline后新任务并发数正确
48+
Given 集群有4个Entrance实例: A, B, C, D
49+
And Entrance C已offline
50+
And Group缓存已清除
51+
When 用户提交新任务到Entrance A
52+
Then 系统按3个实例计算并发数(33个槽位)
53+
And 任务应该成功提交
54+
And 不应该出现并发数已满错误
55+
56+
@bugfix
57+
Scenario Outline: 不同数量的Entrance offline后并发数计算正确
58+
Given 集群有4个Entrance实例
59+
And <offline_count>个Entrance实例已offline
60+
And Group缓存已清除
61+
When 用户提交新任务
62+
Then 系统按<online_count>个实例计算并发数
63+
And 每个实例并发数应该是<parallelism_per_instance>
64+
65+
Examples:
66+
| offline_count | online_count | parallelism_per_instance |
67+
| 1 | 3 | 33 |
68+
| 2 | 2 | 50 |
69+
| 3 | 1 | 100 |
70+
71+
Rule: 回归验证 - 确保修复不影响其他场景
72+
73+
@regression @critical
74+
Scenario: 正常情况下任务提交仍正常
75+
Given 集群有4个Entrance实例: A, B, C, D
76+
And 所有实例都在线
77+
When 用户提交新任务
78+
Then 系统按4个实例计算并发数(25个槽位)
79+
And 任务应该成功提交
80+
And 行为应该与修复前完全一致
81+
82+
@regression
83+
Scenario: 实例频繁上下线场景
84+
Given 集群有4个Entrance实例
85+
When Entrance C offline后立即online
86+
And 再次offline
87+
And 用户提交新任务
88+
Then 缓存应该正确更新
89+
And 并发数应该反映当前在线实例数量
90+
And 不应该出现异常或错误日志
91+
92+
@regression
93+
Scenario: 多个实例同时offline
94+
Given 集群有4个Entrance实例: A, B, C, D
95+
When 同时将Entrance C和Entrance D标记为offline
96+
Then 所有实例应该收到2条广播消息
97+
And Group缓存应该被清除2次
98+
And 并发数应该按2个实例计算(50个槽位)
99+
100+
@regression @critical
101+
Scenario: 广播失败不影响offline流程
102+
Given 集群有4个Entrance实例
103+
And Entrance D不可达(RPC通信失败)
104+
When 管理员将Entrance C标记为offline
105+
Then Entrance A和B应该收到广播消息
106+
Entrance D通信失败应该被记录到ERROR日志
107+
And Entrance C的offline流程应该成功完成
108+
And 不应该抛出异常或中断
109+
110+
Rule: 性能验证 - 验证修复的性能影响
111+
112+
@performance
113+
Scenario: 广播延迟测试
114+
Given 集群有4个Entrance实例
115+
When 触发Entrance offline广播
116+
Then 所有实例应该在5秒内收到广播
117+
And 广播总耗时应该小于5秒
118+
119+
@performance
120+
Scenario: 缓存清除性能测试
121+
Given 缓存中有5000个Group
122+
When 执行缓存清除操作
123+
Then 清除操作应该在100ms内完成
124+
And CPU使用率不应该显著增加
125+
126+
@performance
127+
Scenario: 广播期间任务提交不受影响
128+
Given 集群有4个Entrance实例
129+
When 正在发送广播消息
130+
And 同时有用户提交新任务
131+
Then 任务提交应该正常处理
132+
And 响应时间不应该明显增加
133+
134+
Rule: 监控与日志验证
135+
136+
@monitoring
137+
Scenario: 广播发送日志记录
138+
Given 集群有4个Entrance实例
139+
When 触发Entrance offline广播
140+
Then 日志应该记录"Sending broadcast to clear Group cache"
141+
And 日志应该包含offline实例信息
142+
143+
@monitoring
144+
Scenario: 广播接收日志记录
145+
Given 集群有4个Entrance实例
146+
When 触发Entrance offline广播
147+
Then 每个实例应该记录"Received broadcast to clear Group cache"
148+
And 日志应该记录缓存清除操作
149+
150+
@monitoring
151+
Scenario: 广播失败日志记录
152+
Given 集群有4个Entrance实例
153+
And 某个实例不可达
154+
When 触发Entrance offline广播
155+
Then 应该记录"Broadcast to <instance> failed"的ERROR日志
156+
And 日志应该包含失败原因

0 commit comments

Comments
 (0)