Sfoglia il codice sorgente

[metastore] Clear assist helper cache for columns when column comment is changed

Johan Ahlen 10 anni fa
parent
commit
eb43a41

+ 10 - 2
apps/metastore/src/metastore/templates/describe_table.mako

@@ -460,8 +460,9 @@ ${ assist.assistPanel() }
     "ko.hue-bindings"
   ], function (ko, charts, AssistHelper) {
 
-    function MetastoreColumn(extendedColumn) {
+    function MetastoreColumn(vm, extendedColumn) {
       var self = this;
+      self.vm = vm;
       ko.mapping.fromJS(extendedColumn, {}, self);
 
       self.favourite = ko.observable(false);
@@ -470,6 +471,13 @@ ${ assist.assistPanel() }
         $.post("${ url('metastore:alter_column', database=database, table=table.name) }", {
           column: self.name(),
           comment: newValue
+        }, function () {
+          self.vm.assistHelper.clearCache({
+            sourceType: 'hive',
+            databaseName: self.vm.activeDatabase(),
+            tableName: self.vm.activeTable(),
+            fields: []
+          })
         });
       })
     }
@@ -501,7 +509,7 @@ ${ assist.assistPanel() }
         tableName: self.activeTable(),
         fields: [],
         successCallback: function(data) {
-          self.columns($.map(data.extended_columns, function(column) { return new MetastoreColumn(column) }));
+          self.columns($.map(data.extended_columns, function(column) { return new MetastoreColumn(self, column) }));
           self.favouriteColumns(self.columns().slice(0, 3));
         },
         errorCallback: function(message) {

+ 27 - 2
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -53,9 +53,34 @@
     return sourceType + "_" + self.user;
   };
 
-  AssistHelper.prototype.clearCache = function (sourceType) {
+  /**
+   *
+   * @param {Object} options
+   * @param {string} options.sourceType
+   * @param {string} [options.databaseName]
+   * @param {string} [options.tableName]
+   * @param {string[]} [options.fields]
+   * @param {boolean} [options.clearAll]
+   */
+  AssistHelper.prototype.clearCache = function (options) {
     var self = this;
-    $.totalStorage("hue.assist." + self.getTotalStorageUserPrefix(sourceType), {});
+    if (options.clearAll) {
+      $.totalStorage("hue.assist." + self.getTotalStorageUserPrefix(options.sourceType), {});
+    } else {
+      var url = API_PREFIX;
+      if (options.databaseName) {
+        url += options.databaseName;
+      }
+      if (options.tableName) {
+        url += "/" + options.tableName;
+      }
+      if (options.fields) {
+        url += options.fields.length > 0 ? "/" + options.fields.join("/") : "";
+      }
+      var cachedData = $.totalStorage("hue.assist." + self.getTotalStorageUserPrefix(options.sourceType)) || {};
+      delete cachedData[url];
+      $.totalStorage("hue.assist." + self.getTotalStorageUserPrefix(options.sourceType), cachedData);
+    }
   };
 
   /**

+ 4 - 1
desktop/core/src/desktop/static/desktop/js/assist/assistSource.js

@@ -143,7 +143,10 @@
 
     self.reload = function() {
       self.reloading(true);
-      self.assistHelper.clearCache(self.type);
+      self.assistHelper.clearCache({
+        sourceType: self.type,
+        clearAll: true
+      });
       self.initDatabases();
     };