[
https://issues.apache.org/jira/browse/CASSANDRA-14507?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jason Brown resolved CASSANDRA-14507.
-------------------------------------
Resolution: Feedback Received
Thanks for reporting this, [~sbtourist]. I am working on a solution that is
hand-in-hand with CASSANDRA-14503. Thus, I'll move the conversation and work
over there.
> OutboundMessagingConnection backlog is not fully written in case of race
> conditions
> -----------------------------------------------------------------------------------
>
> Key: CASSANDRA-14507
> URL: https://issues.apache.org/jira/browse/CASSANDRA-14507
> Project: Cassandra
> Issue Type: Bug
> Components: Streaming and Messaging
> Reporter: Sergio Bossa
> Priority: Major
>
> The {{OutboundMessagingConnection}} writes into a backlog queue before the
> connection handshake is successfully completed, and then writes such backlog
> to the channel as soon as the successful handshake moves the channel state to
> {{READY}}.
> This is unfortunately race prone, as the following could happen:
> 1) One or more writer threads see the channel state as {{NOT_READY}} in
> {{#sendMessage()}} and are about to enqueue to the backlog, but they get
> descheduled by the OS.
> 2) The handshake thread is scheduled by the OS and moves the channel state to
> {{READY}}, emptying the backlog.
> 3) The writer threads are scheduled back and add to the backlog, but the
> channel state is {{READY}} at this point, so those writes would sit in the
> backlog and expire.
> Please note a similar race condition exists between
> {{OutboundMessagingConnection#sendMessage()}} and
> {{MessageOutHandler#channelWritabilityChanged()}}, which is way more serious
> as the channel writability could frequently change, luckily it looks like
> {{ChannelWriter#write()}} never gets invoked with {{checkWritability}} at
> {{true}} (so writes never go to the backlog when the channel is not writable).
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]