Explorar o código

HUE-7939 [metastore] Make sure the metastore is refreshed after creating tables or databases

Johan Ahlen %!s(int64=7) %!d(string=hai) anos
pai
achega
3ed47163d1

+ 15 - 10
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -254,14 +254,11 @@ var MetastoreViewModel = (function () {
             self.loadingTable(false);
             self.database().setTable(foundTables[0], callback);
           } else if (clearDbCacheOnMissing) {
-            huePubSub.publish('assist.clear.db.cache', {
-              sourceType: self.sourceType(),
-              clearAll: false,
-              databaseName: self.database().catalogEntry.name
+            self.database().catalogEntry.clear('invalidate').done(function () {
+              self.database().load(function () {
+                setTableAfterLoad(false);
+              });
             });
-            self.database().load(function () {
-              setTableAfterLoad(false);
-            }, self.optimizerEnabled(), self.navigatorEnabled(), self.sourceType());
           } else {
             self.loadingTable(false);
           }
@@ -282,7 +279,7 @@ var MetastoreViewModel = (function () {
   MetastoreViewModel.prototype.setDatabaseByName = function (databaseName, callback) {
     var self = this;
 
-    var whenLoaded = function () {
+    var whenLoaded = function (clearCacheOnMissing) {
       if (databaseName === '') {
         databaseName = self.apiHelper.getFromTotalStorage('editor', 'last.selected.database') ||
             self.apiHelper.getFromTotalStorage('metastore', 'last.selected.database') || 'default';
@@ -298,6 +295,12 @@ var MetastoreViewModel = (function () {
       });
       if (foundDatabases.length === 1) {
         self.setDatabase(foundDatabases[0], callback);
+      } else if (clearCacheOnMissing) {
+        self.catalogEntry().clear('invalidate').done(function () {
+          self.loadDatabases().done(function () {
+            whenLoaded(false)
+          })
+        })
       } else {
         foundDatabases = self.databases().filter(function (database) {
           return database.catalogEntry.name === 'default';
@@ -311,9 +314,11 @@ var MetastoreViewModel = (function () {
     };
 
     if (self.loadingDatabases() && lastLoadDatabasesPromise !== null) {
-      lastLoadDatabasesPromise.done(whenLoaded);
+      lastLoadDatabasesPromise.done(function () {
+        whenLoaded(true);
+      });
     } else {
-      whenLoaded();
+      whenLoaded(true);
     }
   };
 

+ 3 - 1
apps/metastore/src/metastore/templates/metastore.mako

@@ -550,7 +550,7 @@ ${ components.menubar(is_embeddable) }
             </tr>
           </tbody>
         </table>
-        <span data-bind="visible: filteredTables().length === 0, css: { 'margin-left-10': tables().length > 0 }" style="font-style: italic; display: none;">${_('No tables found.')}</span>
+        <div data-bind="visible: filteredTables().length === 0, css: { 'margin-left-10': tables().length > 0 }" style="font-style: italic; display: none;">${_('No tables found.')}</div>
       </div>
     </div>
 
@@ -705,8 +705,10 @@ ${ components.menubar(is_embeddable) }
           ${_('View more...')}
         </a>
         <!-- /ko -->
+        <!-- ko if: metastoreTable.tableDetails() -->
         <div data-bind="visible: !rows().length && metastoreTable.tableDetails().is_view" style="display: none;">${ _('The view does not contain any data.') }</div>
         <div data-bind="visible: !rows().length && !metastoreTable.tableDetails().is_view" style="display: none;">${ _('The table does not contain any data.') }</div>
+        <!-- /ko -->
       <!-- /ko -->
       <!-- ko if: hasErrors() -->
       <div>${ _('Could not load the sample, see the server log for details.') }</div>

+ 0 - 4
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -169,10 +169,6 @@ var ApiHelper = (function () {
       self.invalidateImpala = details;
     });
 
-    huePubSub.subscribe('assist.clear.db.cache', function (options) {
-      self.clearDbCache(options);
-    });
-
     huePubSub.subscribe('assist.clear.hdfs.cache', function () {
       $.totalStorage(self.getAssistCacheIdentifier({ sourceType: 'hdfs' }), {});
     });

+ 0 - 28
desktop/core/src/desktop/static/desktop/js/assist/assistDbSource.js

@@ -281,34 +281,6 @@ var AssistDbSource = (function () {
       $container.find(".assist-actions, .assist-db-header-actions").css('right', -$container.scrollLeft() + 'px');
     };
 
-    self.reload = function(allCacheTypes) {
-      if (self.invalidateOnRefresh() !== 'cache') {
-        huePubSub.publish('assist.invalidate.impala', {
-          flush: self.invalidateOnRefresh() === 'invalidateAndFlush',
-          database: self.selectedDatabase() ? self.selectedDatabase().catalogEntry.name : null
-        });
-      }
-
-      self.reloading(true);
-      huePubSub.publish('assist.clear.db.cache', {
-        sourceType: self.sourceType,
-        clearAll: true
-      });
-      if (allCacheTypes) {
-        huePubSub.publish('assist.clear.db.cache', {
-          sourceType: self.sourceType,
-          cacheType: 'optimizer',
-          clearAll: true
-        });
-      }
-      self.invalidateOnRefresh('cache');
-      self.initDatabases();
-    };
-
-    huePubSub.subscribe('assist.invalidate.on.refresh', function () {
-      self.invalidateOnRefresh('invalidate');
-    });
-
     huePubSub.subscribe('data.catalog.entry.refreshed', function (refreshedEntry) {
       if (self.catalogEntry === refreshedEntry) {
         self.initDatabases();

+ 14 - 6
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -1979,28 +1979,36 @@ ${ assist.assistPanel() }
 
             self.editorVM.openNotebook(resp.history_uuid, null, true, function(){
               self.editorVM.selectedNotebook().snippets()[0].progress.subscribe(function(val){
-                if (val == 100) {
+                if (val === 100) {
                   self.indexingStarted(false);
                   self.isIndexing(false);
                   self.indexingSuccess(true);
                 }
               });
               self.editorVM.selectedNotebook().snippets()[0].status.subscribe(function(val){
-                if (val == 'failed') {
+                if (val === 'failed') {
                   self.isIndexing(false);
                   self.indexingStarted(false);
                   self.indexingError(true);
-                } else if (val == 'available') {
+                } else if (val === 'available') {
                   var snippet = self.editorVM.selectedNotebook().snippets()[0]; // Could be native to editor at some point
                   if (!snippet.result.handle().has_more_statements) {
                     if (self.editorVM.selectedNotebook().onSuccessUrl()) {
                       var match = snippet.statement_raw().match(/CREATE TABLE `([^`]+)`/i);
                       if (match) {
                         var db = match[1];
-                        huePubSub.publish('assist.invalidate.impala', { flush: false, database: db });
+                        DataCatalog.getEntry({ sourceType: snippet.type(), path: [ db ]}).done(function (dbEntry) {
+                          dbEntry.clear('invalidate').done(function () {
+                            window.location.href = self.editorVM.selectedNotebook().onSuccessUrl();
+                          })
+                        });
+                      } else {
+                        DataCatalog.getEntry({ sourceType: snippet.type(), path: []}).done(function (sourceEntry) {
+                          sourceEntry.clear().done(function () {
+                            window.location.href = self.editorVM.selectedNotebook().onSuccessUrl();
+                          })
+                        });
                       }
-                      huePubSub.publish('assist.clear.db.cache', { sourceType: self.source.apiHelperType() });
-                      window.location.href = self.editorVM.selectedNotebook().onSuccessUrl();
                     }
                   } else { // Perform last DROP statement execute
                     snippet.execute();