Repository: ambari
Updated Branches:
  refs/heads/trunk 461ce541a -> 798357d81


AMBARI-12405. Host value not saved when going back in RM HA wizard 
(onechiporenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/798357d8
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/798357d8
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/798357d8

Branch: refs/heads/trunk
Commit: 798357d81e33882a5e918b0220effdc07c20d72c
Parents: 461ce54
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Tue Jul 14 15:03:51 2015 +0300
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Tue Jul 14 15:03:51 2015 +0300

----------------------------------------------------------------------
 .../nameNode/wizard_controller.js               | 25 -------
 .../main/service/reassign_controller.js         |  1 +
 ambari-web/app/controllers/wizard.js            | 26 +++++++
 .../mixins/wizard/assign_master_components.js   | 20 ++++--
 .../app/routes/high_availability_routes.js      |  5 +-
 .../app/routes/ra_high_availability_routes.js   |  5 +-
 ambari-web/app/routes/reassign_master_routes.js |  2 +
 .../app/routes/rm_high_availability_routes.js   |  5 +-
 .../main/service/reassign_controller_test.js    | 63 +++++++++++++++-
 ambari-web/test/controllers/wizard_test.js      | 75 ++++++++++++++++++++
 10 files changed, 187 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/controllers/main/admin/highAvailability/nameNode/wizard_controller.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/wizard_controller.js
 
b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/wizard_controller.js
index ae2fa60..134cb64 100644
--- 
a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/wizard_controller.js
+++ 
b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/wizard_controller.js
@@ -81,31 +81,6 @@ App.HighAvailabilityWizardController = 
App.WizardController.extend({
     this.save('cluster');
   },
 
-  /**
-   * Save Master Component Hosts data to Main Controller
-   * @param stepController App.WizardStep5Controller
-   */
-  saveMasterComponentHosts: function (stepController) {
-    var obj = stepController.get('selectedServicesMasters');
-    var masterComponentHosts = [];
-    obj.forEach(function (_component) {
-      masterComponentHosts.push({
-        display_name: _component.get('display_name'),
-        component: _component.get('component_name'),
-        hostName: _component.get('selectedHost'),
-        serviceId: _component.get('serviceId'),
-        isInstalled:  _component.get('isInstalled')
-      });
-    });
-    this.setDBProperty('masterComponentHosts', masterComponentHosts);
-    this.set('content.masterComponentHosts', masterComponentHosts);
-  },
-
-  clearMasterComponentHosts: function() {
-    this.set('content.masterComponentHosts', null);
-    this.setDBProperty('masterComponentHosts', null);
-  },
-
   saveHdfsUser: function () {
     App.db.setHighAvailabilityWizardHdfsUser(this.get('content.hdfsUser'));
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/controllers/main/service/reassign_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/reassign_controller.js 
b/ambari-web/app/controllers/main/service/reassign_controller.js
index 1827bf5..7db5092 100644
--- a/ambari-web/app/controllers/main/service/reassign_controller.js
+++ b/ambari-web/app/controllers/main/service/reassign_controller.js
@@ -184,6 +184,7 @@ App.ReassignMasterController = App.WizardController.extend({
     });
     App.db.setMasterComponentHosts(masterComponentHosts);
     this.set('content.masterComponentHosts', masterComponentHosts);
+    this.setDBProperty('masterComponentHosts', masterComponentHosts);
   },
 
   loadComponentToReassign: function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/controllers/wizard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard.js 
b/ambari-web/app/controllers/wizard.js
index eaf60a2..b1e7073 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -1078,6 +1078,32 @@ App.WizardController = 
Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
     }
     this.set("content.masterComponentHosts", masterComponentHosts);
   },
+
+  /**
+   * Save Master Component Hosts data to Main Controller
+   * @param stepController App.WizardStep5Controller
+   */
+  saveMasterComponentHosts: function (stepController) {
+    var obj = stepController.get('selectedServicesMasters');
+    var masterComponentHosts = [];
+    obj.forEach(function (_component) {
+      masterComponentHosts.push({
+        display_name: _component.get('display_name'),
+        component: _component.get('component_name'),
+        hostName: _component.get('selectedHost'),
+        serviceId: _component.get('serviceId'),
+        isInstalled:  _component.get('isInstalled')
+      });
+    });
+    this.setDBProperty('masterComponentHosts', masterComponentHosts);
+    this.set('content.masterComponentHosts', masterComponentHosts);
+  },
+
+  clearMasterComponentHosts: function() {
+    this.set('content.masterComponentHosts', null);
+    this.setDBProperty('masterComponentHosts', null);
+  },
+
   /**
    * Load information about hosts with clients components
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/mixins/wizard/assign_master_components.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/wizard/assign_master_components.js 
b/ambari-web/app/mixins/wizard/assign_master_components.js
index d3d674a..9f6b477 100644
--- a/ambari-web/app/mixins/wizard/assign_master_components.js
+++ b/ambari-web/app/mixins/wizard/assign_master_components.js
@@ -537,8 +537,8 @@ App.AssignMasterComponents = Em.Mixin.create({
       var mastersLength = 
this.get("selectedServicesMasters").filterProperty("component_name", 
componentName).length;
       if (mastersLength < this.getMaxNumberOfMasters(componentName)) {
         component.set('showAddControl', true);
-      } else if (mastersLength == 1) {
-        component.set('showRemoveControl', false);
+      } else {
+        component.set('showRemoveControl', mastersLength != 1);
       }
     }
   },
@@ -797,16 +797,22 @@ App.AssignMasterComponents = Em.Mixin.create({
    * @returns {masterComponents[]}
    */
   addNewMasters: function (masterComponents) {
-    this.get('mastersToAdd').forEach(function(masterName){
-      var hostName = this.getHostForMaster(masterName, masterComponents);
-      var serviceName = this.getServiceByMaster(masterName);
-      masterComponents.push(this.createComponentInstallationObject(
+    this.get('mastersToAdd').forEach(function (masterName, index, 
mastersToAdd) {
+      var toBeAddedNumber = mastersToAdd.filter(function (name) {
+          return name === masterName;
+        }).length,
+        alreadyAddedNumber = masterComponents.filterProperty('component_name', 
masterName).rejectProperty('isInstalled').length;
+      if (toBeAddedNumber > alreadyAddedNumber) {
+        var hostName = this.getHostForMaster(masterName, masterComponents),
+          serviceName = this.getServiceByMaster(masterName);
+        masterComponents.push(this.createComponentInstallationObject(
           Em.Object.create({
             componentName: masterName,
             serviceName: serviceName
           }),
           hostName
-      ));
+        ));
+      }
     }, this);
     return masterComponents;
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/routes/high_availability_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/high_availability_routes.js 
b/ambari-web/app/routes/high_availability_routes.js
index 1e25ab3..381d285 100644
--- a/ambari-web/app/routes/high_availability_routes.js
+++ b/ambari-web/app/routes/high_availability_routes.js
@@ -124,16 +124,13 @@ module.exports = App.WizardRoute.extend({
     next: function (router) {
       var controller = router.get('highAvailabilityWizardController');
       
controller.saveNameServiceId(router.get('highAvailabilityWizardStep1Controller.content.nameServiceId'));
+      controller.clearMasterComponentHosts();
       router.transitionTo('step2');
     }
   }),
 
   step2: Em.Route.extend({
     route: '/step2',
-    enter: function(router) {
-      var controller = router.get('highAvailabilityWizardController');
-      controller.clearMasterComponentHosts();
-    },
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
       controller.dataLoading().done(function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/routes/ra_high_availability_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/ra_high_availability_routes.js 
b/ambari-web/app/routes/ra_high_availability_routes.js
index fe93992..ebdbf97 100644
--- a/ambari-web/app/routes/ra_high_availability_routes.js
+++ b/ambari-web/app/routes/ra_high_availability_routes.js
@@ -109,7 +109,9 @@ module.exports = App.WizardRoute.extend({
       });
     },
     next: function (router) {
-      router.get('rAHighAvailabilityWizardController').save('loadBalancerURL');
+      var controller = router.get('rAHighAvailabilityWizardController');
+      controller.save('loadBalancerURL');
+      controller.clearMasterComponentHosts();
       router.transitionTo('step2');
     }
   }),
@@ -136,6 +138,7 @@ module.exports = App.WizardRoute.extend({
       };
       wizardController.set('content.raHosts', raHosts);
       wizardController.save('raHosts');
+      wizardController.saveMasterComponentHosts(stepController);
       router.transitionTo('step3');
     },
     back: function (router) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/routes/reassign_master_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/reassign_master_routes.js 
b/ambari-web/app/routes/reassign_master_routes.js
index b93f9a6..9802fc2 100644
--- a/ambari-web/app/routes/reassign_master_routes.js
+++ b/ambari-web/app/routes/reassign_master_routes.js
@@ -127,7 +127,9 @@ module.exports = App.WizardRoute.extend({
       })
     },
     next: function (router) {
+      var controller = router.get('reassignMasterController');
       App.db.setMasterComponentHosts(undefined);
+      controller.clearMasterComponentHosts();
       router.transitionTo('step2');
     },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/app/routes/rm_high_availability_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/rm_high_availability_routes.js 
b/ambari-web/app/routes/rm_high_availability_routes.js
index 3c11376..6d58c62 100644
--- a/ambari-web/app/routes/rm_high_availability_routes.js
+++ b/ambari-web/app/routes/rm_high_availability_routes.js
@@ -110,7 +110,9 @@ module.exports = App.WizardRoute.extend({
       return false;
     },
     next: function (router) {
-      
router.get('rMHighAvailabilityWizardController').setDBProperty('rmHosts', 
undefined);
+      var controller = router.get('rMHighAvailabilityWizardController');
+      controller.setDBProperty('rmHosts', undefined);
+      controller.clearMasterComponentHosts();
       router.transitionTo('step2');
     }
   }),
@@ -138,6 +140,7 @@ module.exports = App.WizardRoute.extend({
         additionalRM: additionalRM.get('selectedHost')
       };
       wizardController.saveRmHosts(rmHost);
+      wizardController.saveMasterComponentHosts(stepController);
       router.transitionTo('step3');
     },
     back: function (router) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/test/controllers/main/service/reassign_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/service/reassign_controller_test.js 
b/ambari-web/test/controllers/main/service/reassign_controller_test.js
index 12e5f9c..498cbab 100644
--- a/ambari-web/test/controllers/main/service/reassign_controller_test.js
+++ b/ambari-web/test/controllers/main/service/reassign_controller_test.js
@@ -23,14 +23,73 @@ require('controllers/main/service/reassign_controller');
 
 describe('App.ReassignMasterController', function () {
 
-  var reassignMasterController = App.ReassignMasterController.create({});
+  var reassignMasterController;
+
+  beforeEach(function () {
+    reassignMasterController = App.ReassignMasterController.create({});
+  });
 
   describe('#totalSteps', function () {
     it('check', function () {
       expect(reassignMasterController.get('totalSteps')).to.equal(7);
+      reassignMasterController.set('content.reassign', {service_id:null});
     });
   });
 
-  reassignMasterController.set('content.reassign', {service_id:null});
+  describe('#saveMasterComponentHosts', function () {
+
+    var stepController = Em.Object.create({
+        selectedServicesMasters: [
+          Em.Object.create({
+            display_name: 'd0',
+            component_name: 'c0',
+            selectedHost: 'h0',
+            serviceId: 's0'
+          }),
+          Em.Object.create({
+            display_name: 'd1',
+            component_name: 'c1',
+            selectedHost: 'h1',
+            serviceId: 's1'
+          })
+        ]
+      }),
+      masterComponentHosts = [
+        {
+          display_name: 'd0',
+          component: 'c0',
+          hostName: 'h0',
+          serviceId: 's0',
+          isInstalled: true
+        },
+        {
+          display_name: 'd1',
+          component: 'c1',
+          hostName: 'h1',
+          serviceId: 's1',
+          isInstalled: true
+        }
+      ];
+
+    beforeEach(function () {
+      sinon.stub(App.db, 'setMasterComponentHosts', Em.K);
+      sinon.stub(reassignMasterController, 'setDBProperty', Em.K);
+    });
+
+    afterEach(function () {
+      App.db.setMasterComponentHosts.restore();
+      reassignMasterController.setDBProperty.restore();
+    });
+
+    it('should save master component hosts', function () {
+      reassignMasterController.saveMasterComponentHosts(stepController);
+      expect(App.db.setMasterComponentHosts.calledOnce).to.be.true;
+      expect(reassignMasterController.setDBProperty.calledOnce).to.be.true;
+      
expect(App.db.setMasterComponentHosts.calledWith(masterComponentHosts)).to.be.true;
+      
expect(reassignMasterController.setDBProperty.calledWith('masterComponentHosts',
 masterComponentHosts)).to.be.true;
+      
expect(reassignMasterController.get('content.masterComponentHosts')).to.eql(masterComponentHosts);
+    });
+
+  });
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/798357d8/ambari-web/test/controllers/wizard_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard_test.js 
b/ambari-web/test/controllers/wizard_test.js
index 95f7f5c..b00e5ba 100644
--- a/ambari-web/test/controllers/wizard_test.js
+++ b/ambari-web/test/controllers/wizard_test.js
@@ -1387,4 +1387,79 @@ describe('App.WizardController', function () {
     });
   });
 
+  describe('#saveMasterComponentHosts', function () {
+
+    var stepController = Em.Object.create({
+        selectedServicesMasters: [
+          Em.Object.create({
+            display_name: 'd0',
+            component_name: 'c0',
+            selectedHost: 'h0',
+            serviceId: 's0',
+            isInstalled: true
+          }),
+          Em.Object.create({
+            display_name: 'd1',
+            component_name: 'c1',
+            selectedHost: 'h1',
+            serviceId: 's1',
+            isInstalled: false
+          })
+        ]
+      }),
+      masterComponentHosts = [
+        {
+          display_name: 'd0',
+          component: 'c0',
+          hostName: 'h0',
+          serviceId: 's0',
+          isInstalled: true
+        },
+        {
+          display_name: 'd1',
+          component: 'c1',
+          hostName: 'h1',
+          serviceId: 's1',
+          isInstalled: false
+        }
+      ];
+
+    beforeEach(function () {
+      sinon.stub(wizardController, 'setDBProperty', Em.K);
+    });
+
+    afterEach(function () {
+      wizardController.setDBProperty.restore();
+    });
+
+    it('should save master component hosts', function () {
+      wizardController.saveMasterComponentHosts(stepController);
+      expect(wizardController.setDBProperty.calledOnce).to.be.true;
+      expect(wizardController.setDBProperty.calledWith('masterComponentHosts', 
masterComponentHosts)).to.be.true;
+      
expect(wizardController.get('content.masterComponentHosts')).to.eql(masterComponentHosts);
+    });
+
+  });
+
+  describe('#clearMasterComponentHosts', function () {
+
+    beforeEach(function () {
+      sinon.stub(wizardController, 'setDBProperty', Em.K);
+    });
+
+    afterEach(function () {
+      wizardController.setDBProperty.restore();
+    });
+
+    it('should clear master component hosts', function () {
+      wizardController.set('content.masterComponentHosts', {});
+      wizardController.clearMasterComponentHosts();
+      expect(wizardController.setDBProperty.calledOnce).to.be.true;
+      expect(wizardController.setDBProperty.calledWith('masterComponentHosts', 
null)).to.be.true;
+      expect(wizardController.get('content.masterComponentHosts')).to.be.null;
+    });
+
+  });
+
+
 });

Reply via email to