Browse Source

AMBARI-2624. UI Service mapper inefficiently parses server data. (srimanth)

Srimanth Gunturi 12 years ago
parent
commit
94ee80d7b4

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

@@ -84,7 +84,7 @@ App.UpdateController = Em.Controller.extend({
       conditionalFields.push("components/host_components/metrics/flume/flume");
     }
     var conditionalFieldsString = conditionalFields.length > 0 ? ',' + conditionalFields.join(',') : '';
-    
+    var methodStartTs = new Date().getTime();
     var servicesUrl = isInitialLoad ? 
       //this.getUrl('/data/dashboard/services.json', '/services?fields=components/ServiceComponentInfo,components/host_components,components/host_components/HostRoles') :
       this.getUrl('/data/dashboard/services.json', '/services?fields=components/ServiceComponentInfo,components/host_components,components/host_components/HostRoles,components/host_components/metrics/jvm/memHeapUsedM,components/host_components/metrics/jvm/memHeapCommittedM,components/host_components/metrics/mapred/jobtracker/trackers_decommissioned,components/host_components/metrics/cpu/cpu_wio,components/host_components/metrics/rpc/RpcQueueTime_avg_time'+conditionalFieldsString):
@@ -92,9 +92,12 @@ App.UpdateController = Em.Controller.extend({
     var callback = callback || function (jqXHR, textStatus) {
       self.set('isUpdated', true);
     };
-      App.HttpClient.get(servicesUrl, App.servicesMapper, {
-        complete: callback
-      });
+    App.HttpClient.get(servicesUrl, App.servicesMapper, {
+      complete: function(){
+        console.log("UpdateServiceMetric() Finished in:"+ (new Date().getTime()-methodStartTs) + " ms");
+        callback();
+      }
+    });
   }
 
 });

+ 15 - 3
ambari-web/app/mappers/service_mapper.js

@@ -213,18 +213,30 @@ App.servicesMapper = App.QuickDataMapper.create({
 
       var oldHostComponents = App.HostComponent.find();
       var item;
-      for (var i = 0; i < oldHostComponents.content.length; i++) {
+      var currentHCWithComponentNames = {};
+      var currentComponentNameHostNames = {};
+      for ( var i = 0; i < oldHostComponents.content.length; i++) {
         item = oldHostComponents.objectAt(i);
         if (item && !result.findProperty('id', item.get('id'))) {
           item.deleteRecord();
+        } else {
+          var componentName = item.get('componentName');
+          if (componentName) {
+            currentHCWithComponentNames[item.get('id')] = item.get('id');
+          }
+          if (!currentComponentNameHostNames[componentName]) {
+            currentComponentNameHostNames[componentName] = [];
+          }
+          currentComponentNameHostNames[componentName].pushObject(item.get('host.hostName'));
         }
       }
       result.forEach(function (item) {
-        if (App.HostComponent.find(item.id).get('componentName') &&
-            !App.HostComponent.find().filterProperty('componentName', item.component_name).someProperty('host.hostName', item.host_id)) {
+        if (currentHCWithComponentNames[item.id] != null && 
+            !currentComponentNameHostNames[item.component_name].contains(item.host_id)) {
           item.id = (new Date).getTime();
         }
       });
+      
       App.store.loadMany(this.get('model3'), result);
       for(var hostComponentId in hostComponentToActualConfigsMap){
         var hostComponentObj = App.HostComponent.find(hostComponentId);