Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
4.2.1
-
None
-
None
Description
Consider the following.
- Client calls connect() [state=CONNECTING]
- Client calls disconnect() before connect finishes [state=DISCONNECTED]
- Client calls connect() [state=CONNECTING]
- Connect completes, client writes request [state=CONNECTED]
- channelDisconnected() from previous disconnect() called
The #channelDisconnected() call will then error out the write request. This is due to the fact that the outstanding request map belongs to the PerChannelBookieClient, rather than to the channel, even though they should belong to the socket on which they were sent out on.
The solution would be to move the completions into the ChannelHandlerContext. At the same time, we can get rid of the separate read and add lists. This information can be in the keys. Perhaps this fix can be done as part of the transaction id changes.
Attachments
Issue Links
- is related to
-
BOOKKEEPER-668 Race between PerChannelBookieClient#channelDisconnected() and disconnect() calls can make clients hang while add/reading entries in case of multiple bookie failures
- Resolved