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()
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
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()