[ 
https://issues.apache.org/jira/browse/THRIFT-2046?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chaoyu Tang updated THRIFT-2046:
--------------------------------

    Attachment: THRIFT-2046_2.patch

[~tlipcon] Thanks for the review and comments. I have tried to address what you 
raised: 
1) have the unit associated with requestTimeout. I did it just like the code 
has done for the stopTimeout. also I changed the existing constant one-second 
sleep to  a binary exponential back off algorithm to space out the retry.
3) use client.close() instead
As for 2): currently the server is using SynchronousQueue which works best to 
the direct handoff queuing strategy. If BlockQueue implementation is used, the 
server queuing behavior might change a little. For example, If corePoolSize or 
more threads are running, the Executor always prefers queuing a request rather 
than adding a new thread (see ThreadPoolExecutor.java). I think it might not be 
ideal  to a server, right?

> The worktask can be timed out in TThreadPoolServer (Java) when the max# 
> thrift thread is reached
> ------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-2046
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2046
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Java - Library
>    Affects Versions: 0.9
>            Reporter: Chaoyu Tang
>         Attachments: THRIFT-2046.patch, THRIFT-2046_1.patch, 
> THRIFT-2046_2.patch
>
>
> Once the max# of thrift threads is reached, a new task (workprocess) is 
> attempted to be executed in an infinite loop, then the client may hang.
> An improvement is to introduce a task timeout. after a certain time, if the 
> task is still not got queued to be executed. It will be invalidated.



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

Reply via email to