Преглед изворни кода

AMBARI-12715. FE: Adding 1000 hosts to config group takes 50-60 seconds to process (onechiporenko)

Oleg Nechiporenko пре 9 година
родитељ
комит
ce7f89923e

+ 9 - 9
ambari-web/app/controllers/main/service/manage_config_groups_controller.js

@@ -493,32 +493,32 @@ App.ManageConfigGroupsController = Em.Controller.extend(App.ConfigOverridable, {
   },
 
   /**
-   * add hosts callback
+   * Remove selected hosts from default group (<code>selectedConfigGroup.parentConfigGroup</code>) and add them to the <code>selectedConfigGroup</code>
    * @param {string[]} selectedHosts
    * @method addHostsCallback
    */
   addHostsCallback: function (selectedHosts) {
     if (selectedHosts) {
       var group = this.get('selectedConfigGroup');
-      selectedHosts.forEach(function (hostName) {
-        group.get('hosts').pushObject(hostName);
-        group.get('parentConfigGroup.hosts').removeObject(hostName);
+      var parentGroupHosts = group.get('parentConfigGroup.hosts');
+      var newHostsForParentGroup = parentGroupHosts.filter(function(hostName) {
+        return !selectedHosts.contains(hostName);
       });
+      group.get('hosts').pushObjects(selectedHosts);
+      group.set('parentConfigGroup.hosts', newHostsForParentGroup);
     }
   },
 
   /**
-   * delete hosts from group
+   * Delete hosts from <code>selectedConfigGroup</code> and move them to the Default group (<code>selectedConfigGroup.parentConfigGroup</code>)
    * @method deleteHosts
    */
   deleteHosts: function () {
     if (this.get('isDeleteHostsDisabled')) {
       return;
     }
-    this.get('selectedHosts').slice().forEach(function (hostName) {
-      this.get('selectedConfigGroup.parentConfigGroup.hosts').pushObject(hostName);
-      this.get('selectedConfigGroup.hosts').removeObject(hostName);
-    }, this);
+    var hosts = this.get('selectedHosts').slice();
+    this.get('selectedConfigGroup.parentConfigGroup.hosts').pushObjects(hosts);
     this.set('selectedHosts', []);
   },
 

+ 32 - 0
ambari-web/test/controllers/main/service/manage_config_groups_controller_test.js

@@ -18,12 +18,14 @@
 
 var App = require('app');
 var c;
+
 describe('App.ManageConfigGroupsController', function() {
   var controller = App.ManageConfigGroupsController.create({});
 
   beforeEach(function() {
     c = App.ManageConfigGroupsController.create({});
   });
+
 	var manageConfigGroupsController = App.ManageConfigGroupsController.create({});
 
 	describe('#addConfigGroup', function() {
@@ -157,6 +159,36 @@ describe('App.ManageConfigGroupsController', function() {
 
   });
 
+  describe('#deleteConfigGroup', function () {
+
+    beforeEach(function() {
+
+      var defaultGroup = Em.Object.create({
+        hosts: ['h2', 'h3'],
+        isDefault: true
+      });
+
+      var selectedGroup = Em.Object.create({
+        hosts: ['h1'],
+        parentConfigGroup: defaultGroup
+      });
+
+      c.reopen({
+        configGroups: [defaultGroup, selectedGroup],
+        selectedConfigGroup: selectedGroup
+      });
+    });
+
+    it('after deleting some config group, Default should be selected', function () {
+
+      c.deleteConfigGroup();
+
+      expect(c.get('selectedConfigGroup.hosts')).to.include.members(['h1','h2','h3']);
+      expect(c.get('selectedConfigGroup.isDefault')).to.be.true;
+    });
+
+  });
+
   describe("#manageConfigurationGroups", function () {
     var service = Em.Object.create({});
     manageConfigGroupsController.set('hostsModifiedConfigGroups', {});