alibaba / alibaba/otter

MemoryStageController的initSelect的并行度初始化代码是不是有问题?

Open
#699 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
8.1k
Forks
2.5k
PR merge metrics
No merged PRs in 30d

Description

运行单元测试com.alibaba.otter.shared.arbitrate.setl.event.memory.MemoryArbitrateEventTest中的test_all()测试,selectEvent会在第二次await时hang,看了一下代码com.alibaba.otter.shared.arbitrate.impl.setl.memory.MemoryStageController中的initSelect方法是否有问题?
private synchronized void initSelect() {
// 第一次/出现ROLLBACK/RESTART事件,删除了所有调度信号后,重新初始化一下select
// stage的数据,初始大小为并行度大小
// 后续的select的reply队列变化,由load single时直接添加
ReplyProcessQueue queue = replys.get(StageType.SELECT);
int parallelism = ArbitrateConfigUtils.getParallelism(getPipelineId());
while (parallelism-- > 0 && queue.size() <= parallelism) {
queue.offer(atomicMaxProcessId.incrementAndGet());
}
}
注释中说是初始化队列大小为并行度大小,但是那行while的两个and条件会导致queue的大小为parallelism的一半吧,这个地方逻辑有问题吗?还是本身就是初始化为parallelism的一半?

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by running com.alibaba.otter.shared.arbitrate.setl.event.memory.MemoryArbitrateEventTest.test_all() and inspect MemoryStageController.initSelect(). Trace how parallelism and queue.size() change through the loop and the second await. Done means the initialization behavior matches the documented parallelism and the test no longer hangs.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
distributed-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.