Selaa lähdekoodia

[impala] Install queries and table samples

Harmonize all the install_sample of the apps
Improve Impala refresh catalog call
HS2 GetLog() backward compatibility
Beeswax/HS2 Impala app decoupling for RefreshCatalog()
RefreshCatalog() possible bad return value compatibility fix
Romain Rigaux 12 vuotta sitten
vanhempi
commit
5ad920e

+ 23 - 5
apps/about/src/about/templates/admin_wizard.mako

@@ -85,14 +85,28 @@ ${ commonheader(_('Quick Start'), "quick_start", user, "100px") | n,unicode }
         % if 'beeswax' in app_names:
           <li>
             <a href="#" class="installBtn" data-loading-text="${ _('Installing...') }" data-url="${ url('beeswax:install_examples') }">
-             <i class="icon-download-alt"></i> Beeswax
+             <i class="icon-download-alt"></i> ${ apps['beeswax'].nice_name }
             </a>
           </li>
         % endif
-        % if 'oozie' in app_names or 'jobsub' in app_names:
+        % if 'impala' in app_names:
           <li>
-            <a href="#" class="installBtn" data-loading-text="${ _('Installing...') }" data-url="${ url('oozie:setup_app') }">
-              <i class="icon-download-alt"></i> Oozie / Job Designer
+            <a href="#" class="installBtn" data-loading-text="${ _('Installing...') }" data-url="${ url('impala:install_examples') }">
+             <i class="icon-download-alt"></i> ${ apps['impala'].nice_name }
+            </a>
+          </li>
+        % endif
+        % if 'jobsub' in app_names:
+          <li>
+            <a href="#" class="installBtn" data-loading-text="${ _('Installing...') }" data-url="${ url('oozie:install_examples') }">
+              <i class="icon-download-alt"></i> ${ apps['jobsub'].nice_name }
+            </a>
+          </li>
+        % endif
+        % if 'oozie' in app_names:
+          <li>
+            <a href="#" class="installBtn" data-loading-text="${ _('Installing...') }" data-url="${ url('oozie:install_examples') }">
+              <i class="icon-download-alt"></i> ${ apps['oozie'].nice_name }
             </a>
           </li>
         % endif
@@ -190,9 +204,13 @@ $(document).ready(function(){
     var button = $(this);
     $(button).button('loading');
     $.post($(this).data("url"), function(data) {
+      if (data.status == 0) {
+        $.jHueNotify.info('${ _("Examples refreshed") }');
+      } else {
+        $.jHueNotify.error(data.message);
+      }
     })
     .always(function(data) {
-      $.jHueNotify.info("${ _('Done!') }");
       $(button).button('reset');
     });
   });

+ 3 - 6
apps/beeswax/src/beeswax/create_table.py

@@ -61,8 +61,7 @@ def create_table(request, database='default'):
       if form.is_valid():
         columns = [ f.cleaned_data for f in form.columns.forms ]
         partition_columns = [ f.cleaned_data for f in form.partitions.forms ]
-        proposed_query = django_mako.render_to_string("create_table_statement.mako",
-          {
+        proposed_query = django_mako.render_to_string("create_table_statement.mako", {
             'database': database,
             'table': form.table.cleaned_data,
             'columns': columns,
@@ -231,8 +230,7 @@ def import_wizard(request, database='default'):
       if do_hive_create:
         delim = s2_delim_form.cleaned_data['delimiter']
         table_name = s1_file_form.cleaned_data['name']
-        proposed_query = django_mako.render_to_string("create_table_statement.mako",
-          {
+        proposed_query = django_mako.render_to_string("create_table_statement.mako", {
             'table': dict(name=table_name,
                           comment=s1_file_form.cleaned_data['comment'],
                           row_format='Delimited',
@@ -289,8 +287,7 @@ def _delim_preview(fs, file_form, encoding, file_types, delimiters):
   path = file_form.cleaned_data['path']
   try:
     file_obj = fs.open(path)
-    delim, file_type, fields_list = _parse_fields(
-              path, file_obj, encoding, file_types, delimiters)
+    delim, file_type, fields_list = _parse_fields(path, file_obj, encoding, file_types, delimiters)
     file_obj.close()
   except IOError, ex:
     msg = "Failed to open file '%s': %s" % (path, ex)

+ 24 - 63
apps/beeswax/src/beeswax/management/commands/beeswax_install_examples.py

@@ -15,23 +15,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""
-Install sample table data and designs.
-
-Expects 2 files in the beeswax.conf.LOCAL_EXAMPLES_DATA_DIR:
-  - tables.json: Describes the list of tables to create. Each item in the list has
-    the key-value pairs:
-      * table_name: the table name
-      * data_file: path of the data file, relative to LOCAL_EXAMPLES_DATA_DIR
-      * create_hql: the hql to create this table
-  - designs.json: Describes the list of designs to populate. Each item in the list
-    has key-value pairs:
-      * name: design name
-      * desc: design description
-      * type: HQL design type
-      * data: the json design data
-"""
-
 import logging
 import os
 import pwd
@@ -41,10 +24,11 @@ from django.core.management.base import NoArgsCommand
 from django.contrib.auth.models import User
 from django.utils.translation import ugettext as _
 
+import beeswax.conf
 import hive_metastore.ttypes
 from beeswaxd.ttypes import BeeswaxException
-
-import beeswax.conf
+from beeswax.models import SavedQuery
+from beeswax.server.dbms import get_query_server_config
 
 from beeswax import models
 from beeswax.design import hql_query
@@ -73,36 +57,18 @@ class InstallException(Exception):
 
 class Command(NoArgsCommand):
   """
-  The handler for the sample installation action.
+  Install examples but do not overwrite them.
   """
-
   def handle_noargs(self, **options):
     """Main entry point to install or re-install examples. May raise InstallException"""
-
     try:
       user = self._install_user()
-      self._install_tables(user)
-      self._install_queries(user)
-      self._set_installed()
-      LOG.info('Beeswax examples installed')
+      self._install_tables(user, options['app_name'])
+      self._install_queries(user, options['app_name'])
     except Exception, ex:
       LOG.exception(ex)
-      LOG.error('Beeswax examples installation failed: %s' % (ex,))
       raise InstallException(ex)
 
-
-  def _check_installed(self):
-    """_check_installed() -> True/False whether examples have been installed"""
-    model = models.MetaInstall.get()
-    return model.installed_example
-
-  def _set_installed(self):
-    """_set_installed() -> Set that the examples have been installed"""
-    model = models.MetaInstall.get()
-    model.installed_example = True
-    model.save()
-
-
   def _install_user(self):
     """
     Setup the sample user
@@ -115,50 +81,45 @@ class Command(NoArgsCommand):
       LOG.info('Installed a user called "%s"' % (USERNAME,))
     return user
 
-  def _install_tables(self, django_user):
-    """
-    Install the tables into HDFS and create them in Hive.
-    """
+  def _install_tables(self, django_user, app_name):
     data_dir = beeswax.conf.LOCAL_EXAMPLES_DATA_DIR.get()
     table_file = file(os.path.join(data_dir, 'tables.json'))
     table_list = simplejson.load(table_file)
     table_file.close()
 
     for table_dict in table_list:
-      table = SampleTable(table_dict)
+      table = SampleTable(table_dict, app_name)
       try:
         table.install(django_user)
       except Exception, ex:
         LOG.exception(ex)
         LOG.error('Could not install table: %s' % (ex,))
-    LOG.info('Successfully created sample tables with data')
 
-  def _install_queries(self, django_user):
-    """
-    Install design designs.
-    """
+  def _install_queries(self, django_user, app_name):
     design_file = file(os.path.join(beeswax.conf.LOCAL_EXAMPLES_DATA_DIR.get(), 'designs.json'))
     design_list = simplejson.load(design_file)
     design_file.close()
 
     for design_dict in design_list:
+      if app_name == 'impala':
+        design_dict['type'] = SavedQuery.IMPALA
       design = SampleDesign(design_dict)
       try:
         design.install(django_user)
       except Exception, ex:
         LOG.exception(ex)
         LOG.error('Could not install query: %s' % (ex,))
-    LOG.info('Successfully installed all sample queries')
 
 
 class SampleTable(object):
   """
   Represents a table loaded from the tables.json file
   """
-  def __init__(self, data_dict):
+  def __init__(self, data_dict, app_name):
     self.name = data_dict['table_name']
     self.filename = data_dict['data_file']
     self.hql = data_dict['create_hql']
+    self.query_server = get_query_server_config(app_name)
 
     # Sanity check
     self._data_dir = beeswax.conf.LOCAL_EXAMPLES_DATA_DIR.get()
@@ -176,23 +137,23 @@ class SampleTable(object):
     """
     Create in Hive. Raise InstallException on failure.
     """
-    # Create table
     LOG.info('Creating table "%s"' % (self.name,))
+    db = dbms.get(django_user, self.query_server)
+
     try:
       # Already exists?
-      dbms.get(django_user).get_table('default', self.name)
+      db.get_table('default', self.name)
       msg = _('Table "%(table)s" already exists.') % {'table': self.name}
       LOG.error(msg)
-      raise InstallException(msg)
-    except hive_metastore.ttypes.NoSuchObjectException:
+    except Exception:
       query = hql_query(self.hql)
       try:
-        results = dbms.get(django_user).execute_and_wait(query)
+        results = db.execute_and_wait(query)
         if not results:
           msg = _('Error creating table %(table)s: Operation timeout.') % {'table': self.name}
           LOG.error(msg)
           raise InstallException(msg)
-      except BeeswaxException, ex:
+      except Exception, ex:
         msg = _('Error creating table %(table)s: %(error)s') % {'table': self.name, 'error': ex}
         LOG.error(msg)
         raise InstallException(msg)
@@ -211,7 +172,7 @@ class SampleTable(object):
     hql = LOAD_HQL % dict(tablename=self.name, filename=self._contents_file)
     query = hql_query(hql)
     try:
-      results = dbms.get(django_user).execute_and_wait(query)
+      results = dbms.get(django_user, self.query_server).execute_and_wait(query)
       if not results:
         msg = _('Error loading table %(table)s: Operation timeout.') % {'table': self.name}
         LOG.error(msg)
@@ -223,7 +184,7 @@ class SampleTable(object):
 
 
 class SampleDesign(object):
-  """Represents a design loaded from the designs.json file"""
+  """Represents a query loaded from the designs.json file"""
   def __init__(self, data_dict):
     self.name = data_dict['name']
     self.desc = data_dict['desc']
@@ -232,12 +193,12 @@ class SampleDesign(object):
 
   def install(self, django_user):
     """
-    Install design. Raise InstallException on failure.
+    Install queries. Raise InstallException on failure.
     """
-    LOG.info('Installing sample design: %s' % (self.name,))
+    LOG.info('Installing sample query: %s' % (self.name,))
     try:
       # Don't overwrite
-      model = models.SavedQuery.objects.get(owner=django_user, name=self.name)
+      model = models.SavedQuery.objects.get(owner=django_user, name=self.name, type=self.type)
       msg = _('Sample design %(name)s already exists.') % {'name': self.name}
       LOG.error(msg)
       raise InstallException(msg)

+ 6 - 4
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -439,10 +439,12 @@ class HiveServerClient:
 
 
   def get_log(self, operation_handle):
-    req = TGetLogReq(operationHandle=operation_handle)
-    res = self.call(self._client.GetLog, req)
-
-    return res.log
+    try:
+      req = TGetLogReq(operationHandle=operation_handle)
+      res = self.call(self._client.GetLog, req)
+      return res.log
+    except:
+      return 'Server does not support GetLog()'
 
 
   def get_partitions(self, database, table_name, max_parts):

+ 1 - 1
apps/beeswax/src/beeswax/templates/execute.mako

@@ -880,7 +880,7 @@ ${layout.menubar(section='query')}
           $.post('/impala/refresh_catalog',
             function(response) {
               if (response['status'] != 0) {
-                $.jHueNotify.error("${ _('Problem: ') }" + response['data']);
+                $.jHueNotify.error("${ _('Problem: ') }" + response['message']);
               } else {
                 $.jHueNotify.info("${ _('Refresh successful!') }")
               }

+ 2 - 15
apps/beeswax/src/beeswax/tests.py

@@ -800,9 +800,6 @@ for x in sys.stdin:
 
 
   def test_install_examples(self):
-    """
-    Test installation of examples
-    """
     assert_true(not beeswax.models.MetaInstall.get().installed_example)
 
     # Check popup
@@ -823,19 +820,9 @@ for x in sys.stdin:
     assert_true('Sample: Top salary' in resp.content)
     assert_true(beeswax.models.MetaInstall.get().installed_example)
 
-    # Now install it a second time, and expect an error
-    resp = self.client.post('/beeswax/install_examples')
-    assert_true('true' in resp.content)
-    assert_equal('', json.loads(resp.content)['message'])
-
-    # First, unset the db entry to allow installation to re-run
-    meta = beeswax.models.MetaInstall.get()
-    meta.installed_example = False
-    meta.save()
-
-    # Now it should complain
+    # Now install it a second time, and no error
     resp = self.client.post('/beeswax/install_examples')
-    assert_true('true' in resp.content)
+    assert_equal(0, json.loads(resp.content)['status'])
     assert_equal('', json.loads(resp.content)['message'])
 
 

+ 10 - 13
apps/beeswax/src/beeswax/views.py

@@ -862,24 +862,21 @@ Other views
 """
 
 def install_examples(request):
-  """
-  Handle installing sample data and example queries.
-  """
+  response = {'status': -1, 'message': ''}
+
   if request.method == 'POST':
-    result = {}
-    result['creationSucceeded'] = False
-    result['message'] = ''
     try:
-      beeswax.management.commands.beeswax_install_examples.Command().handle_noargs()
-      if models.MetaInstall.get().installed_example:
-        result['creationSucceeded'] = True
+      app_name = get_app_name(request)
+      beeswax.management.commands.beeswax_install_examples.Command().handle_noargs(app_name=app_name)
+      response['status'] = 0
     except Exception, err:
       LOG.exception(err)
-      result['message'] = str(err)
-    return HttpResponse(json.dumps(result), mimetype="application/json")
+      response['message'] = str(err)
   else:
-    return render('confirm.html', request,
-                  {'url': request.path, 'title': _('Install sample tables and Beeswax examples?')})
+    response['message'] = _('A POST request is required.')
+
+  return HttpResponse(json.dumps(response), mimetype="application/json")
+
 
 
 

+ 1 - 1
apps/impala/gen-py/ImpalaService/ttypes.py

@@ -91,7 +91,7 @@ class TInsertResult(object):
       if fid == 1:
         if ftype == TType.MAP:
           self.rows_appended = {}
-          (_ktype1, _vtype2, _size0 ) = iprot.readMapBegin() 
+          (_ktype1, _vtype2, _size0 ) = iprot.readMapBegin()
           for _i4 in xrange(_size0):
             _key5 = iprot.readString();
             _val6 = iprot.readI64();

+ 5 - 5
apps/impala/gen-py/cli_service/ttypes.py

@@ -569,7 +569,7 @@ class TStructTypeEntry(object):
       if fid == 1:
         if ftype == TType.MAP:
           self.nameToTypePtr = {}
-          (_ktype1, _vtype2, _size0 ) = iprot.readMapBegin() 
+          (_ktype1, _vtype2, _size0 ) = iprot.readMapBegin()
           for _i4 in xrange(_size0):
             _key5 = iprot.readString();
             _val6 = iprot.readI32();
@@ -641,7 +641,7 @@ class TUnionTypeEntry(object):
       if fid == 1:
         if ftype == TType.MAP:
           self.nameToTypePtr = {}
-          (_ktype10, _vtype11, _size9 ) = iprot.readMapBegin() 
+          (_ktype10, _vtype11, _size9 ) = iprot.readMapBegin()
           for _i13 in xrange(_size9):
             _key14 = iprot.readString();
             _val15 = iprot.readI32();
@@ -2461,7 +2461,7 @@ class TOpenSessionReq(object):
       elif fid == 4:
         if ftype == TType.MAP:
           self.configuration = {}
-          (_ktype110, _vtype111, _size109 ) = iprot.readMapBegin() 
+          (_ktype110, _vtype111, _size109 ) = iprot.readMapBegin()
           for _i113 in xrange(_size109):
             _key114 = iprot.readString();
             _val115 = iprot.readString();
@@ -2571,7 +2571,7 @@ class TOpenSessionResp(object):
       elif fid == 4:
         if ftype == TType.MAP:
           self.configuration = {}
-          (_ktype119, _vtype120, _size118 ) = iprot.readMapBegin() 
+          (_ktype119, _vtype120, _size118 ) = iprot.readMapBegin()
           for _i122 in xrange(_size118):
             _key123 = iprot.readString();
             _val124 = iprot.readString();
@@ -3075,7 +3075,7 @@ class TExecuteStatementReq(object):
       elif fid == 3:
         if ftype == TType.MAP:
           self.confOverlay = {}
-          (_ktype128, _vtype129, _size127 ) = iprot.readMapBegin() 
+          (_ktype128, _vtype129, _size127 ) = iprot.readMapBegin()
           for _i131 in xrange(_size127):
             _key132 = iprot.readString();
             _val133 = iprot.readString();

+ 2 - 2
apps/impala/gen-py/fb303/FacebookService.py

@@ -1118,7 +1118,7 @@ class getCounters_result(object):
       if fid == 0:
         if ftype == TType.MAP:
           self.success = {}
-          (_ktype1, _vtype2, _size0 ) = iprot.readMapBegin() 
+          (_ktype1, _vtype2, _size0 ) = iprot.readMapBegin()
           for _i4 in xrange(_size0):
             _key5 = iprot.readString();
             _val6 = iprot.readI64();
@@ -1581,7 +1581,7 @@ class getOptions_result(object):
       if fid == 0:
         if ftype == TType.MAP:
           self.success = {}
-          (_ktype10, _vtype11, _size9 ) = iprot.readMapBegin() 
+          (_ktype10, _vtype11, _size9 ) = iprot.readMapBegin()
           for _i13 in xrange(_size9):
             _key14 = iprot.readString();
             _val15 = iprot.readString();

+ 2 - 2
apps/impala/gen-py/hive_metastore/ThriftHiveMetastore.py

@@ -4900,7 +4900,7 @@ class get_type_all_result(object):
       if fid == 0:
         if ftype == TType.MAP:
           self.success = {}
-          (_ktype189, _vtype190, _size188 ) = iprot.readMapBegin() 
+          (_ktype189, _vtype190, _size188 ) = iprot.readMapBegin()
           for _i192 in xrange(_size188):
             _key193 = iprot.readString();
             _val194 = Type()
@@ -9575,7 +9575,7 @@ class partition_name_to_spec_result(object):
       if fid == 0:
         if ftype == TType.MAP:
           self.success = {}
-          (_ktype352, _vtype353, _size351 ) = iprot.readMapBegin() 
+          (_ktype352, _vtype353, _size351 ) = iprot.readMapBegin()
           for _i355 in xrange(_size351):
             _key356 = iprot.readString();
             _val357 = iprot.readString();

+ 10 - 10
apps/impala/gen-py/hive_metastore/ttypes.py

@@ -743,7 +743,7 @@ class PrincipalPrivilegeSet(object):
       if fid == 1:
         if ftype == TType.MAP:
           self.userPrivileges = {}
-          (_ktype22, _vtype23, _size21 ) = iprot.readMapBegin() 
+          (_ktype22, _vtype23, _size21 ) = iprot.readMapBegin()
           for _i25 in xrange(_size21):
             _key26 = iprot.readString();
             _val27 = []
@@ -760,7 +760,7 @@ class PrincipalPrivilegeSet(object):
       elif fid == 2:
         if ftype == TType.MAP:
           self.groupPrivileges = {}
-          (_ktype35, _vtype36, _size34 ) = iprot.readMapBegin() 
+          (_ktype35, _vtype36, _size34 ) = iprot.readMapBegin()
           for _i38 in xrange(_size34):
             _key39 = iprot.readString();
             _val40 = []
@@ -777,7 +777,7 @@ class PrincipalPrivilegeSet(object):
       elif fid == 3:
         if ftype == TType.MAP:
           self.rolePrivileges = {}
-          (_ktype48, _vtype49, _size47 ) = iprot.readMapBegin() 
+          (_ktype48, _vtype49, _size47 ) = iprot.readMapBegin()
           for _i51 in xrange(_size47):
             _key52 = iprot.readString();
             _val53 = []
@@ -989,7 +989,7 @@ class Database(object):
       elif fid == 4:
         if ftype == TType.MAP:
           self.parameters = {}
-          (_ktype70, _vtype71, _size69 ) = iprot.readMapBegin() 
+          (_ktype70, _vtype71, _size69 ) = iprot.readMapBegin()
           for _i73 in xrange(_size69):
             _key74 = iprot.readString();
             _val75 = iprot.readString();
@@ -1097,7 +1097,7 @@ class SerDeInfo(object):
       elif fid == 3:
         if ftype == TType.MAP:
           self.parameters = {}
-          (_ktype79, _vtype80, _size78 ) = iprot.readMapBegin() 
+          (_ktype79, _vtype80, _size78 ) = iprot.readMapBegin()
           for _i82 in xrange(_size78):
             _key83 = iprot.readString();
             _val84 = iprot.readString();
@@ -1337,7 +1337,7 @@ class StorageDescriptor(object):
       elif fid == 10:
         if ftype == TType.MAP:
           self.parameters = {}
-          (_ktype106, _vtype107, _size105 ) = iprot.readMapBegin() 
+          (_ktype106, _vtype107, _size105 ) = iprot.readMapBegin()
           for _i109 in xrange(_size105):
             _key110 = iprot.readString();
             _val111 = iprot.readString();
@@ -1535,7 +1535,7 @@ class Table(object):
       elif fid == 9:
         if ftype == TType.MAP:
           self.parameters = {}
-          (_ktype124, _vtype125, _size123 ) = iprot.readMapBegin() 
+          (_ktype124, _vtype125, _size123 ) = iprot.readMapBegin()
           for _i127 in xrange(_size123):
             _key128 = iprot.readString();
             _val129 = iprot.readString();
@@ -1734,7 +1734,7 @@ class Partition(object):
       elif fid == 7:
         if ftype == TType.MAP:
           self.parameters = {}
-          (_ktype140, _vtype141, _size139 ) = iprot.readMapBegin() 
+          (_ktype140, _vtype141, _size139 ) = iprot.readMapBegin()
           for _i143 in xrange(_size139):
             _key144 = iprot.readString();
             _val145 = iprot.readString();
@@ -1909,7 +1909,7 @@ class Index(object):
       elif fid == 9:
         if ftype == TType.MAP:
           self.parameters = {}
-          (_ktype150, _vtype151, _size149 ) = iprot.readMapBegin() 
+          (_ktype150, _vtype151, _size149 ) = iprot.readMapBegin()
           for _i153 in xrange(_size149):
             _key154 = iprot.readString();
             _val155 = iprot.readString();
@@ -2034,7 +2034,7 @@ class Schema(object):
       elif fid == 2:
         if ftype == TType.MAP:
           self.properties = {}
-          (_ktype165, _vtype166, _size164 ) = iprot.readMapBegin() 
+          (_ktype165, _vtype166, _size164 ) = iprot.readMapBegin()
           for _i168 in xrange(_size164):
             _key169 = iprot.readString();
             _val170 = iprot.readString();

+ 1 - 2
apps/impala/src/impala/server.py

@@ -22,7 +22,6 @@ from beeswax import conf
 from beeswax.models import HIVE_SERVER2
 from beeswax.server.beeswax_lib import BeeswaxClient
 from beeswax.server.dbms import get_query_server_config
-from beeswax.conf import SERVER_INTERFACE
 
 
 def get(user, query_server=None):
@@ -32,7 +31,7 @@ def get(user, query_server=None):
   if query_server is None:
     query_server = get_query_server_config(name='impala')
 
-  if SERVER_INTERFACE.get() == HIVE_SERVER2:
+  if query_server['server_interface'] == HIVE_SERVER2:
     return ImpalaServerClient(ImpalaHiveServer2Service, query_server, user)
   else:
     return ImpalaServerClient(ImpalaService, query_server, user)

+ 3 - 0
apps/impala/src/impala/urls.py

@@ -22,6 +22,9 @@ from beeswax.urls import urlpatterns as beeswax_urls
 
 urlpatterns = patterns('impala.views',
   url(r'^refresh_catalog$', 'refresh_catalog', name='refresh_catalog'),
+
+  # Override Beeswax
+  url(r'^install_examples$', 'install_examples', name='install_examples'),
 )
 
 urlpatterns += beeswax_urls

+ 19 - 10
apps/impala/src/impala/views.py

@@ -24,20 +24,29 @@ except ImportError:
 
 from django.http import HttpResponse
 from django.utils.translation import ugettext as _
-from desktop.lib.exceptions_renderable import PopupException
-
+from beeswax.views import install_examples as beeswax_install_examples
 from impala import server
 
 
 def refresh_catalog(request):
-  if request.method != 'POST':
-    raise PopupException(_('A POST request is required.'))
+  response = {'status': -1, 'message': ''}
 
-  try:
-    db = server.get(request.user)
-    res = db.resetCatalog()
-    response = {'status': res.status_code, 'data': res.error_msgs}
-  except Exception, e:
-    response = {'status': -1, 'data': str(e)}
+  if request.method != 'POST':
+    response['message'] = _('A POST request is required.')
+  else:
+    try:
+      db = server.get(request.user)
+      res = db.resetCatalog()
+      if res.status_code is None:
+        status = 0
+      else:
+        status = res.status_code
+      response = {'status': status, 'message': res.error_msgs}
+    except Exception, e:
+      response = {'message': str(e)}
 
   return HttpResponse(json.dumps(response), mimetype="application/json")
+
+
+def install_examples(request):
+  return beeswax_install_examples(request)

+ 3 - 3
apps/oozie/src/oozie/tests.py

@@ -268,7 +268,7 @@ class OozieBase(OozieServerProvider):
     if _INITIALIZED:
       return
 
-    self.c.post(reverse('oozie:setup_app'))
+    self.c.post(reverse('oozie:install_examples'))
     self.cluster.fs.do_as_user('test', self.cluster.fs.create_home_dir, '/user/test')
     self.cluster.fs.do_as_superuser(self.cluster.fs.chmod, '/user/test', 0777, True)
     try:
@@ -1210,8 +1210,8 @@ class TestEditor(OozieMockBase):
     create_coordinator_data(coord, self.c)
 
 
-  def test_setup_app(self):
-    self.c.post(reverse('oozie:setup_app'))
+  def test_install_examples(self):
+    self.c.post(reverse('oozie:install_examples'))
 
 
   def test_workflow_prepare(self):

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

@@ -60,7 +60,7 @@ urlpatterns = patterns(
 
   url(r'^list_history$', 'list_history', name='list_history'), # Unused
   url(r'^list_history/(?P<record_id>[-\w]+)$', 'list_history_record', name='list_history_record'),
-  url(r'^setup_app/$', 'setup_app', name='setup_app'),
+  url(r'^install_examples/$', 'install_examples', name='install_examples'),
   url(r'^jasmine', 'jasmine'),
 )
 

+ 1 - 1
apps/oozie/src/oozie/views/editor.py

@@ -866,7 +866,7 @@ def list_history_record(request, record_id):
   })
 
 
-def setup_app(request):
+def install_examples(request):
   if request.method != 'POST':
     raise PopupException(_('A POST request is required.'))
   try:

+ 1 - 1
desktop/core/src/desktop/views.py

@@ -318,7 +318,7 @@ def commonfooter(messages=None):
     messages = {}
 
   hue_settings = Settings.get_settings()
-  print hue_settings.collect_usage
+
   return render_to_string("common_footer.html", {
     'messages': messages,
     'version': settings.HUE_DESKTOP_VERSION,