Sfoglia il codice sorgente

AMBARI-8814 Rolling Upgrade: resume upgrade state after log in/out. (atkach)

Andrii Tkach 10 anni fa
parent
commit
f13beb866d

+ 1 - 1
ambari-web/app/app.js

@@ -41,7 +41,7 @@ module.exports = Em.Application.create({
    *  - INIT
    *  - PENDING
    *  - IN_PROGRESS
-   *  - STOPPED
+   *  - HOLDING
    *  - COMPLETED
    * @type {String}
    */

+ 16 - 4
ambari-web/app/controllers/global/cluster_controller.js

@@ -268,10 +268,6 @@ App.ClusterController = Em.Controller.extend({
       return;
     }
 
-    if (App.get('supports.stackUpgrade')) {
-      App.router.get('mainAdminStackAndUpgradeController').loadUpgradeData(true);
-    }
-
     var clusterUrl = this.getUrl('/data/clusters/cluster.json', '?fields=Clusters');
     var racksUrl = "/data/racks/racks.json";
 
@@ -302,6 +298,9 @@ App.ClusterController = Em.Controller.extend({
     } else {
       App.clusterStatus.updateFromServer().complete(function () {
         self.updateLoadStatus('clusterStatus');
+        if (App.get('supports.stackUpgrade')) {
+          self.restoreUpgradeState();
+        }
       });
     }
 
@@ -367,6 +366,19 @@ App.ClusterController = Em.Controller.extend({
     });
   },
 
+  /**
+   * restore upgrade status from local storage
+   * and make call to get latest status from server
+   */
+  restoreUpgradeState: function () {
+    var dbUpgradeState = App.db.get('MainAdminStackAndUpgrade', 'upgradeState');
+    if (!Em.isNone(dbUpgradeState)) {
+      App.set('upgradeState', dbUpgradeState);
+    }
+    App.router.get('mainAdminStackAndUpgradeController').initDBProperties();
+    App.router.get('mainAdminStackAndUpgradeController').loadUpgradeData(true);
+  },
+
   loadRootService: function () {
     return App.ajax.send({
       name: 'service.ambari',

+ 14 - 9
ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js

@@ -62,10 +62,14 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    */
   wizardStorageProperties: ['upgradeId', 'upgradeVersion'],
 
+  init: function () {
+    this.initDBProperties();
+  },
+
   /**
    * restore data from localStorage
    */
-  init: function () {
+  initDBProperties: function () {
     this.get('wizardStorageProperties').forEach(function (property) {
       if (this.getDBProperty(property)) {
         this.set(property, this.getDBProperty(property));
@@ -168,6 +172,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    */
   loadUpgradeDataSuccessCallback: function (data) {
     App.set('upgradeState', data.Upgrade.request_status);
+    this.setDBProperty('upgradeState', data.Upgrade.request_status);
     if (data.upgrade_groups) {
       this.updateUpgradeData(data);
     }
@@ -275,9 +280,10 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
   upgradeSuccessCallback: function (data) {
     this.set('upgradeId', data.resources[0].Upgrade.request_id);
     this.setDBProperty('upgradeId', data.resources[0].Upgrade.request_id);
+    this.setDBProperty('upgradeState', 'PENDING');
+    App.set('upgradeState', 'PENDING');
     App.clusterStatus.setClusterStatus({
-      clusterName: App.get('clusterName'),
-      clusterState: 'DEFAULT',
+      wizardControllerName: this.get('name'),
       localdb: App.db.data
     });
     this.openUpgradeDialog();
@@ -306,17 +312,17 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    * @param data {object}
    * @param opt {object}
    * @param params {object}
-   * @returns {App.ModalPopup|void}
+   * @returns {App.ModalPopup|undefined}
    */
-  runPreUpgradeCheckSuccess: function(data, opt, params) {
-    if (data.items.someProperty('UpgradeChecks.status',"FAIL")) {
+  runPreUpgradeCheckSuccess: function (data, opt, params) {
+    if (data.items.someProperty('UpgradeChecks.status', "FAIL")) {
       return App.ModalPopup.show({
         header: Em.I18n.t('admin.stackUpgrade.preupgradeCheck.header').format(params.label),
         primary: Em.I18n.t('common.dismiss'),
         secondary: false,
         bodyClass: Em.View.extend({
           templateName: require('templates/main/admin/stack_upgrade/pre_upgrade_check_dialog'),
-          checks: data.items.filterProperty('UpgradeChecks.status',"FAIL")
+          checks: data.items.filterProperty('UpgradeChecks.status', "FAIL")
         })
       })
     } else {
@@ -346,12 +352,11 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
   finish: function () {
     this.set('upgradeId', null);
     this.setDBProperty('upgradeId', undefined);
+    this.setDBProperty('upgradeState', 'INIT');
     App.set('upgradeState', 'INIT');
     this.set('upgradeVersion', null);
     this.setDBProperty('upgradeVersion', undefined);
     App.clusterStatus.setClusterStatus({
-      clusterName: App.get('clusterName'),
-      clusterState: 'DEFAULT',
       localdb: App.db.data
     });
   },

+ 3 - 0
ambari-web/app/router.js

@@ -367,6 +367,9 @@ App.Router = Em.Router.extend({
           } else if (clusterStatusOnServer && clusterStatusOnServer.wizardControllerName === App.router.get('rollbackHighAvailabilityWizardController.name')) {
             // if wizardControllerName == "highAvailabilityRollbackController", then it means someone closed the browser or the browser was crashed when we were last in NameNode High Availability Rollback wizard
             route = 'main.services.rollbackHighAvailability';
+          } else if (clusterStatusOnServer && clusterStatusOnServer.wizardControllerName === App.router.get('mainAdminStackAndUpgradeController.name')) {
+            // if wizardControllerName == "mainAdminStackAndUpgradeController", then it means someone closed the browser or the browser was crashed when we were last in Rolling Upgrade wizard
+            route = 'main.admin.stackAndUpgrade';
           }
           callback(route);
         });

+ 2 - 2
ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs

@@ -33,7 +33,7 @@
             <a title="Click to Copy" {{action copyOutLog view.content target="view"}} class="task-detail-copy">
               <i class="icon-copy"></i> {{t common.copy}}
             </a>
-            <a title="Open in New Window" {{action openErrorLog target="view"}} class="task-detail-open-dialog">
+            <a title="Open in New Window" {{action openOutLog target="view"}} class="task-detail-open-dialog">
               <i class="icon-external-link"></i> {{t common.open}}
             </a>
           </div>
@@ -49,7 +49,7 @@
             <a title="Click to Copy" {{action copyErrLog view.content target="view"}} class="task-detail-copy">
               <i class="icon-copy"></i> {{t common.copy}}
             </a>
-            <a title="Open in New Window" {{action openOutLog target="view"}} class="task-detail-open-dialog">
+            <a title="Open in New Window" {{action openErrorLog target="view"}} class="task-detail-open-dialog">
               <i class="icon-external-link"></i> {{t common.open}}
             </a>
           </div>

+ 1 - 0
ambari-web/app/utils/db.js

@@ -44,6 +44,7 @@ var InitialData =  {
   'HighAvailabilityWizard': {},
   'RMHighAvailabilityWizard': {},
   'RollbackHighAvailabilityWizard': {},
+  'MainAdminStackAndUpgrade': {},
   'tmp': {}
 
 };

+ 2 - 2
ambari-web/app/views/main/admin/stack_and_upgrade_view.js

@@ -152,9 +152,9 @@ App.MainAdminStackAndUpgradeView = Em.View.extend({
     }.property('controller.targetVersions'),
     btnClass: 'btn-success',
     versionName: function () {
-      if (this.get('versions.length') === 0) return Em.I18n.t('admin.stackUpgrade.state.notAvailable');
+      if (this.get('versions.length') === 0 && App.get('upgradeState') === 'INIT') return Em.I18n.t('admin.stackUpgrade.state.notAvailable');
       return this.get('controller.upgradeVersion');
-    }.property('controller.upgradeVersion', 'showSelect'),
+    }.property('controller.upgradeVersion', 'versions.length', 'App.upgradeState'),
     showSelect: function () {
       return this.get('versions.length') > 0 && App.get('upgradeState') === 'INIT';
     }.property('versions.length', 'App.upgradeState'),

+ 15 - 2
ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js

@@ -282,7 +282,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     });
   });
 
-  describe("#init()", function() {
+  describe("#initDBProperties()", function() {
     before(function () {
       sinon.stub(controller, 'getDBProperty', function (prop) {
         return prop;
@@ -293,11 +293,24 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     });
     it("set properties", function () {
       controller.set('wizardStorageProperties', ['prop1']);
-      controller.init();
+      controller.initDBProperties();
       expect(controller.get('prop1')).to.equal('prop1');
     });
   });
 
+  describe("#init()", function() {
+    before(function () {
+      sinon.stub(controller, 'initDBProperties', Em.K);
+    });
+    after(function () {
+      controller.initDBProperties.restore();
+    });
+    it("call initDBProperties", function () {
+      controller.init();
+      expect(controller.initDBProperties.calledOnce).to.be.true;
+    });
+  });
+
   describe("#parseVersionsData()", function() {
     it("", function() {
       var data = {