Browse Source

[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 years ago
parent
commit
474c6b7705

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

@@ -89,8 +89,7 @@ ${ assist.assistPanel() }
 
 
             <h3>
             <h3>
               <div class="inline-block pull-right" style="margin-top: -8px">
               <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>
               </div>
               <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
               <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
                 <li>
                 <li>

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

@@ -91,8 +91,7 @@ ${ assist.assistPanel() }
           <div class="metastore-main">
           <div class="metastore-main">
             <h3>
             <h3>
               <div class="inline-block pull-right" style="margin-top: -8px">
               <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>
               </div>
 
 
               <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
               <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.reloading(true);
-      self.assistHelper.clearCache({
+      huePubSub.publish('assist.clear.db.cache', {
         sourceType: 'hive',
         sourceType: 'hive',
         clearAll: true
         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>
             <h3 id="dropDatabaseMessage">${ _('Do you really want to delete the database(s)?') }</h3>
           </div>
           </div>
           <div class="modal-footer">
           <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>
           </div>
           <!-- ko foreach: selectedDatabases -->
           <!-- ko foreach: selectedDatabases -->
           <input type="hidden" name="database_selection" data-bind="value: name" />
           <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>
                   <h3 id="dropTableMessage">${_('Do you really want to drop the selected table(s)?')}</h3>
                 </div>
                 </div>
                 <div class="modal-footer">
                 <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>
                 </div>
                 <!-- ko foreach: selectedTables -->
                 <!-- ko foreach: selectedTables -->
                 <input type="hidden" name="table_selection" data-bind="value: name" />
                 <input type="hidden" name="table_selection" data-bind="value: name" />
@@ -438,16 +438,16 @@ ${ assist.assistPanel() }
 
 
 <script type="text/html" id="metastore-databases-actions">
 <script type="text/html" id="metastore-databases-actions">
   <div class="inline-block pull-right">
   <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:
     % 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
     % endif
   </div>
   </div>
 </script>
 </script>
 
 
 <script type="text/html" id="metastore-tables-actions">
 <script type="text/html" id="metastore-tables-actions">
   <div class="inline-block pull-right">
   <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:
     % 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/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>
     <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">
 <script type="text/html" id="metastore-describe-table-actions">
   <div class="inline-block pull-right">
   <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: database -->
     <!-- ko with: table -->
     <!-- ko with: table -->
 ##     <a class="inactive-action margin-left-10" href="javascript: void(0);"><i class="fa fa-star"></i></a>
 ##     <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>
       <div class="modal-footer">
       <div class="modal-footer">
         <input type="hidden" name="table_selection" data-bind="value: database() && database().table() ? database().table().name : ''" />
         <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')}"/>
         <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>
       </div>
     </form>
     </form>
@@ -793,7 +793,7 @@ ${ assist.assistPanel() }
       ko.applyBindings(viewModel);
       ko.applyBindings(viewModel);
 
 
       if (location.getParameter('refresh') === 'true') {
       if (location.getParameter('refresh') === 'true') {
-        huePubSub.publish('assist.refresh');
+        huePubSub.publish('assist.db.refresh', 'hive');
         hueUtils.replaceURL('?');
         hueUtils.replaceURL('?');
       }
       }
 
 

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

@@ -178,14 +178,18 @@
 
 
     self.reload = function() {
     self.reload = function() {
       self.reloading(true);
       self.reloading(true);
-      self.assistHelper.clearCache({
+      huePubSub.publish('assist.clear.db.cache', {
         sourceType: self.type,
         sourceType: self.type,
         clearAll: true
         clearAll: true
       });
       });
       self.initDatabases();
       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() {
   AssistDbSource.prototype.toggleSearch = function() {

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

@@ -44,6 +44,10 @@
     self.user = user;
     self.user = user;
     self.lastKnownDatabases = {};
     self.lastKnownDatabases = {};
     self.fetchQueue = {};
     self.fetchQueue = {};
+
+    huePubSub.subscribe('assist.clear.db.cache', function (options) {
+      self.clearCache(options);
+    })
   }
   }
 
 
   AssistHelper.prototype.hasExpired = function (timestamp) {
   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()">
     <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>
       <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: 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>
     </div>
   </script>
   </script>
 
 

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

@@ -612,7 +612,7 @@
             self.fetchResult(100);
             self.fetchResult(100);
             self.progress(100);
             self.progress(100);
             if (self.isSqlDialect() && ! self.result.handle().has_result_set) { // DDL
             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) {
               if (self.result.handle().has_more_statements) {
                 setTimeout(function () {
                 setTimeout(function () {
                   self.execute(); // Execute next, need to wait as we disabled fast click
                   self.execute(); // Execute next, need to wait as we disabled fast click