[ 
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.

Reply via email to