Browse Source

AMBARI-3514 Eliminate updating of immutable properties for hosts. (atkach)

atkach 11 years ago
parent
commit
d26023841a

+ 10 - 8
ambari-web/app/controllers/global/cluster_controller.js

@@ -312,8 +312,7 @@ App.ClusterController = Em.Controller.extend({
       return;
     }
     var clusterUrl = this.getUrl('/data/clusters/cluster.json', '?fields=Clusters');
-    var testHostUrl =  App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json':'/data/hosts/hosts.json';
-    var hostsUrl = this.getUrl(testHostUrl, '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/disk_info,Hosts/cpu_count,Hosts/total_mem,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,metrics/disk,metrics/load/load_one');
+    var hostsRealUrl = '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/cpu_count,Hosts/total_mem,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,metrics/disk,metrics/load/load_one';
     var usersUrl = App.testMode ? '/data/users/users.json' : App.apiPrefix + '/users/?fields=*';
     var racksUrl = "/data/racks/racks.json";
     var dataSetUrl = "/data/mirroring/all_datasets.json";
@@ -360,12 +359,8 @@ App.ClusterController = Em.Controller.extend({
       });
     }
     
-    App.HttpClient.get(hostsUrl, App.hostsMapper, {
-      complete:function (jqXHR, textStatus) {
-        self.updateLoadStatus('hosts');
-      }
-    }, function (jqXHR, textStatus) {
-        self.updateLoadStatus('hosts');
+    this.requestHosts(hostsRealUrl, function (jqXHR, textStatus) {
+      self.updateLoadStatus('hosts');
     });
 
     App.HttpClient.get(usersUrl, App.usersMapper, {
@@ -388,6 +383,13 @@ App.ClusterController = Em.Controller.extend({
     });
   },
 
+  requestHosts: function(realUrl, callback){
+    var testHostUrl =  App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json':'/data/hosts/hosts.json';
+    var url = this.getUrl(testHostUrl, realUrl);
+    App.HttpClient.get(url, App.hostsMapper, {
+      complete: callback
+    }, callback)
+  },
 
   loadAmbariProperties: function() {
     App.ajax.send({

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

@@ -44,9 +44,8 @@ App.UpdateController = Em.Controller.extend({
   }.observes('isWorking'),
 
   updateHost:function(callback) {
-    var self = this;
     var testUrl =  App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json':'/data/hosts/hosts.json';
-      var hostsUrl = this.getUrl(testUrl, '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/disk_info,Hosts/cpu_count,Hosts/total_mem,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,metrics/disk,metrics/load/load_one');
+      var hostsUrl = this.getUrl(testUrl, '/hosts?fields=Hosts/host_name,Hosts/host_status,Hosts/last_heartbeat_time,host_components,metrics/disk,metrics/load/load_one');
       App.HttpClient.get(hostsUrl, App.hostsMapper, {
         complete: callback
       });

+ 14 - 0
ambari-web/app/mappers/hosts_mapper.js

@@ -16,6 +16,7 @@
  */
 
 var App = require('app');
+var cacheData = {};
 
 App.hostsMapper = App.QuickDataMapper.create({
 
@@ -56,6 +57,7 @@ App.hostsMapper = App.QuickDataMapper.create({
         var serverHostIds = {};
         result.forEach(function (host) {
           serverHostIds[host.id] = host.id;
+          cacheData[host.id] = host;
         });
         var hostsToDelete = [];
         clientHosts.forEach(function (host) {
@@ -69,6 +71,18 @@ App.hostsMapper = App.QuickDataMapper.create({
           host.deleteRecord();
         });
       }
+      //restore properties from cache instead request them from server
+      result.forEach(function (host) {
+        var cacheHost = cacheData[host.id];
+        if (cacheHost) {
+          host.ip = cacheHost.ip;
+          host.os_arch = cacheHost.os_arch;
+          host.os_type = cacheHost.os_type;
+          host.public_host_name = cacheHost.public_host_name;
+          host.memory = cacheHost.memory;
+          host.cpu = cacheHost.cpu;
+        }
+      });
       App.store.loadMany(this.get('model'), result);
     }
   },

+ 4 - 0
ambari-web/app/routes/add_host_routes.js

@@ -280,6 +280,10 @@ module.exports = Em.Route.extend({
     back: Em.Router.transitionTo('step5'),
     complete: function (router, context) {
       var addHostController = router.get('addHostController');
+      var hostsUrl = '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/cpu_count,Hosts/total_mem,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,metrics/disk,metrics/load/load_one';
+      router.get('clusterController').requestHosts(hostsUrl, function () {
+        console.log('Request for hosts, with immutable parameters')
+      });
       router.get('updateController').updateAll();
       addHostController.finish();
       $(context.currentTarget).parents("#modal").find(".close").trigger('click');

+ 4 - 0
ambari-web/app/routes/add_service_routes.js

@@ -27,6 +27,10 @@ module.exports = Em.Route.extend({
       Em.run.next(function () {
         var addServiceController = router.get('addServiceController');
         App.router.get('updateController').set('isWorking', false);
+        var hostsUrl = '/hosts?fields=Hosts/host_name,Hosts/disk_info';
+        router.get('clusterController').requestHosts(hostsUrl, function () {
+          console.log('Request for hosts, with disk_info parameter');
+        });
         App.ModalPopup.show({
           classNames: ['full-width-modal'],
           header:Em.I18n.t('services.add.header'),

+ 4 - 0
ambari-web/app/routes/reassign_master_routes.js

@@ -24,6 +24,10 @@ module.exports = Em.Route.extend({
       Em.run.next(function () {
         var reassignMasterController = router.get('reassignMasterController');
         App.router.get('updateController').set('isWorking', false);
+        var hostsUrl = '/hosts?fields=Hosts/host_name,Hosts/disk_info';
+        router.get('clusterController').requestHosts(hostsUrl, function () {
+          console.log('Request for hosts, with disk_info parameter');
+        });
         var popup = App.ModalPopup.show({
           classNames: ['full-width-modal'],
           header:Em.I18n.t('services.reassign.header'),