You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2015/01/12 14:44:00 UTC

ambari git commit: AMBARI-9087 Add "Downgrade" button to Manual Step / Failure box. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk 23b7c1108 -> 5a43202b4


AMBARI-9087 Add "Downgrade" button to Manual Step / Failure box. (atkach)


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

Branch: refs/heads/trunk
Commit: 5a43202b4dbd02aab450ceb60efc325c5f77930b
Parents: 23b7c11
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Mon Jan 12 14:37:36 2015 +0200
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Mon Jan 12 15:43:53 2015 +0200

----------------------------------------------------------------------
 .../main/admin/stack_and_upgrade_controller.js  | 44 +++++++++++----
 ambari-web/app/messages.js                      |  3 ++
 .../templates/main/admin/stack_and_upgrade.hbs  |  8 +--
 .../stack_upgrade/stack_upgrade_wizard.hbs      |  6 +++
 ambari-web/app/utils/ajax/ajax.js               | 19 ++++++-
 .../views/main/admin/stack_and_upgrade_view.js  | 21 --------
 .../admin/stack_upgrade/upgrade_task_view.js    |  4 +-
 .../admin/stack_upgrade/upgrade_wizard_view.js  | 13 +++++
 .../admin/stack_and_upgrade_controller_test.js  | 56 ++++++++++++++++++--
 .../stack_upgrade/upgrade_wizard_view_test.js   | 21 ++++++++
 10 files changed, 152 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index bbd69fa..341084b 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -60,7 +60,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
   /**
    * properties that stored to localStorage to resume wizard progress
    */
-  wizardStorageProperties: ['upgradeId', 'upgradeVersion'],
+  wizardStorageProperties: ['upgradeId', 'upgradeVersion', 'currentVersion'],
 
   init: function () {
     this.initDBProperties();
@@ -250,10 +250,36 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
   },
 
   /**
+   * downgrade confirmation popup
+   */
+  confirmDowngrade: function () {
+    var self = this;
+    var currentVersion = this.get('currentVersion');
+    return App.showConfirmationPopup(
+      function() {
+        self.downgrade.call(self, currentVersion);
+      },
+      Em.I18n.t('admin.stackUpgrade.downgrade.body').format(currentVersion.repository_name),
+      null,
+      Em.I18n.t('admin.stackUpgrade.downgrade.title').format(currentVersion.repository_name),
+      Em.I18n.t('admin.stackUpgrade.downgrade.proceed')
+    );
+  },
+
+  /**
    * make call to start downgrade process
+   * @params {object} currentVersion
    */
-  downgrade: function () {
-    //TODO start downgrade
+  downgrade: function (currentVersion) {
+    App.ajax.send({
+      name: 'admin.downgrade.start',
+      sender: this,
+      data: {
+        value: currentVersion.repository_version,
+        label: currentVersion.repository_name
+      },
+      success: 'upgradeSuccessCallback'
+    });
   },
 
   /**
@@ -264,21 +290,20 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     App.ajax.send({
       name: 'admin.upgrade.start',
       sender: this,
-      data: {
-        version: version.value
-      },
+      data: version,
       success: 'upgradeSuccessCallback'
     });
-    this.set('upgradeVersion', version.label);
-    this.setDBProperty('upgradeVersion', version.label);
+    this.setDBProperty('currentVersion', this.get('currentVersion'));
   },
 
   /**
    * success callback of <code>upgrade()</code>
    * @param {object} data
    */
-  upgradeSuccessCallback: function (data) {
+  upgradeSuccessCallback: function (data, opt, params) {
     this.set('upgradeId', data.resources[0].Upgrade.request_id);
+    this.set('upgradeVersion', params.label);
+    this.setDBProperty('upgradeVersion', params.label);
     this.setDBProperty('upgradeId', data.resources[0].Upgrade.request_id);
     this.setDBProperty('upgradeState', 'PENDING');
     App.set('upgradeState', 'PENDING');
@@ -351,6 +376,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     App.set('upgradeState', 'INIT');
     this.set('upgradeVersion', null);
     this.setDBProperty('upgradeVersion', undefined);
+    this.setDBProperty('currentVersion', undefined);
     App.clusterStatus.setClusterStatus({
       localdb: App.db.data
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 1fbaded..f08c270 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1328,6 +1328,9 @@ Em.I18n.translations = {
   'admin.stackVersions.updateTab.title.available': "Updates Available ({0})",
   'admin.stackVersions.updateTab.title.not.available': "No Updates Available",
 
+  'admin.stackUpgrade.downgrade.proceed': "Proceed with Downgrade",
+  'admin.stackUpgrade.downgrade.title': "Downgrade to {0}",
+  'admin.stackUpgrade.downgrade.body': "Are you sure you wish to abort the upgrade process and downgrade to {0}",
   'admin.stackUpgrade.title': "Stack and upgrade",
   'admin.stackUpgrade.hostsOnline': "{0}/{1} hosts online",
   'admin.stackUpgrade.state.available': "Upgrade Available",

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
index 674a58e..ef2f65e 100644
--- a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
+++ b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
@@ -26,12 +26,8 @@
       {{#view view.sourceVersionView classNames="span2 offset3 box flex-width"}}
         <div class="version-name"><strong>{{view.versionName}}</strong></div>
         <div>
-          {{#if view.label}}
-            <button {{bindAttr class=":btn view.btnClass"}} {{action runAction target="view"}}>{{view.label}}</button>
-          {{else}}
-            {{view.hostsCount}}
-            &nbsp;{{pluralize view.hostsCount singular="t:admin.stackUpgrade.host" plural="t:admin.stackUpgrade.hosts"}}
-          {{/if}}
+          {{view.hostsCount}}
+          &nbsp;{{pluralize view.hostsCount singular="t:admin.stackUpgrade.host" plural="t:admin.stackUpgrade.hosts"}}
         </div>
       {{/view}}
       <div class="span1">

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
index bca7dc8..b4a1532 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
@@ -64,6 +64,9 @@
             </div>
             {{#if view.isHoldingState}}
               <div class="button-row">
+                {{#if view.isDowngradeAvailable}}
+                  <button class="btn btn-danger" {{action confirmDowngrade target="controller"}}>{{t common.downgrade}}</button>
+                {{/if}}
                 {{#if view.isSkipable}}
                   <button class="btn btn-warning" {{action continue view.failedItem target="view"}}>{{t admin.stackUpgrade.dialog.continue}}</button>
                 {{else}}
@@ -84,6 +87,9 @@
               {{t admin.stackUpgrade.dialog.manualDone}}
             </div>
             <div class="button-row">
+              {{#if view.isDowngradeAvailable}}
+                <button class="btn btn-danger" {{action confirmDowngrade target="controller"}}>{{t common.downgrade}}</button>
+              {{/if}}
               <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
                 {{t common.proceed}}
               </button>

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index a7ee18d..acf2354 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1335,14 +1335,29 @@ var urls = {
     'mock': '/data/stack_versions/upgrade_task.json'
   },
   'admin.upgrade.start': {
-    'real': '/clusters/{clusterName}/upgrades/{id}',
+    'real': '/clusters/{clusterName}/upgrades',
     'mock': '/data/stack_versions/start_upgrade.json',
     'type': 'POST',
     'format': function (data) {
       return {
         data: JSON.stringify({
           "Upgrade": {
-            "repository_version": data.version
+            "repository_version": data.value
+          }
+        })
+      }
+    }
+  },
+  'admin.downgrade.start': {
+    'real': '/clusters/{clusterName}/upgrades',
+    'mock': '/data/stack_versions/start_upgrade.json',
+    'type': 'POST',
+    'format': function (data) {
+      return {
+        data: JSON.stringify({
+          "Upgrade": {
+            "repository_version": data.value,
+            "force_downgrade": true
           }
         })
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
index 0cb17ea..3c90e74 100644
--- a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
+++ b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
@@ -104,27 +104,6 @@ App.MainAdminStackAndUpgradeView = Em.View.extend({
     version: function () {
       return this.get('controller.currentVersion');
     }.property('controller.currentVersion'),
-    btnClass: 'btn-danger',
-    didInsertElement: function () {
-      this.buttonObserver();
-    },
-
-    /**
-     * method of controller called on click of source version button
-     * @type {string}
-     * @default null
-     */
-    method: null,
-
-    /**
-     * label of source version button
-     * @type {string}
-     */
-    label: "",
-    buttonObserver: function () {
-      this.set('method', App.get('upgradeState') !== 'INIT' && 'downgrade');
-      this.set('label', App.get('upgradeState') !== 'INIT' && Em.I18n.t('common.downgrade'));
-    }.observes('App.upgradeState'),
     hostsCount: function () {
       return this.get('version.host_states.CURRENT.length');
     }.property('version.host_states.CURRENT.length')

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
index c4fc0ed..7b85afd 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_task_view.js
@@ -89,9 +89,11 @@ App.upgradeTaskView = Em.View.extend({
 
   /**
    * request task details from server
+   * @return {$.ajax|null}
    */
   getTaskDetails: function () {
-    App.ajax.send({
+    if (Em.isNone(this.get('content'))) return null;
+    return App.ajax.send({
       name: 'admin.upgrade.task',
       sender: this,
       data: {

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
index d4e819c..cd1d344 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
@@ -18,6 +18,7 @@
 
 
 var App = require('app');
+var stringUtils = require('utils/string_utils');
 
 App.upgradeWizardView = Em.View.extend({
   controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
@@ -56,6 +57,15 @@ App.upgradeWizardView = Em.View.extend({
   outsideView: true,
 
   /**
+   * Downgrade should be available only if target version higher than current, so we can't downgrade
+   * when downgrade already started
+   * @type {boolean}
+   */
+  isDowngradeAvailable: function () {
+    return stringUtils.compareVersions(this.get('controller.upgradeVersion'), this.get('controller.currentVersion.repository_version')) === 1;
+  }.property('controller.currentVersion', 'controller.upgradeVersion'),
+
+  /**
    * progress value is rounded to floor
    * @type {number}
    */
@@ -70,6 +80,9 @@ App.upgradeWizardView = Em.View.extend({
   upgradeGroups: function () {
     if (Em.isNone(this.get('controller.upgradeData.upgradeGroups'))) return [];
     var upgradeGroups = this.get('controller.upgradeData.upgradeGroups');
+    upgradeGroups.forEach(function (group) {
+      group.get('upgradeItems').reverse();
+    });
     upgradeGroups.reverse();
     return upgradeGroups;
   }.property('controller.upgradeData.upgradeGroups'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 6388692..3fea58c 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -360,6 +360,9 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       controller.setDBProperty.restore();
     });
     it("make ajax call", function() {
+      controller.set('currentVersion', {
+        repository_version: '2.2'
+      });
       controller.upgrade({
         value: '2.2',
         label: 'HDP-2.2'
@@ -368,12 +371,14 @@ describe('App.MainAdminStackAndUpgradeController', function() {
         name: 'admin.upgrade.start',
         sender: controller,
         data: {
-          version: '2.2'
+          value: '2.2',
+          label: 'HDP-2.2'
         },
         success: 'upgradeSuccessCallback'
       });
-      expect(controller.get('upgradeVersion')).to.equal('HDP-2.2');
-      expect(controller.setDBProperty.calledWith('upgradeVersion', 'HDP-2.2')).to.be.true;
+      expect(controller.setDBProperty.calledWith('currentVersion', {
+        repository_version: '2.2'
+      })).to.be.true;
     });
   });
 
@@ -398,8 +403,10 @@ describe('App.MainAdminStackAndUpgradeController', function() {
           }
         ]
       };
-      controller.upgradeSuccessCallback(data);
+      controller.upgradeSuccessCallback(data, {}, {label: 'HDP-2.2.1'});
       expect(controller.setDBProperty.calledWith('upgradeId', 1)).to.be.true;
+      expect(controller.setDBProperty.calledWith('upgradeVersion', 'HDP-2.2.1')).to.be.true;
+      expect(controller.get('upgradeVersion')).to.equal('HDP-2.2.1');
       expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
       expect(controller.openUpgradeDialog.calledOnce).to.be.true;
     });
@@ -531,4 +538,45 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
     });
   });
+
+  describe("#confirmDowngrade()", function() {
+    before(function () {
+      sinon.stub(App, 'showConfirmationPopup', Em.K);
+    });
+    after(function () {
+      App.showConfirmationPopup.restore();
+    });
+    it("show confirmation popup", function() {
+      controller.set('currentVersion', Em.Object.create({
+        repository_version: '2.2',
+        repository_name: 'HDP-2.2'
+      }));
+      controller.confirmDowngrade();
+      expect(App.showConfirmationPopup.calledOnce).to.be.true;
+    });
+  });
+
+  describe("#downgrade()", function() {
+    before(function () {
+      sinon.stub(App.ajax, 'send', Em.K);
+    });
+    after(function () {
+      App.ajax.send.restore();
+    });
+    it("make ajax call", function() {
+      controller.downgrade(Em.Object.create({
+        repository_version: '2.2',
+        repository_name: 'HDP-2.2'
+      }));
+      expect(App.ajax.send.getCall(0).args[0]).to.eql({
+        name: 'admin.downgrade.start',
+        sender: controller,
+        data: {
+          value: '2.2',
+          label: 'HDP-2.2'
+        },
+        success: 'upgradeSuccessCallback'
+      });
+    });
+  });
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a43202b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
index cba70bd..2e63f92 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
@@ -288,4 +288,25 @@ describe('App.upgradeWizardView', function () {
       });
     });
   });
+
+  describe("#isDowngradeAvailable", function() {
+    it("downgrade available", function() {
+      view.set('controller.upgradeVersion', '2.2.1');
+      view.set('controller.currentVersion', {repository_version: '2.2'});
+      view.propertyDidChange('isDowngradeAvailable');
+      expect(view.get('isDowngradeAvailable')).to.be.true;
+    });
+    it("downgrade unavailable", function() {
+      view.set('controller.upgradeVersion', '2.2');
+      view.set('controller.currentVersion', {repository_version: '2.2'});
+      view.propertyDidChange('isDowngradeAvailable');
+      expect(view.get('isDowngradeAvailable')).to.be.false;
+    });
+    it("downgrade unavailable", function() {
+      view.set('controller.upgradeVersion', '2.2');
+      view.set('controller.currentVersion', {repository_version: '2.2.1'});
+      view.propertyDidChange('isDowngradeAvailable');
+      expect(view.get('isDowngradeAvailable')).to.be.false;
+    });
+  });
 });