#699·otter

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

Author: lambdaooCreated Jan 5, 2019Updated Jun 14, 2025

运行单元测试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的一半?