Exemplo n.º 1
0
    def create_session(self, lang='hive', properties=None):
        application = 'beeswax' if lang == 'hive' or lang == 'llap' else lang

        if has_session_pool():
            session = Session.objects.get_tez_session(
                self.user, application, MAX_NUMBER_OF_SESSIONS.get())
        elif not has_multiple_sessions():
            session = Session.objects.get_session(self.user,
                                                  application=application)
        else:
            session = None

        reuse_session = session is not None
        if not reuse_session:
            db = dbms.get(self.user,
                          query_server=get_query_server_config(
                              name=lang, connector=self.interpreter))
            session = db.open_session(self.user)

        response = {'type': lang, 'id': session.id}

        if not properties:
            config = None
            if USE_DEFAULT_CONFIGURATION.get():
                config = DefaultConfiguration.objects.get_configuration_for_user(
                    app=lang, user=self.user)

            if config is not None:
                properties = config.properties_list
            else:
                properties = self.get_properties(lang)

        response['properties'] = properties
        response['configuration'] = json.loads(session.properties)
        response['reuse_session'] = reuse_session
        response['session_id'] = ''

        try:
            decoded_guid = session.get_handle().sessionId.guid
            response['session_id'] = unpack_guid(decoded_guid)
        except Exception as e:
            LOG.warn('Failed to decode session handle: %s' % e)

        if lang == 'impala' and session:
            http_addr = _get_impala_server_url(session)
            response['http_addr'] = http_addr

        return response
Exemplo n.º 2
0
    def create_session(self, lang='hive', properties=None):
        application = 'beeswax' if lang == 'hive' or lang == 'llap' else lang

        uses_session_pool = has_session_pool()
        uses_multiple_sessions = has_multiple_sessions()

        if lang == 'impala':
            uses_session_pool = False
            uses_multiple_sessions = False

        try:
            if uses_session_pool:
                session = Session.objects.get_tez_session(
                    self.user, application, MAX_NUMBER_OF_SESSIONS.get())
            elif not uses_multiple_sessions:
                session = Session.objects.get_session(self.user,
                                                      application=application)
            else:
                session = None
        except Exception as e:
            if 'Connection refused' in str(
                    e) or 'Name or service not known' in str(e):
                LOG.exception(
                    'Connection being refused or service is not available in either session or in multiple sessions'
                    '- HA failover')
                reset_ha()

        reuse_session = session is not None
        if not reuse_session:
            db = dbms.get(self.user,
                          query_server=get_query_server_config(
                              name=lang, connector=self.interpreter))
            try:
                session = db.open_session(self.user)
            except Exception as e:
                if 'Connection refused' in str(
                        e) or 'Name or service not known' in str(e):
                    LOG.exception(
                        'Connection being refused or service is not available in reuse session - HA failover'
                    )
                    reset_ha()

        response = {'type': lang, 'id': session.id}

        if not properties:
            config = None
            if USE_DEFAULT_CONFIGURATION.get():
                config = DefaultConfiguration.objects.get_configuration_for_user(
                    app=lang, user=self.user)

            if config is not None:
                properties = config.properties_list
            else:
                properties = self.get_properties(lang)

        response['properties'] = properties
        response['configuration'] = json.loads(session.properties)
        response['reuse_session'] = reuse_session
        response['session_id'] = ''

        try:
            decoded_guid = session.get_handle().sessionId.guid
            response['session_id'] = unpack_guid(decoded_guid)
        except Exception as e:
            LOG.warning('Failed to decode session handle: %s' % e)

        if lang == 'impala' and session:
            http_addr = _get_impala_server_url(session)
            response['http_addr'] = http_addr

        return response