[ 
https://issues.apache.org/jira/browse/THRIFT-1754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13858951#comment-13858951
 ] 

Branden Visser commented on THRIFT-1754:
----------------------------------------

In transport.js, the receiver is stateful, but invokes the user-provided 
callback in the same process tick as a very state-sensitive loop. If your 
provided callback throws an exception, it can permanently (I think) damage the 
state of the receiver until your process is restart.

It is recommended that if an exception bubbles to the top of a process you 
bounce your process due to issues that hide in nodejs modules like this.

I think this code could be more robust if it executed the callback in a 
process.nextTick to ensure bad consumer code doesn't impact its state.


> RangeError in buffer handling
> -----------------------------
>
>                 Key: THRIFT-1754
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1754
>             Project: Thrift
>          Issue Type: Bug
>          Components: Node.js - Library
>    Affects Versions: 0.9
>         Environment: Ubuntu 12.04, Node.js v0.8.8
>            Reporter: Vesa Poikajärvi
>            Priority: Minor
>
> I have a Node.js service that connects to multiple Thrift servers (using 
> TFramedTransport with C++ servers and TBufferedTransport with Python 
> servers). Every now and then for reasons rather hard to track the following 
> happens:
> {noformat}
> buffer.js:242
>       this.parent = new SlowBuffer(this.length);
>                     ^
> RangeError: length > kMaxLength
>     at new Buffer (buffer.js:242:21)
>     at Socket.TFramedTransport.receiver 
> (/home/me/my_service/node_modules/thrift/lib/thrift/transport.js:59:17)
>     at Socket.EventEmitter.emit (events.js:88:17)
>     at TCP.onread (net.js:395:14)
> {noformat}
> Node module is extracted from Thrift 0.9 tarball due to THRIFT-1637. And as 
> mentioned, I cannot really tell what triggers the behavior. When running in 
> development mode I use [Forever|https://github.com/nodejitsu/forever] to 
> relaunch a crashed process, and when it first crashes because of this it will 
> keep relaunching a few times, maybe ten or so (I connect to the services upon 
> startup), and then it starts working again.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to