Procházet zdrojové kódy

HUE-7820 [metastore] Don't refresh the analysis on load and load DB metadata via the DataCatalog

Johan Ahlen před 7 roky
rodič
revize
a1c726d0cf

+ 10 - 23
apps/metastore/src/metastore/static/metastore/js/metastore.model.js

@@ -32,7 +32,7 @@ var MetastoreDatabase = (function () {
 
 
     self.comment = ko.observable();
     self.comment = ko.observable();
 
 
-    self.stats = ko.observable(); // TODO: add to DataCatalogEntry
+    self.stats = ko.observable();
     self.navigatorMeta = ko.observable();
     self.navigatorMeta = ko.observable();
 
 
     self.showAddTagName = ko.observable(false);
     self.showAddTagName = ko.observable(false);
@@ -120,12 +120,7 @@ var MetastoreDatabase = (function () {
       }
       }
     });
     });
 
 
-    // TODO: Move to ApiHelper (via DataCatalogEntry)
-    $.getJSON('/metastore/databases/' + self.catalogEntry.name + '/metadata', function (data) {
-      if (data && data.status == 0) {
-        self.stats(data.data);
-      }
-    });
+    self.catalogEntry.getAnalysis().done(self.stats);
 
 
 
 
     self.apiHelper.setInTotalStorage('metastore', 'last.selected.database', self.name);
     self.apiHelper.setInTotalStorage('metastore', 'last.selected.database', self.name);
@@ -403,26 +398,19 @@ var MetastoreTable = (function () {
       });
       });
     });
     });
 
 
-    // TODO: Move stats to DataCatalogEntry
     self.refreshTableStats = function () {
     self.refreshTableStats = function () {
       if (self.refreshingTableStats()) {
       if (self.refreshingTableStats()) {
         return;
         return;
       }
       }
       self.refreshingTableStats(true);
       self.refreshingTableStats(true);
-      self.apiHelper.refreshTableStats({
-        tableName: self.catalogEntry.name,
-        databaseName: self.database.catalogEntry.name,
-        sourceType: self.catalogEntry.getSourceType(),
-        successCallback: function () {
-          self.fetchDetails();
-        },
-        errorCallback: function (data) {
-          self.refreshingTableStats(false);
-          $.jHueNotify.error(HUE_I18n.metastore.errorRefreshingTableStats);
-          console.error('apiHelper.refreshTableStats error');
-          console.error(data);
-        }
-      })
+      self.catalogEntry.getAnalysis({ refreshAnalysis: true, silenceErrors: true }).done(function () {
+        self.fetchDetails();
+      }).fail(function () {
+        self.refreshingTableStats(false);
+        $.jHueNotify.error(HUE_I18n.metastore.errorRefreshingTableStats);
+        console.error('apiHelper.refreshTableStats error');
+        console.error(data);
+      });
     };
     };
 
 
     self.fetchFields = function () {
     self.fetchFields = function () {
@@ -545,7 +533,6 @@ var MetastoreTable = (function () {
     }
     }
     self.loading(true);
     self.loading(true);
     self.fetchFields();
     self.fetchFields();
-    self.refreshTableStats();
     self.fetchDetails();
     self.fetchDetails();
     huePubSub.publish('metastore.loaded.table');
     huePubSub.publish('metastore.loaded.table');
   };
   };

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

@@ -459,8 +459,7 @@ ${ components.menubar(is_embeddable) }
             <!-- ko if: $root.navigatorEnabled()  -->
             <!-- ko if: $root.navigatorEnabled()  -->
             <h4>${ _('Tags') }</h4>
             <h4>${ _('Tags') }</h4>
             <div style="margin-top: 5px" data-bind="component: { name: 'nav-tags', params: {
             <div style="margin-top: 5px" data-bind="component: { name: 'nav-tags', params: {
-              sourceType: $root.sourceType(),
-              database: db_name
+              catalogEntry: $parent.catalogEntry
             }}"></div>
             }}"></div>
             <!-- /ko -->
             <!-- /ko -->
         </div>
         </div>

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

@@ -1646,21 +1646,37 @@ var ApiHelper = (function () {
     var self = this;
     var self = this;
     var deferred = $.Deferred();
     var deferred = $.Deferred();
 
 
-    var url = '/' + (options.sourceType === 'hive' ? 'beeswax' : options.sourceType) + '/api/table/' + options.path[0];
+    var url;
 
 
-    if (options.path.length > 1) {
-      url += '/' + options.path[1];
-    }
+    if (options.path.length === 1) {
+      url = '/metastore/databases/' + options.path[0] + '/metadata';
+    } else {
+      url = '/' + (options.sourceType === 'hive' ? 'beeswax' : options.sourceType) + '/api/table/' + options.path[0];
 
 
-    if (options.path.length > 2) {
-      url += '/stats/' + options.path.slice(2).join('/');
+      if (options.path.length > 1) {
+        url += '/' + options.path[1];
+      }
+
+      if (options.path.length > 2) {
+        url += '/stats/' + options.path.slice(2).join('/');
+      }
     }
     }
 
 
     var request = self.simpleGet(url, {
     var request = self.simpleGet(url, {
       'format' : 'json'
       'format' : 'json'
     }, {
     }, {
       silenceErrors: options.silenceErrors,
       silenceErrors: options.silenceErrors,
-      successCallback: deferred.resolve,
+      successCallback: function (response) {
+        if (options.path.length === 1) {
+          if (response.data) {
+            deferred.resolve(response.data);
+          } else {
+            deferred.reject();
+          }
+        } else {
+          deferred.resolve(response)
+        }
+      },
       errorCallback: deferred.reject
       errorCallback: deferred.reject
     });
     });
 
 
@@ -1680,6 +1696,10 @@ var ApiHelper = (function () {
    */
    */
   ApiHelper.prototype.refreshAnalysis = function (options) {
   ApiHelper.prototype.refreshAnalysis = function (options) {
     var self = this;
     var self = this;
+
+    if (options.path.length === 1) {
+      return self.fetchAnalysis(options);
+    }
     var deferred = $.Deferred();
     var deferred = $.Deferred();
 
 
     var promises = [];
     var promises = [];

+ 4 - 1
desktop/core/src/desktop/static/desktop/js/dataCatalog.js

@@ -395,6 +395,7 @@ var DataCatalog = (function () {
    */
    */
   DataCatalogEntry.prototype.save = function () {
   DataCatalogEntry.prototype.save = function () {
     var self = this;
     var self = this;
+    window.clearTimeout(self.saveTimeout);
     return self.dataCatalog.updateStore(self);
     return self.dataCatalog.updateStore(self);
   };
   };
 
 
@@ -783,6 +784,7 @@ var DataCatalog = (function () {
           if (response && response.entity) {
           if (response && response.entity) {
             self.navigatorMeta = response.entity;
             self.navigatorMeta = response.entity;
             self.navigatorMetaPromise = $.Deferred().resolve(self.navigatorMeta).promise();
             self.navigatorMetaPromise = $.Deferred().resolve(self.navigatorMeta).promise();
+            self.saveLater();
           } else {
           } else {
             deferred.reject();
             deferred.reject();
           }
           }
@@ -815,6 +817,7 @@ var DataCatalog = (function () {
             if (response && response.entity) {
             if (response && response.entity) {
               self.navigatorMeta = response.entity;
               self.navigatorMeta = response.entity;
               self.navigatorMetaPromise = $.Deferred().resolve(self.navigatorMeta).promise();
               self.navigatorMetaPromise = $.Deferred().resolve(self.navigatorMeta).promise();
+              self.saveLater();
             } else {
             } else {
               deferred.reject();
               deferred.reject();
             }
             }
@@ -1230,7 +1233,7 @@ var DataCatalog = (function () {
               }
               }
             }
             }
           });
           });
-          sharedDataCalogStore.setItem('hue.dataCatalog.allNavTags', allTags);
+          sharedDataCalogStore.setItem('hue.dataCatalog.allNavTags', { allTags: allTags, hueTimestamp: Date.now(), version: DATA_CATALOG_VERSION });
         });
         });
       }
       }
     },
     },

+ 1 - 0
desktop/core/src/desktop/templates/ko_components/ko_nav_tags.mako

@@ -133,6 +133,7 @@ from django.utils.translation import ugettext as _
         $.when(addTagsPromise, deleteTagsPromise).done(function () {
         $.when(addTagsPromise, deleteTagsPromise).done(function () {
           if (tagsToAdd.length || tagsToRemove.length) {
           if (tagsToAdd.length || tagsToRemove.length) {
             DataCatalog.updateAllNavigatorTags(tagsToAdd, tagsToRemove);
             DataCatalog.updateAllNavigatorTags(tagsToAdd, tagsToRemove);
+            self.catalogEntry.save();
           }
           }
           self.loading(false);
           self.loading(false);
           self.loadTags();
           self.loadTags();