소스 검색

[HUE-6090] Hue to do a keep alive on idle sessions to HiveServer2

This patch has been contributed by Christopher Conner.

In this patch we are adding socket.SO_KEEPALIVE attribute to the establish socket.

SO_KEEPALIVE will keep idle connection active such that firewall in between does not kill the connection. This fix enables Hue do keep alive on the thrift sessions to HS2 and Impala.
Chris Conner 8 년 전
부모
커밋
6148e7d
2개의 변경된 파일12개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      desktop/core/ext-py/thrift-0.9.1/src/transport/TSSLSocket.py
  2. 8 0
      desktop/core/ext-py/thrift-0.9.1/src/transport/TSocket.py

+ 4 - 0
desktop/core/ext-py/thrift-0.9.1/src/transport/TSSLSocket.py

@@ -86,6 +86,10 @@ class TSSLSocket(TSocket.TSocket):
         sock_family, sock_type = res[0:2]
         ip_port = res[4]
         plain_sock = socket.socket(sock_family, sock_type)
+        # check and turn on TCP Keepalive
+        sockprops = plain_sock.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE)
+        if (sockprops == 0):
+          sockprops = plain_sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
         self.handle = ssl.wrap_socket(plain_sock,
                                       ssl_version=self.SSL_VERSION,
                                       do_handshake_on_connect=True,

+ 8 - 0
desktop/core/ext-py/thrift-0.9.1/src/transport/TSocket.py

@@ -83,6 +83,10 @@ class TSocket(TSocketBase):
       res0 = self._resolveAddr()
       for res in res0:
         self.handle = socket.socket(res[0], res[1])
+        # check and turn on TCP Keepalive
+        sockprops = self.handle.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE)
+        if (sockprops == 0):
+          sockprops = self.handle.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
         self.handle.settimeout(self._timeout)
         try:
           self.handle.connect(res[4])
@@ -167,6 +171,10 @@ class TServerSocket(TSocketBase, TServerTransportBase):
           os.unlink(res[4])
 
     self.handle = socket.socket(res[0], res[1])
+    # check and turn on TCP Keepalive
+    sockprops = self.handle.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE)
+    if (sockprops == 0):
+      sockprops = self.handle.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
     self.handle.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     if hasattr(self.handle, 'settimeout'):
       self.handle.settimeout(None)