-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
type: bugA general bugA general bug
Milestone
Description
Bug Report
FIFO order is not respected in DefaultEndpoint#notifyChannelActive()
Current Behavior
A later write from the same user thread may be sent first
@Test
void writeShouldGuaranteeFIFOOrder() {
sut.write(Collections.singletonList(new Command<>(CommandType.SELECT, new StatusOutput<>(StringCodec.UTF8))));
sut.registerConnectionWatchdog(connectionWatchdog);
doAnswer(i -> sut.write(new Command<>(CommandType.AUTH, new StatusOutput<>(StringCodec.UTF8)))).when(connectionWatchdog)
.arm();
when(channel.isActive()).thenReturn(true);
sut.notifyChannelActive(channel);
DefaultChannelPromise promise = new DefaultChannelPromise(channel, ImmediateEventExecutor.INSTANCE);
when(channel.writeAndFlush(any())).thenAnswer(invocation -> {
if (invocation.getArguments()[0] instanceof RedisCommand) {
queue.add((RedisCommand) invocation.getArguments()[0]);
}
if (invocation.getArguments()[0] instanceof Collection) {
queue.addAll((Collection) invocation.getArguments()[0]);
}
return promise;
});
assertThat(queue).hasSize(2).first().hasFieldOrPropertyWithValue("type", CommandType.SELECT);
assertThat(queue).hasSize(2).last().hasFieldOrPropertyWithValue("type", CommandType.AUTH);
}
// your stack trace here;
Input Code
Input Code
// your code here;
Expected behavior/code
assertThat(queue).hasSize(2).first().hasFieldOrPropertyWithValue("type", CommandType.SELECT);
assertThat(queue).hasSize(2).last().hasFieldOrPropertyWithValue("type", CommandType.AUTH);
Environment
- Lettuce version(s): [e.g. 5.0.0.RELEASE, 4.2.2.Final]
- Redis version: [e.g. 4.0.9]
Possible Solution
Additional context
Metadata
Metadata
Assignees
Labels
type: bugA general bugA general bug