예제 #1
0
def get(user, query_server=None, cluster=None):
  global DBMS_CACHE
  global DBMS_CACHE_LOCK

  if query_server is None:
    query_server = get_query_server_config(cluster=cluster)

  DBMS_CACHE_LOCK.acquire()
  try:
    DBMS_CACHE.setdefault(user.username, {})

    if query_server['server_name'] not in DBMS_CACHE[user.username]:
      # Avoid circular dependency
      from beeswax.server.hive_server2_lib import HiveServerClientCompatible

      if query_server['server_name'] == 'impala':
        from impala.dbms import ImpalaDbms
        from impala.server import ImpalaServerClient
        DBMS_CACHE[user.username][query_server['server_name']] = ImpalaDbms(HiveServerClientCompatible(ImpalaServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])
      else:
        from beeswax.server.hive_server2_lib import HiveServerClient
        DBMS_CACHE[user.username][query_server['server_name']] = HiveServer2Dbms(HiveServerClientCompatible(HiveServerClient(query_server, user)), QueryHistory.SERVER_TYPE[1][0])

    return DBMS_CACHE[user.username][query_server['server_name']]
  finally:
    DBMS_CACHE_LOCK.release()
예제 #2
0
    def test_invalidate(self):
        with patch('impala.dbms.ImpalaDbms._get_different_tables'
                   ) as get_different_tables:
            with patch(
                    'desktop.models.ClusterConfig.get_hive_metastore_interpreters'
            ) as get_hive_metastore_interpreters:
                ddms = ImpalaDbms(Mock(query_server={'server_name': ''}), None)
                get_different_tables.return_value = ['customers']

                get_hive_metastore_interpreters.return_value = []
                assert_raises(PopupException, ddms.invalidate,
                              'default')  # No hive/metastore configured

                get_hive_metastore_interpreters.return_value = ['hive']
                ddms.invalidate('default')
                ddms.client.query.assert_called_once_with(
                    ddms.client.query.call_args[0][0])
                assert_true('customers' in ddms.client.query.call_args[0]
                            [0].hql_query)  # diff of 1 table

                get_different_tables.return_value = [
                    'customers', '', '', '', '', '', '', '', '', '', ''
                ]
                assert_raises(PopupException, ddms.invalidate,
                              'default')  # diff of 11 tables. Limit is 10.

                ddms.invalidate('default', 'customers')
                assert_true(ddms.client.query.call_count == 2)  # Second call
                assert_true('customers' in ddms.client.query.call_args[0]
                            [0].hql_query)  # invalidate 1 table

                ddms.invalidate()
                assert_true(ddms.client.query.call_count == 3)  # Third call
                assert_true('customers' not in ddms.client.query.call_args[0]
                            [0].hql_query)  # Full invalidate
예제 #3
0
def get(user, query_server=None, cluster=None):
  global DBMS_CACHE
  global DBMS_CACHE_LOCK
  global RESET_HS2_QUERY_SERVER

  if query_server is None:
    query_server = get_query_server_config(connector=cluster)

  DBMS_CACHE_LOCK.acquire()
  try:
    DBMS_CACHE.setdefault(user.id, {})

    if query_server['server_name'] not in DBMS_CACHE[user.id]:
      # Avoid circular dependency
      from beeswax.server.hive_server2_lib import HiveServerClientCompatible

      if query_server.get('dialect') == 'impala':
        from impala.dbms import ImpalaDbms
        from impala.server import ImpalaServerClient
        DBMS_CACHE[user.id][query_server['server_name']] = ImpalaDbms(
            HiveServerClientCompatible(ImpalaServerClient(query_server, user)),
            QueryHistory.SERVER_TYPE[1][0]
        )
      elif query_server['server_name'] == 'hms':
        from beeswax.server.hive_metastore_server import HiveMetastoreClient
        DBMS_CACHE[user.id][query_server['server_name']] = HiveServer2Dbms(
            HiveMetastoreClient(query_server, user),
            QueryHistory.SERVER_TYPE[1][0]
        )
      else:
        from beeswax.server.hive_server2_lib import HiveServerClient
        DBMS_CACHE[user.id][query_server['server_name']] = HiveServer2Dbms(
            HiveServerClientCompatible(HiveServerClient(query_server, user)),
            QueryHistory.SERVER_TYPE[1][0]
        )
    elif RESET_HS2_QUERY_SERVER:
      from beeswax.server.hive_server2_lib import HiveServerClient, HiveServerClientCompatible
      RESET_HS2_QUERY_SERVER = False
      LOG.debug('Setting DBMS cache for the new hs2')
      DBMS_CACHE[user.id].clear()
      DBMS_CACHE[user.id][query_server['server_name']] = HiveServer2Dbms(
        HiveServerClientCompatible(HiveServerClient(query_server, user)),
        QueryHistory.SERVER_TYPE[1][0]
      )
    return DBMS_CACHE[user.id][query_server['server_name']]
  finally:
    DBMS_CACHE_LOCK.release()