Done. Created http://issues.apache.org/jira/browse/THRIFT-637


On Fri, Nov 27, 2009 at 8:42 AM, Todd Lipcon <[email protected]> wrote:
> Hi Arvind,
>
> Can you open a JIRA for this bug if you haven't already?
>
> Thanks,
> -Todd
>
> On Thu, Nov 26, 2009 at 2:41 PM, Arvind Sundararajan <[email protected]>
> wrote:
>>
>> On Thu, Nov 26, 2009 at 2:28 PM, Arvind Sundararajan <[email protected]>
>> wrote:
>> > I am encountering a bug while using TNonblockingServer on a service
>> > with both oneway requests and synchronous requests.
>> >
>> > The implementation seems to start constructing a message in response
>> > to a oneway request and then gives up once it realizes it is a oneway
>> > request
>> >
>> >  def ready(self, all_ok, message):
>> >
>> > ....
>> >        self.message = struct.pack('!i', len(message)) + message
>> >        if len(message) == 0:
>> >            # it was a oneway request, do not write answer
>> >            self.status = WAIT_LEN
>> >
>> > On subsequent requests, I then get
>> >
>> > [TNonblockingServer.py :113 ] - 2009-11-26 13:58:01,829 - ERROR -
>> > can't read frame size from socket
>> >
>> > because len(self.message) == 4 and _read_len is very defensive about
>> > reading only the exact right amount of data from the socket.
>> >
>> > My patch is simple and seems to fix the problem:
>> >
>> >> svn diff
>> > Index: lib/py/src/server/TNonblockingServer.py
>> > ===================================================================
>> > --- lib/py/src/server/TNonblockingServer.py     (revision 884669)
>> > +++ lib/py/src/server/TNonblockingServer.py     (working copy)
>> > @@ -182,6 +182,7 @@
>> >         if len(message) == 0:
>> >             # it was a oneway request, do not write answer
>> >             self.status = WAIT_LEN
>> > +            self.message = ''
>> >         else:
>> >             self.status = SEND_ANSWER
>> >         self.wake_up()
>> >
>> > Could someone work with me to commit this?
>> >
>> > Arvind.
>> >
>
>

Reply via email to