Browse Source

HUE-8505 [core] Close impala session on logout

Chris Conner 7 years ago
parent
commit
a9a5bd4

+ 10 - 0
desktop/core/src/desktop/auth/views.py

@@ -48,6 +48,7 @@ from desktop.settings import LOAD_BALANCER_COOKIE
 from hadoop.fs.exceptions import WebHdfsException
 from useradmin.models import get_profile
 from useradmin.views import ensure_home_directory, require_change_password
+from notebook.connectors.base import get_api
 
 LOG = logging.getLogger(__name__)
 
@@ -202,6 +203,15 @@ def dt_logout(request, next_page=None):
     'operationText': 'Logged out user: %s' % username
   }
 
+  # Close Impala session on logout
+  session_app = "impala"
+  if request.user.has_hue_permission(action='access', app=session_app):
+    session = {"type":session_app,"sourceMethod":"dt_logout"}
+    try:
+      get_api(request, session).close_session(session)
+    except Exception, e:
+      LOG.warn("Error closing Impala session: %s" % e)
+
   backends = get_backends()
   if backends:
     for backend in backends:

+ 8 - 0
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -206,6 +206,14 @@ class HS2Api(Api):
   def close_session(self, session):
     app_name = session.get('type')
     session_id = session.get('id')
+    source_method = session.get("sourceMethod")
+
+    if not session_id:
+      session = Session.objects.get_session(self.user, application=app_name)
+      decoded_guid = session.get_handle().sessionId.guid
+      session_decoded_id = "%x:%x" % struct.unpack(b"QQ", decoded_guid)
+      if source_method == "dt_logout":
+        LOG.debug("Closing Impala session id %s on logout for user %s" % (session_decoded_id, self.user.username))
 
     query_server = get_query_server_config(name=app_name)