瀏覽代碼

[impala] Allow invalidate to accept optional database param to enable DB refresh

Jenny Kim 10 年之前
父節點
當前提交
631a681
共有 4 個文件被更改,包括 9 次插入8 次删除
  1. 5 3
      apps/impala/src/impala/api.py
  2. 2 3
      apps/impala/src/impala/dbms.py
  3. 1 1
      apps/impala/src/impala/tests.py
  4. 1 1
      apps/impala/src/impala/urls.py

+ 5 - 3
apps/impala/src/impala/api.py

@@ -36,15 +36,17 @@ LOG = logging.getLogger(__name__)
 
 @require_POST
 @error_handler
-def invalidate(request, database):
+def invalidate(request):
   query_server = dbms.get_query_server_config()
   db = beeswax_dbms.get(request.user, query_server=query_server)
 
   response = {'status': 0, 'message': ''}
 
+  database = request.POST.get('database', None)
   flush_all = request.POST.get('flush_all', 'false').lower() == 'true'
-  db.invalidate(database, flush_all=flush_all)
-  response['message'] = _('Successfully invalidated metadata for `%s`') % database
+
+  db.invalidate(database=database, flush_all=flush_all)
+  response['message'] = _('Successfully invalidated metadata')
 
   return JsonResponse(response)
 

+ 2 - 3
apps/impala/src/impala/dbms.py

@@ -88,11 +88,10 @@ class ImpalaDbms(HiveServer2Dbms):
     return 'SELECT histogram(%s) FROM %s' % (select_clause, from_clause)
 
 
-  def invalidate(self, database, flush_all=False):
+  def invalidate(self, database=None, flush_all=False):
     handle = None
     try:
-      if flush_all:
-        self.use(database)  # INVALIDATE does not accept database as a single parameter
+      if flush_all or database is None:
         hql = "INVALIDATE METADATA"
         query = hql_query(hql, query_type=QUERY_TYPES[1])
         handle = self.execute_and_wait(query, timeout_sec=10.0)

+ 1 - 1
apps/impala/src/impala/tests.py

@@ -256,7 +256,7 @@ class TestImpalaIntegration:
     assert_true('new_table' in beeswax_tables, beeswax_tables)
     assert_false('new_table' in impala_tables, impala_tables)
 
-    resp = self.client.post(reverse('impala:invalidate', kwargs={'database': self.DATABASE}))
+    resp = self.client.post(reverse('impala:invalidate'), {'database': self.DATABASE})
 
     impala_tables, beeswax_tables = get_impala_beeswax_tables()
     # Invalidate picks up new table

+ 1 - 1
apps/impala/src/impala/urls.py

@@ -21,7 +21,7 @@ from beeswax.urls import urlpatterns as beeswax_urls
 
 
 urlpatterns = patterns('impala.api',
-  url(r'^api/invalidate/(?P<database>\w+)$', 'invalidate', name='invalidate'),
+  url(r'^api/invalidate$', 'invalidate', name='invalidate'),
   url(r'^api/refresh/(?P<database>\w+)/(?P<table>\w+)$', 'refresh_table', name='refresh_table'),
 )