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

Jeffrey Tolar commented on THRIFT-4600:
---------------------------------------

This would be helpful for us: we're talking to a Hive cluster via a load 
balancer. There's a very high chance that subsequent TCP connections will hit a 
different backend server, which causes problems for Hive.

I believe the Hive protocol involves first calling {{{}OpenSession{}}}; that 
returns a handle that seems to be valid only on the server that created it - 
requests to other servers using that handle will fail.
Additionally, Hive makes use of signed cookies: the secret used to sign the 
cookie [is randomly generated during 
startup|https://github.com/apache/hive/blob/f06aa9541cdfc314831c2026fcddd552042e3ea4/service/src/java/org/apache/hive/service/auth/HttpAuthService.java#L48-L49],
 which means that cookies generated by one server won't be accepted by another.

I've got a monkey-patch for the Thrift client that works to allow connection 
reuse, but it'd be great if it could be addressed upstream - it looks like 
[https://github.com/apache/thrift/pull/2204] still applies cleanly. I've tested 
that patch locally, and it successfully allows connections to be reused (and 
resolves the issue we see when connections aren't reused).

> Don't close the connection in flush for python THttpClient.py
> -------------------------------------------------------------
>
>                 Key: THRIFT-4600
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4600
>             Project: Thrift
>          Issue Type: Bug
>          Components: Python - Library
>    Affects Versions: 0.11.0
>            Reporter: Finn Isaac Norris Colman
>            Priority: Major
>         Attachments: 1572.patch
>
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> In thrift/lib/py/src/transport/THttpClient.py in the flush method it closes 
> and reopens the connection:
> {noformat}
> if self.isOpen():
>     self.close()
> self.open(){noformat}
>  
> This code is closing the connection on every flush request. The flush request 
> occurs for every message send, which means that keep alive cannot be used. 
> Removing this code from flush means that keep alive can be used as the user 
> now has control over when the connection is closed.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to