Browse Source

HUE-8010 [metastore] Load comments from the parent entry instead of for each table or column

Johan Ahlen 7 năm trước cách đây
mục cha
commit
08ac4b8

+ 6 - 2
apps/metastore/src/metastore/static/metastore/js/metastore.model.js

@@ -474,7 +474,9 @@ var MetastoreTable = (function () {
     self.fetchDetails = function () {
       self.loadingDetails(true);
 
-      self.catalogEntry.getComment().done(self.comment);
+      self.database.catalogEntry.loadNavigatorMetaForChildren().done(function () {
+        self.catalogEntry.getComment().done(self.comment);
+      });
 
       self.catalogEntry.getAnalysis().done(function (analysis) {
         self.loadingDetails(false);
@@ -625,7 +627,9 @@ var MetastoreColumn = (function () {
       });
     });
 
-    self.catalogEntry.getComment().done(self.comment);
+    self.table.catalogEntry.loadNavigatorMetaForChildren().done(function () {
+      self.catalogEntry.getComment().done(self.comment);
+    });
   }
 
   MetastoreColumn.prototype.showContextPopover = function (entry, event) {

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -1723,7 +1723,7 @@ var ApiHelper = (function () {
       silenceErrors: options.silenceErrors,
       successCallback: function (response) {
         if (response.status === 0 && response.details) {
-          resonse.details.hueTimestamp = Date.now();
+          response.details.hueTimestamp = Date.now();
           deferred.resolve(response.details);
         } else {
           deferred.reject();

+ 36 - 18
desktop/core/src/desktop/static/desktop/js/dataCatalog.js

@@ -824,30 +824,42 @@ var DataCatalog = (function () {
           query = 'type:database'
         }
 
+        var rejectUnknown = function () {
+          children.forEach(function (childEntry) {
+            if (!childEntry.navigatorMeta) {
+              childEntry.navigatorMeta = {};
+              childEntry.navigatorMetaPromise = $.Deferred().reject().promise();
+            }
+          });
+        };
+
         cancellablePromises.push(ApiHelper.getInstance().searchEntities({
           query: query,
           rawQuery: true,
           limit: children.length,
           silenceErrors: options && options.silenceErrors
         }).done(function (result) {
-          if (result && result.entities && result.entities.length > 0) {
-            var entryPromises = [];
-            result.entities.forEach(function (entity) {
-              var entryPromise = self.dataCatalog.getEntry({ path: self.path.concat((entity.name || entity.originalName).toLowerCase())}).done(function(catalogEntry) {
-                catalogEntry.navigatorMeta = entity;
-                catalogEntry.navigatorMetaPromise = $.Deferred().resolve(catalogEntry.navigatorMeta).promise();
-                catalogEntry.saveLater();
-              });
-              entryPromises.push(entryPromise);
-              cancellablePromises.push(entryPromise);
+          if (result && result.entities) {
+            var childEntryIndex = {};
+            children.forEach(function (childEntry) {
+              childEntryIndex[childEntry.name.toLowerCase()] = childEntry;
             });
-            $.when.apply($, entryPromises).done(function () {
-              deferred.resolve(Array.prototype.slice.call(arguments));
+
+            result.entities.forEach(function (entity) {
+              var matchingChildEntry = childEntryIndex[(entity.name || entity.originalName).toLowerCase()];
+              if (matchingChildEntry) {
+                matchingChildEntry.navigatorMeta = entity;
+                matchingChildEntry.navigatorMetaPromise = $.Deferred().resolve(matchingChildEntry.navigatorMeta).promise();
+                matchingChildEntry.saveLater();
+              }
             });
-          } else {
-            deferred.resolve([]);
           }
-        }).fail(deferred.reject));
+          rejectUnknown();
+          deferred.resolve(children);
+        }).fail(function () {
+          rejectUnknown();
+          deferred.reject();
+        }));
       }).fail(deferred.reject));
 
       return applyCancellable(self.trackedPromise('navigatorMetaForChildrenPromise', new CancellablePromise(deferred, null, cancellablePromises)), options);
@@ -1018,7 +1030,9 @@ var DataCatalog = (function () {
 
       var resolveWithSourceMeta = function () {
         if (self.sourceMeta) {
-          deferred.resolve(self.sourceMeta && self.sourceMeta.comment || '');
+          deferred.resolve(self.sourceMeta.comment || '');
+        } else if (self.definition && typeof self.definition.comment !== 'undefined') {
+          deferred.resolve(self.definition.comment)
         } else {
           cancellablePromises.push(self.getSourceMeta(options).done(function (sourceMeta) {
             deferred.resolve(sourceMeta && sourceMeta.comment || '');
@@ -1027,7 +1041,11 @@ var DataCatalog = (function () {
       };
 
       if (self.canHaveNavigatorMetadata()) {
-        if (self.navigatorMeta) {
+        if (self.navigatorMetaPromise) {
+          self.navigatorMetaPromise.done(function () {
+            deferred.resolve(self.navigatorMeta.description || self.navigatorMeta.originalDescription || '');
+          }).fail(resolveWithSourceMeta);
+        } else if (self.navigatorMeta) {
           deferred.resolve(self.navigatorMeta.description || self.navigatorMeta.originalDescription || '');
         } else {
           cancellablePromises.push(self.getNavigatorMeta(options).done(function (navigatorMeta) {
@@ -1537,7 +1555,7 @@ var DataCatalog = (function () {
 
       var options = setSilencedErrors(options);
 
-      if (!self.catalogEntry.canHaveNavOptMetadata() || !self.isTableOrView()) {
+      if (!self.dataCatalog.canHaveNavOptMetadata() || !self.isTableOrView()) {
         return $.Deferred().reject().promise();
       }
       if (options && options.cachedOnly) {