[
https://issues.apache.org/jira/browse/THRIFT-604?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bryan Duxbury resolved THRIFT-604.
----------------------------------
Resolution: Fixed
Fix Version/s: 0.3
I just committed this.
> nonblocking_server assumes that socket.read returns exactly one message
> -----------------------------------------------------------------------
>
> Key: THRIFT-604
> URL: https://issues.apache.org/jira/browse/THRIFT-604
> Project: Thrift
> Issue Type: Bug
> Components: Library (Ruby)
> Reporter: Oliver Kennedy
> Assignee: Bryan Duxbury
> Fix For: 0.3
>
> Attachments: thrift-604.patch
>
>
> The Ruby implentation of NonblockingServer assumes that each socket read
> places at most one message into the buffer. A flurry of several messages on
> the same socket (eg, oneway methods getting called in rapid succession)
> enqueue the messages into the buffer, but IOManager reads only one message
> per cycle through the event loop. Since select() isn't aware of messages in
> the buffer, this causes the queue to steadily grow and lag further and
> further.
> Specifically, NonblockingServer::IOManager.read_connection currently has
> lines that read:
> > frame = slice_frame(@buffers[fd])
> > if frame
> > ....
> These lines should instead read:
> > while (frame = slice_frame!(@buffers[fd]))
> > ...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.