Эх сурвалжийг харах

[assist] Improved cache refresh handling

With this change it will no longer clear the complete cache on refresh but instead just for the active source type (hive, impala etc.), the change also paves way for HDFS cache refresh.

This will also fix a couple of issues with the metastore. The cache was cleared twice when dropping tables and DBs causing multiple reloads and there was inconsistent types of icons in the create table wizards.
Johan Ahlen 9 жил өмнө
parent
commit
474c6b7

+ 1 - 2
apps/beeswax/src/beeswax/templates/create_table_manually.mako

@@ -89,8 +89,7 @@ ${ assist.assistPanel() }
 
             <h3>
               <div class="inline-block pull-right" style="margin-top: -8px">
-                <a href="${ url('beeswax:import_wizard', database=database) }" title="${_('Create a new table from a file')}" class="inactive-action"><i class="fa fa-files-o"></i></a>
-                <a href="${ url('beeswax:create_table', database=database) }" title="${_('Create a new table manually')}" class="inactive-action margin-left-10"><i class="fa fa-wrench"></i></a>
+                <a href="${ url('beeswax:import_wizard', database=database) }" title="${_('Create a new table from a file')}" class="inactive-action"><span class="fa-stack fa-fw" style="width: 1.28571429em"><i class="fa fa-file-o fa-stack-1x"></i><i class="fa fa-plus-circle fa-stack-1x" style="font-size: 14px; margin-left: 5px; margin-top: 6px;"></i></span></a>
               </div>
               <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
                 <li>

+ 1 - 2
apps/beeswax/src/beeswax/templates/import_wizard_choose_file.mako

@@ -91,8 +91,7 @@ ${ assist.assistPanel() }
           <div class="metastore-main">
             <h3>
               <div class="inline-block pull-right" style="margin-top: -8px">
-                <a href="${ url('beeswax:import_wizard', database=database) }" title="${_('Create a new table from a file')}" class="inactive-action"><i class="fa fa-files-o"></i></a>
-                <a href="${ url('beeswax:create_table', database=database) }" title="${_('Create a new table manually')}" class="inactive-action margin-left-10"><i class="fa fa-wrench"></i></a>
+                <a href="${ url('beeswax:create_table', database=database) }" title="${_('Create a new table manually')}" class="inactive-action margin-left-10"><i class="fa fa-plus"></i></a>
               </div>
 
               <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">

+ 5 - 2
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -521,9 +521,12 @@
       }
     };
 
-    huePubSub.subscribe('assist.refresh', function () {
+    huePubSub.subscribe('assist.db.refresh', function (type) {
+      if (type !== 'hive') {
+        return;
+      }
       self.reloading(true);
-      self.assistHelper.clearCache({
+      huePubSub.publish('assist.clear.db.cache', {
         sourceType: 'hive',
         clearAll: true
       });

+ 10 - 10
apps/metastore/src/metastore/templates/metastore.mako

@@ -281,8 +281,8 @@ ${ assist.assistPanel() }
             <h3 id="dropDatabaseMessage">${ _('Do you really want to delete the database(s)?') }</h3>
           </div>
           <div class="modal-footer">
-            <input type="button" class="btn" data-dismiss="modal" value="Cancel">
-            <input type="submit" data-bind="click: function () { huePubSub.publish('assist.refresh'); selectedDatabases([]); return true; }" class="btn btn-danger" value="${_('Yes')}"/>
+            <input type="button" class="btn" data-dismiss="modal" value="${_('No')}">
+            <input type="submit" class="btn btn-danger" value="${_('Yes')}"/>
           </div>
           <!-- ko foreach: selectedDatabases -->
           <input type="hidden" name="database_selection" data-bind="value: name" />
@@ -372,8 +372,8 @@ ${ assist.assistPanel() }
                   <h3 id="dropTableMessage">${_('Do you really want to drop the selected table(s)?')}</h3>
                 </div>
                 <div class="modal-footer">
-                  <input type="button" class="btn" data-dismiss="modal" value="${_('Cancel')}" />
-                  <input type="submit" data-bind="click: function () { huePubSub.publish('assist.refresh'); selectedTables([]); return true; }" class="btn btn-danger" value="${_('Yes')}"/>
+                  <input type="button" class="btn" data-dismiss="modal" value="${_('No')}" />
+                  <input type="submit" class="btn btn-danger" value="${_('Yes')}"/>
                 </div>
                 <!-- ko foreach: selectedTables -->
                 <input type="hidden" name="table_selection" data-bind="value: name" />
@@ -438,16 +438,16 @@ ${ assist.assistPanel() }
 
 <script type="text/html" id="metastore-databases-actions">
   <div class="inline-block pull-right">
-    <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.refresh'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>
+    <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.db.refresh', 'hive'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>
     % if has_write_access:
-    <a class="inactive-action margin-left-10" href="${ url('beeswax:create_database') }" title="${_('Create a new database')}"><i class="fa fa-plus-circle"></i></a>
+    <a class="inactive-action margin-left-10" href="${ url('beeswax:create_database') }" title="${_('Create a new database')}"><i class="fa fa-plus"></i></a>
     % endif
   </div>
 </script>
 
 <script type="text/html" id="metastore-tables-actions">
   <div class="inline-block pull-right">
-    <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.refresh'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>
+    <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.db.refresh', 'hive'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>
     % if has_write_access:
     <a class="inactive-action margin-left-10" data-bind="attr: { 'href': '/beeswax/create/import_wizard/' + database().name }" title="${_('Create a new table from a file')}"><span class="fa-stack fa-fw" style="width: 1.28571429em"><i class="fa fa-file-o fa-stack-1x"></i><i class="fa fa-plus-circle fa-stack-1x" style="font-size: 14px; margin-left: 5px; margin-top: 6px;"></i></span></a>
     <a class="inactive-action margin-left-10" data-bind="attr: { 'href': '/beeswax/create/create_table/' + database().name }" title="${_('Create a new table manually')}"><i class="fa fa-plus"></i></a>
@@ -457,7 +457,7 @@ ${ assist.assistPanel() }
 
 <script type="text/html" id="metastore-describe-table-actions">
   <div class="inline-block pull-right">
-    <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.refresh'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>
+    <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.db.refresh', 'hive'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>
     <!-- ko with: database -->
     <!-- ko with: table -->
 ##     <a class="inactive-action margin-left-10" href="javascript: void(0);"><i class="fa fa-star"></i></a>
@@ -750,7 +750,7 @@ ${ assist.assistPanel() }
       </div>
       <div class="modal-footer">
         <input type="hidden" name="table_selection" data-bind="value: database() && database().table() ? database().table().name : ''" />
-        <input type="button" class="btn" data-dismiss="modal" value="${_('Cancel')}"/>
+        <input type="button" class="btn" data-dismiss="modal" value="${_('No')}"/>
         <input type="submit" data-bind="click: function (vm, e) { var $form = $(e.target).parents('form'); $form.attr('action', '/metastore/tables/drop/' + vm.database().name); return true; }" class="btn btn-danger" value="${_('Yes, drop this table')}"/>
       </div>
     </form>
@@ -793,7 +793,7 @@ ${ assist.assistPanel() }
       ko.applyBindings(viewModel);
 
       if (location.getParameter('refresh') === 'true') {
-        huePubSub.publish('assist.refresh');
+        huePubSub.publish('assist.db.refresh', 'hive');
         hueUtils.replaceURL('?');
       }
 

+ 6 - 2
desktop/core/src/desktop/static/desktop/js/assist/assistDbSource.js

@@ -178,14 +178,18 @@
 
     self.reload = function() {
       self.reloading(true);
-      self.assistHelper.clearCache({
+      huePubSub.publish('assist.clear.db.cache', {
         sourceType: self.type,
         clearAll: true
       });
       self.initDatabases();
     };
 
-    huePubSub.subscribe('assist.refresh', self.reload);
+    huePubSub.subscribe('assist.db.refresh', function (type) {
+      if (self.type === type) {
+        self.reload();
+      }
+    });
   }
 
   AssistDbSource.prototype.toggleSearch = function() {

+ 4 - 0
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -44,6 +44,10 @@
     self.user = user;
     self.lastKnownDatabases = {};
     self.fetchQueue = {};
+
+    huePubSub.subscribe('assist.clear.db.cache', function (options) {
+      self.clearCache(options);
+    })
   }
 
   AssistHelper.prototype.hasExpired = function (timestamp) {

+ 1 - 1
desktop/core/src/desktop/templates/assist.mako

@@ -573,7 +573,7 @@ from desktop.views import _ko
     <div class="hover-actions assist-db-header-actions" data-bind="visible: hasEntries() && (!$parent.loading() && !$parent.hasErrors()">
       <span class="assist-tables-counter">(<span data-bind="text: filteredEntries().length"></span>)</span>
       <a class="inactive-action" href="javascript:void(0)" data-bind="click: toggleSearch, css: { 'blue' : isSearchVisible }"><i class="pointer fa fa-search" title="${_('Search')}"></i></a>
-      <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.refresh'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : loading }" title="${_('Manually refresh the table list')}"></i></a>
+      <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.db.refresh', assistDbSource.type); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : loading }" title="${_('Manually refresh the table list')}"></i></a>
     </div>
   </script>
 

+ 1 - 1
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -612,7 +612,7 @@
             self.fetchResult(100);
             self.progress(100);
             if (self.isSqlDialect() && ! self.result.handle().has_result_set) { // DDL
-              huePubSub.publish('assist.refresh');
+              huePubSub.publish('assist.db.refresh', self.type());
               if (self.result.handle().has_more_statements) {
                 setTimeout(function () {
                   self.execute(); // Execute next, need to wait as we disabled fast click