浏览代码

AMBARI-9770. NN HA Wizard not substituting 'hdfs' in Create Checkpoint Step. (akovalenko)

Aleksandr Kovalenko 10 年之前
父节点
当前提交
cb04578b4a

+ 89 - 26
ambari-web/app/controllers/main/admin/highAvailability/nameNode/wizard_controller.js

@@ -141,6 +141,51 @@ App.HighAvailabilityWizardController = App.WizardController.extend({
     this.set('content.serviceConfigProperties', data);
   },
 
+  /**
+   * load hosts from server
+   */
+  loadHosts: function () {
+    var dfd;
+    var hostsFromDb = this.getDBProperty('hosts');
+    if (hostsFromDb) {
+      this.set('content.hosts', hostsFromDb);
+      dfd = $.Deferred();
+      dfd.resolve();
+    } else {
+      dfd = App.ajax.send({
+        name: 'hosts.high_availability.wizard',
+        data: {},
+        sender: this,
+        success: 'loadHostsSuccessCallback',
+        error: 'loadHostsErrorCallback'
+      });
+    }
+    return dfd.promise();
+  },
+
+  /**
+   * success callback of <code>loadHosts</code>
+   * @param data
+   * @param opt
+   * @param params
+   */
+  loadHostsSuccessCallback: function (data, opt, params) {
+    var hosts = {};
+
+    data.items.forEach(function (item) {
+      hosts[item.Hosts.host_name] = {
+        name: item.Hosts.host_name,
+        cpu: item.Hosts.cpu_count,
+        memory: item.Hosts.total_mem,
+        disk_info: item.Hosts.disk_info,
+        bootStatus: "REGISTERED",
+        isInstalled: true
+      };
+    });
+    this.setDBProperty('hosts', hosts);
+    this.set('content.hosts', hosts);
+  },
+
   loadHdfsClientHosts: function(){
     var hostNames = App.db.getHighAvailabilityWizardHdfsClientHosts();
     if (!(hostNames instanceof Array)) {
@@ -203,32 +248,50 @@ App.HighAvailabilityWizardController = App.WizardController.extend({
     this.set('content.tasksRequestIds', requestIds);
   },
 
-  /**
-   * Load data for all steps until <code>current step</code>
-   */
-  loadAllPriorSteps: function () {
-    var step = this.get('currentStep');
-    switch (step) {
-      case '9':
-      case '8':
-      case '7':
-      case '6':
-      case '5':
-        this.loadTasksStatuses();
-        this.loadTasksRequestIds();
-        this.loadRequestIds();
-      case '4':
-      case '3':
-        this.loadNameServiceId();
-        this.loadServiceConfigProperties();
-      case '2':
-        this.loadServicesFromServer();
-        this.loadMasterComponentHosts();
-        this.loadConfirmedHosts();
-        this.loadHdfsUser();
-      case '1':
-        this.load('cluster');
-    }
+  loadMap: {
+    '1': [
+      {
+        type: 'sync',
+        callback: function () {
+          this.load('cluster');
+        }
+      }
+    ],
+    '2': [
+      {
+        type: 'async',
+        callback: function () {
+          var dfd = $.Deferred();
+          var self = this;
+          this.loadHosts().done(function () {
+            self.loadServicesFromServer();
+            self.loadMasterComponentHosts();
+            self.loadHdfsUser();
+            dfd.resolve();
+          });
+          return dfd.promise();
+        }
+      }
+    ],
+    '3': [
+      {
+        type: 'sync',
+        callback: function () {
+          this.loadNameServiceId();
+          this.loadServiceConfigProperties();
+        }
+      }
+    ],
+    '5': [
+      {
+        type: 'sync',
+        callback: function () {
+          this.loadTasksStatuses();
+          this.loadTasksRequestIds();
+          this.loadRequestIds();
+        }
+      }
+    ]
   },
 
   /**

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

@@ -77,15 +77,6 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, {
         }
       }
     ],
-    '2': [
-      {
-        type: 'sync',
-        callback: function () {
-          this.loadMasterComponentHosts();
-          this.load('hosts');
-        }
-      }
-    ],
     '2': [
       {
         type: 'async',

+ 114 - 97
ambari-web/app/routes/high_availability_routes.js

@@ -22,77 +22,85 @@ module.exports = App.WizardRoute.extend({
   route: '/highAvailability/NameNode/enable',
 
   enter: function (router) {
-    Em.run.next(function () {
-      var highAvailabilityWizardController = router.get('highAvailabilityWizardController');
-      App.router.get('updateController').set('isWorking', false);
-      var popup = App.ModalPopup.show({
-        classNames: ['full-width-modal'],
-        header: Em.I18n.t('admin.highAvailability.wizard.header'),
-        bodyClass: App.HighAvailabilityWizardView.extend({
-          controller: highAvailabilityWizardController
-        }),
-        primary: Em.I18n.t('form.cancel'),
-        showFooter: false,
-        secondary: null,
-        hideCloseButton: function () {
-          var currStep = App.router.get('highAvailabilityWizardController.currentStep');
-          switch (currStep) {
-            case "5" :
-            case "7" :
-            case "9" :
-              if(App.supports.autoRollbackHA){
-                this.set('showCloseButton', false);
-              }else{
+    var highAvailabilityWizardController = router.get('highAvailabilityWizardController');
+    highAvailabilityWizardController.dataLoading().done(function () {
+        App.router.get('updateController').set('isWorking', false);
+        var popup = App.ModalPopup.show({
+          classNames: ['full-width-modal'],
+          header: Em.I18n.t('admin.highAvailability.wizard.header'),
+          bodyClass: App.HighAvailabilityWizardView.extend({
+            controller: highAvailabilityWizardController
+          }),
+          primary: Em.I18n.t('form.cancel'),
+          showFooter: false,
+          secondary: null,
+          hideCloseButton: function () {
+            var currStep = App.router.get('highAvailabilityWizardController.currentStep');
+            switch (currStep) {
+              case "5" :
+              case "7" :
+              case "9" :
+                if (App.supports.autoRollbackHA) {
+                  this.set('showCloseButton', false);
+                } else {
+                  this.set('showCloseButton', true);
+                }
+                break;
+              default :
                 this.set('showCloseButton', true);
-              }
-              break;
-            default :
-              this.set('showCloseButton', true);
-          }
-        }.observes('App.router.highAvailabilityWizardController.currentStep'),
+            }
+          }.observes('App.router.highAvailabilityWizardController.currentStep'),
 
-        onClose: function () {
-          var self = this;
-          var currStep = App.router.get('highAvailabilityWizardController.currentStep');
-          var highAvailabilityProgressPageController = App.router.get('highAvailabilityProgressPageController');
-          if(parseInt(currStep) > 4){
-            if(!App.supports.autoRollbackHA){
-              highAvailabilityProgressPageController.manualRollback();
-            } else{
-              this.hide();
-              App.router.get('highAvailabilityWizardController').setCurrentStep('1');
-              App.router.transitionTo('rollbackHighAvailability');
+          onClose: function () {
+            var self = this;
+            var currStep = App.router.get('highAvailabilityWizardController.currentStep');
+            var highAvailabilityProgressPageController = App.router.get('highAvailabilityProgressPageController');
+            if (parseInt(currStep) > 4) {
+              if (!App.supports.autoRollbackHA) {
+                highAvailabilityProgressPageController.manualRollback();
+              } else {
+                this.hide();
+                App.router.get('highAvailabilityWizardController').setCurrentStep('1');
+                App.router.transitionTo('rollbackHighAvailability');
+              }
+            } else {
+              var controller = App.router.get('highAvailabilityWizardController');
+              controller.clearTasksData();
+              controller.finish();
+              App.router.get('updateController').set('isWorking', true);
+              App.clusterStatus.setClusterStatus({
+                clusterName: controller.get('content.cluster.name'),
+                clusterState: 'DEFAULT',
+                localdb: App.db.data
+              }, {
+                alwaysCallback: function () {
+                  self.hide();
+                  App.router.transitionTo('main.services.index');
+                  location.reload();
+                }
+              });
             }
-          } else {
-            var controller = App.router.get('highAvailabilityWizardController');
-            controller.clearTasksData();
-            controller.finish();
-            App.router.get('updateController').set('isWorking', true);
-            App.clusterStatus.setClusterStatus({
-              clusterName: controller.get('content.cluster.name'),
-              clusterState: 'DEFAULT',
-              localdb: App.db.data
-            },{alwaysCallback: function() {self.hide();App.router.transitionTo('main.services.index');location.reload();}});
+          },
+          didInsertElement: function () {
+            this.fitHeight();
+          }
+        });
+        highAvailabilityWizardController.set('popup', popup);
+        var currentClusterStatus = App.clusterStatus.get('value');
+        if (currentClusterStatus) {
+          switch (currentClusterStatus.clusterState) {
+            case 'HIGH_AVAILABILITY_DEPLOY' :
+              highAvailabilityWizardController.setCurrentStep(currentClusterStatus.localdb.HighAvailabilityWizard.currentStep);
+              break;
+            default:
+              var currStep = App.router.get('highAvailabilityWizardController.currentStep');
+              highAvailabilityWizardController.setCurrentStep(currStep);
+              break;
           }
-        },
-        didInsertElement: function () {
-          this.fitHeight();
         }
+      Em.run.next(function () {
+        router.transitionTo('step' + highAvailabilityWizardController.get('currentStep'));
       });
-      highAvailabilityWizardController.set('popup', popup);
-      var currentClusterStatus = App.clusterStatus.get('value');
-      if (currentClusterStatus) {
-        switch (currentClusterStatus.clusterState) {
-          case 'HIGH_AVAILABILITY_DEPLOY' :
-            highAvailabilityWizardController.setCurrentStep(currentClusterStatus.localdb.HighAvailabilityWizard.currentStep);
-            break;
-          default:
-            var currStep = App.router.get('highAvailabilityWizardController.currentStep');
-            highAvailabilityWizardController.setCurrentStep(currStep);
-            break;
-        }
-      }
-      router.transitionTo('step' + highAvailabilityWizardController.get('currentStep'));
     });
   },
 
@@ -104,8 +112,9 @@ module.exports = App.WizardRoute.extend({
         controller.setCurrentStep('1');
         controller.usersLoading().done(function () {
           controller.saveHdfsUser();
-          controller.loadAllPriorSteps();
-          controller.connectOutlet('highAvailabilityWizardStep1', controller.get('content'));
+          controller.loadAllPriorSteps().done(function () {
+            controller.connectOutlet('highAvailabilityWizardStep1', controller.get('content'));
+          });
         })
       })
     },
@@ -123,10 +132,11 @@ module.exports = App.WizardRoute.extend({
     route: '/step2',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('2');
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep2', controller.get('content'));
+        controller.setCurrentStep('2');
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep2', controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -158,10 +168,11 @@ module.exports = App.WizardRoute.extend({
     route: '/step3',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('3');
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep3',  controller.get('content'));
+        controller.setCurrentStep('3');
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep3',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -185,11 +196,12 @@ module.exports = App.WizardRoute.extend({
     route: '/step4',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('4');
-      controller.setLowerStepsDisable(4);
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep4',  controller.get('content'));
+        controller.setCurrentStep('4');
+        controller.setLowerStepsDisable(4);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep4',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -206,11 +218,12 @@ module.exports = App.WizardRoute.extend({
     route: '/step5',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('5');
-      controller.setLowerStepsDisable(5);
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep5',  controller.get('content'));
+        controller.setCurrentStep('5');
+        controller.setLowerStepsDisable(5);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep5',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -227,11 +240,12 @@ module.exports = App.WizardRoute.extend({
     route: '/step6',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('6');
-      controller.setLowerStepsDisable(6);
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep6',  controller.get('content'));
+        controller.setCurrentStep('6');
+        controller.setLowerStepsDisable(6);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep6',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -246,11 +260,12 @@ module.exports = App.WizardRoute.extend({
     route: '/step7',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('7');
-      controller.setLowerStepsDisable(7);
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep7',  controller.get('content'));
+        controller.setCurrentStep('7');
+        controller.setLowerStepsDisable(7);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep7',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -267,11 +282,12 @@ module.exports = App.WizardRoute.extend({
     route: '/step8',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('8');
-      controller.setLowerStepsDisable(8);
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep8',  controller.get('content'));
+        controller.setCurrentStep('8');
+        controller.setLowerStepsDisable(8);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep8',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {
@@ -288,11 +304,12 @@ module.exports = App.WizardRoute.extend({
     route: '/step9',
     connectOutlets: function (router) {
       var controller = router.get('highAvailabilityWizardController');
-      controller.setCurrentStep('9');
-      controller.setLowerStepsDisable(9);
       controller.dataLoading().done(function () {
-        controller.loadAllPriorSteps();
-        controller.connectOutlet('highAvailabilityWizardStep9',  controller.get('content'));
+        controller.setCurrentStep('9');
+        controller.setLowerStepsDisable(9);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('highAvailabilityWizardStep9',  controller.get('content'));
+        });
       })
     },
     unroutePath: function () {

+ 10 - 9
ambari-web/app/routes/main.js

@@ -556,15 +556,16 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
         Em.run.next(function () {
           var controller = router.get('mainController');
           controller.dataLoading().done(function () {
-            var service = router.get('mainServiceItemController.content');
-            if (!service || !service.get('isLoaded')) {
-              service = App.Service.find().objectAt(0); // getting the first service to display
-            }
-            if (router.get('mainServiceItemController').get('routeToConfigs')) {
-              router.transitionTo('service.configs', service);
-            }
-            else {
-              router.transitionTo('service.summary', service);
+            if (router.currentState.parentState.name === 'services' && router.currentState.name === 'index') {
+              var service = router.get('mainServiceItemController.content');
+              if (!service || !service.get('isLoaded')) {
+                service = App.Service.find().objectAt(0); // getting the first service to display
+              }
+              if (router.get('mainServiceItemController').get('routeToConfigs')) {
+                router.transitionTo('service.configs', service);
+              } else {
+                router.transitionTo('service.summary', service);
+              }
             }
           });
         });

+ 1 - 5
ambari-web/app/templates/main/admin/highAvailability/nameNode/wizard.hbs

@@ -38,11 +38,7 @@
           </div>
         </div>
           <div class="wizard-content well span9">
-            {{#if view.isLoaded}}
-              {{outlet}}
-            {{else}}
-                <div class="spinner"></div>
-            {{/if}}
+            {{outlet}}
           </div>
       </div>
     </div>

+ 0 - 51
ambari-web/app/views/main/admin/highAvailability/nameNode/wizard_view.js

@@ -23,57 +23,6 @@ App.HighAvailabilityWizardView = Em.View.extend(App.WizardMenuMixin, {
 
   templateName: require('templates/main/admin/highAvailability/nameNode/wizard'),
 
-  isLoaded: false,
-
-  willInsertElement: function() {
-    this.set('isLoaded', false);
-    this.loadHosts();
-  },
-
-  /**
-   * load hosts from server
-   */
-  loadHosts: function () {
-    App.ajax.send({
-      name: 'hosts.high_availability.wizard',
-      data: {},
-      sender: this,
-      success: 'loadHostsSuccessCallback',
-      error: 'loadHostsErrorCallback'
-    });
-  },
-
-  /**
-   * success callback of <code>loadHosts</code>
-   * @param data
-   * @param opt
-   * @param params
-   */
-  loadHostsSuccessCallback: function (data, opt, params) {
-    var hosts = {};
-
-    data.items.forEach(function (item) {
-      hosts[item.Hosts.host_name] = {
-        name: item.Hosts.host_name,
-        cpu: item.Hosts.cpu_count,
-        memory: item.Hosts.total_mem,
-        disk_info: item.Hosts.disk_info,
-        bootStatus: "REGISTERED",
-        isInstalled: true
-      };
-    });
-    App.db.setHosts(hosts);
-    this.set('controller.content.hosts', hosts);
-    this.set('isLoaded', true);
-  },
-
-  /**
-   * error callback of <code>loadHosts</code>
-   */
-  loadHostsErrorCallback: function() {
-    this.set('isLoaded', true);
-  },
-
   didInsertElement: function() {
     var currentStep = this.get('controller.currentStep');
     if (currentStep > 4) {

+ 0 - 80
ambari-web/test/views/main/admin/highAvailability/nameNode/wizard_view_test.js

@@ -29,86 +29,6 @@ describe('App.HighAvailabilityWizardView', function () {
     })
   });
 
-  describe("#willInsertElement()", function () {
-    before(function () {
-      sinon.stub(view, 'loadHosts', Em.K);
-    });
-    after(function () {
-      view.loadHosts.restore();
-    });
-    it("", function () {
-      view.set('isLoaded', true);
-      view.willInsertElement();
-      expect(view.get('isLoaded')).to.be.false;
-      expect(view.loadHosts.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#loadHosts()", function () {
-    before(function () {
-      sinon.stub(App.ajax, 'send', Em.K);
-    });
-    after(function () {
-      App.ajax.send.restore();
-    });
-    it("send ajax call", function () {
-      view.loadHosts();
-      expect(App.ajax.send.getCall(0).args[0]).to.eql({
-        name: 'hosts.high_availability.wizard',
-        data: {},
-        sender: view,
-        success: 'loadHostsSuccessCallback',
-        error: 'loadHostsErrorCallback'
-      });
-    });
-  });
-
-  describe("#loadHostsSuccessCallback()", function () {
-    before(function () {
-      sinon.stub(App.db, 'setHosts', Em.K);
-    });
-    after(function () {
-      App.db.setHosts.restore();
-    });
-    it("", function () {
-      var data = {
-          items: [
-            {
-              Hosts: {
-                host_name: 'host1',
-                cpu_count: 1,
-                total_mem: 1,
-                disk_info: []
-              }
-            }
-          ]
-        },
-        expectedHosts = {
-          "host1": {
-            "name": "host1",
-            "cpu": 1,
-            "memory": 1,
-            "disk_info": [],
-            "bootStatus": "REGISTERED",
-            "isInstalled": true
-          }
-        };
-      view.set('isLoaded', false);
-      view.loadHostsSuccessCallback(data);
-      expect(App.db.setHosts.getCall(0).args[0]).to.eql(expectedHosts);
-      expect(view.get('isLoaded')).to.be.true;
-      expect(view.get('controller.content.hosts')).to.eql(expectedHosts);
-    });
-  });
-
-  describe("#loadHostsErrorCallback()", function () {
-    it("", function () {
-      view.set('isLoaded', false);
-      view.loadHostsErrorCallback();
-      expect(view.get('isLoaded')).to.be.true;
-    });
-  });
-
   describe("#didInsertElement()", function () {
     beforeEach(function () {
       sinon.spy(view.get('controller'), 'setLowerStepsDisable');