瀏覽代碼

AMBARI-6337. Hosts page. Incorrect total number of hosts after filtering by installed component. (akovalenko)

Aleksandr Kovalenko 11 年之前
父節點
當前提交
bb883731cc

+ 7 - 1
ambari-web/app/controllers/global/update_controller.js

@@ -226,8 +226,14 @@ App.UpdateController = Em.Controller.extend({
     var preLoadKeys = this.get('hostsPreLoadKeys');
     var queryParams = this.get('queryParams.Hosts');
     var hostNames = data.items.mapProperty('Hosts.host_name');
-    var skipCall = hostNames.length === 0;
 
+    var itemTotal = parseInt(data.itemTotal);
+    if (!isNaN(itemTotal) && itemTotal!==undefined && itemTotal!==null) {
+      App.router.set('mainHostController.filteredCount', itemTotal);
+      App.router.set('mainHostController.setFilteredCount', false);
+    }
+
+    var skipCall = hostNames.length === 0;
     if (skipCall) {
       params.callback(skipCall);
     } else {

+ 4 - 0
ambari-web/app/controllers/main/host.js

@@ -27,6 +27,10 @@ App.MainHostController = Em.ArrayController.extend({
   clearFilters: null,
 
   filteredCount: 0,
+
+  // either set <code>filteredCount</code> property in hosts mapper, or it will be set in <code>getHostByHostComponentsSuccessCallback</code>
+  setFilteredCount: true,
+
   resetStartIndex: false,
   /**
    * flag responsible for updating status counters of hosts

+ 6 - 1
ambari-web/app/mappers/hosts_mapper.js

@@ -107,9 +107,14 @@ App.hostsMapper = App.QuickDataMapper.create({
       App.store.commit();
       App.store.loadMany(App.HostComponent, components);
       App.store.loadMany(App.Host, hostsWithFullInfo);
+
+      // check if <code>mainHostController.filteredCount</code> is already set in <code>getHostByHostComponentsSuccessCallback</code>
+      var setFilteredCount = App.router.get('mainHostController.setFilteredCount');
       var itemTotal = parseInt(json.itemTotal);
-      if (!isNaN(itemTotal) && itemTotal!==undefined && itemTotal!==null) {
+      if (setFilteredCount && !isNaN(itemTotal) && itemTotal!==undefined && itemTotal!==null) {
         App.router.set('mainHostController.filteredCount', itemTotal);
+      } else {
+        App.router.set('mainHostController.setFilteredCount', true);
       }
     }
     console.timeEnd('App.hostsMapper execution time');