Sfoglia il codice sorgente

HUE-8028 [metastore] Make invalidate calls more specific when we know the specific database or table

Johan Ahlen 7 anni fa
parent
commit
2fa3ad4

+ 7 - 9
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -184,11 +184,6 @@ var ApiHelper = (function () {
   function ApiHelper () {
     var self = this;
     self.queueManager = ApiQueueManager.getInstance();
-    self.invalidateImpala = null;
-
-    huePubSub.subscribe('assist.invalidate.impala', function (details) {
-      self.invalidateImpala = details;
-    });
 
     huePubSub.subscribe('assist.clear.hdfs.cache', function () {
       $.totalStorage(self.getAssistCacheIdentifier({ sourceType: 'hdfs' }), {});
@@ -1174,8 +1169,8 @@ var ApiHelper = (function () {
   /**
    * @param {Object} options
    * @param {string} options.sourceType
-   * @param {string} options.invalidate - [invalidate|invalidateAndFlush]
-   * @param {string} [options.database]
+   * @param {string} options.invalidate - 'invalidate' or 'invalidateAndFlush'
+   * @param {string[]} [options.path]
    * @param {boolean} [options.silenceErrors]
    */
   ApiHelper.prototype.invalidateSourceMetadata = function (options) {
@@ -1187,8 +1182,11 @@ var ApiHelper = (function () {
         flush_all: options.invalidate === 'invalidateAndFlush'
       };
 
-      if (options.database) {
-        data.database = options.database;
+      if (options.path && options.path.length > 0) {
+        data.database = options.path[0];
+      }
+      if (options.path && options.path.length > 1) {
+        data.table = options.path[1];
       }
 
       var request = self.simplePost(IMPALA_INVALIDATE_API, data, options).done(deferred.resolve).fail(deferred.reject);

+ 5 - 12
desktop/core/src/desktop/static/desktop/js/dataCatalog.js

@@ -639,18 +639,11 @@ var DataCatalog = (function () {
         if (self.dataCatalog.invalidatePromise) {
           invalidatePromise = self.dataCatalog.invalidatePromise;
         } else {
-          if (self.path.length) {
-            invalidatePromise = ApiHelper.getInstance().invalidateSourceMetadata({
-              sourceType: self.getSourceType(),
-              invalidate: invalidate,
-              database: self.path[0]
-            });
-          } else {
-            invalidatePromise = ApiHelper.getInstance().invalidateSourceMetadata({
-              sourceType: self.getSourceType(),
-              invalidate: invalidate
-            });
-          }
+          invalidatePromise = ApiHelper.getInstance().invalidateSourceMetadata({
+            sourceType: self.getSourceType(),
+            invalidate: invalidate,
+            path: self.path
+          });
           self.dataCatalog.invalidatePromise = invalidatePromise;
           invalidatePromise.always(function () {
             delete self.dataCatalog.invalidatePromise;

+ 12 - 5
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -870,14 +870,21 @@ var EditorViewModel = (function() {
     self.delayedDDLNotification = ko.pureComputed(self.ddlNotification).extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 5000 } });
     window.setTimeout(function () {
       self.delayedDDLNotification.subscribe(function (val) {
-        var match = self.statement().match(/(?:CREATE|DROP) (?:TABLE|DATABASE) `([^`]+)`/i); // For importer/metastore generated DDL only currently
+        var match = self.statement().match(/(?:CREATE|DROP)\s+TABLE\s+(?:IF\s+(?:NOT\s+)?EXISTS\s+)?(?:`([^`]+)`|([^;\s]+))\..*/i);
+        var path = [];
         if (match) {
-          var db = match[1];
-          huePubSub.publish('assist.invalidate.impala', { flush: false, database: db });
+          path.push(match[1] || match[2]); // group 1 backticked db name, group 2 regular db name
+        } else {
+          match = self.statement().match(/(?:CREATE|DROP)\s+(?:DATABASE|SCHEMA)\s+(?:IF\s+(?:NOT\s+)?EXISTS\s+)?(?:`([^`]+)`|([^;\s]+))/i);
+          if (match) {
+            path.push(match[1] || match[2]); // group 1 backticked db name, group 2 regular db name
+          } else if (self.database()) {
+            path.push(self.database());
+          }
         }
         ignoreNextAssistDatabaseUpdate = true;
-        DataCatalog.getEntry({ sourceType: self.type(), path: [] }).done(function (entry) {
-          entry.clear('cache', true);
+        DataCatalog.getEntry({ sourceType: self.type(), path: path }).done(function (entry) {
+          entry.clear('invalidate', true);
         });
       });
     }, 0);