Kaynağa Gözat

HUE-8591 [cluster] Clear the compute cache on namespace refresh from left assist

Johan Ahlen 7 yıl önce
ebeveyn
işleme
673e7649e2

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

@@ -119,6 +119,10 @@ var AssistDbSource = (function () {
     var self = this;
     self.loading(true);
 
+    if (refresh) {
+      ContextCatalog.getComputes({ sourceType: self.sourceType, clearCache: true });
+    }
+
     return ContextCatalog.getNamespaces({ sourceType: self.sourceType, clearCache: refresh }).done(function (context) {
       var assistNamespaces = [];
       var activeNamespace;

+ 7 - 1
desktop/core/src/desktop/static/desktop/js/contextCatalog.js

@@ -134,7 +134,7 @@ var ContextCatalog = (function () {
               });
               self.namespaces[options.sourceType] = { namespaces: namespaces.filter(function (namespace) {
                 return namespace.name; // Only include namespaces with a name.
-              }), dynamic: dynamic };
+              }), dynamic: dynamic, hueTimestamp: Date.now() };
               deferred.resolve(self.namespaces[options.sourceType]);
               if (notifyForRefresh) {
                 huePubSub.publish('context.catalog.namespaces.refreshed', options.sourceType);
@@ -170,11 +170,17 @@ var ContextCatalog = (function () {
      * @param {Object} options
      * @param {string} options.sourceType
      * @param {boolean} [options.silenceErrors] - Default False
+     * @param {boolean} [options.clearCache] - Default False
      * @return {Promise}
      */
     ContextCatalog.prototype.getComputes = function (options) {
       var self = this;
 
+      if (options.clearCache) {
+        self.computePromises[options.sourceType] = undefined;
+        self.computes[options.sourceType] = undefined;
+      }
+
       if (self.computePromises[options.sourceType]) {
         return self.computePromises[options.sourceType];
       }

+ 17 - 19
desktop/core/src/desktop/templates/ko_components/ko_context_selector.mako

@@ -179,28 +179,26 @@ from desktop.views import _ko
             self.loadingComputes(true);
             self.lastComputesPromise = ContextCatalog.getComputes({ sourceType: ko.unwrap(self.sourceType) }).done(function (computes) {
               self.availableComputes(computes);
-              if (!self.compute() && apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute')) {
-                var lastSelectedCompute = apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute');
-                var found = computes.some(function (compute) {
-                  if (compute.id === lastSelectedCompute.id) {
-                    self.compute(lastSelectedCompute);
-                    return true;
-                  }
-                });
 
-                // If we can't find exact match we pick first based on type
-                if (!found) {
-                  computes.some(function (compute) {
-                    if (compute.type === lastSelectedCompute.type) {
-                      self.compute(compute);
-                      return true;
-                    }
-                  });
-                }
+              if (!self.compute()) {
+                self.compute(apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute'));
               }
 
-              if (!self.compute()) {
-                self.compute(computes[0]);
+              if (!self.compute() || !computes.some(function (compute) {
+                if (compute.id === self.compute().id) {
+                  self.compute(compute);
+                  return true;
+                }})) {
+
+                // If we can't find exact match we pick first based on type
+                if (!computes.some(function (compute) {
+                  if (compute.type === lastSelectedCompute.type) {
+                    self.compute(compute);
+                    return true;
+                  }
+                })) {
+                  self.compute(computes[0]);
+                }
               }
 
               var computeSub = self.compute.subscribe(function (newCompute) {