Explorar el Código

AMBARI-18844 Web Client Should Support HOST_ORDERED Upgrades In Progress. (atkach)

Andrii Tkach hace 9 años
padre
commit
c5404bdd79

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

@@ -89,6 +89,7 @@ App.supports = {
   addingNewRepository: false,
   kerberosStackAdvisor: true,
   logCountVizualization: false,
+  enabledWizardForHostOrderedUpgrade: true,
   manageJournalNode: true
 };
 

+ 40 - 7
ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js

@@ -106,6 +106,14 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    */
   serviceCheckFailuresServicenames: [],
 
+  /**
+   * Restricted type of upgrade, can't be viewed in wizard.
+   * It's status visible only in upgrade status label
+   * @type {boolean}
+   * @default false
+   */
+  isWizardRestricted: false,
+
   /**
    * methods through which cluster could be upgraded, "allowed" indicated if the method is allowed
    * by stack upgrade path
@@ -123,7 +131,8 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       isCheckRequestInProgress: false,
       precheckResultsMessage: '',
       precheckResultsTitle: '',
-      action: ''
+      action: '',
+      isWizardRestricted: false
     }),
     Em.Object.create({
       displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.title'),
@@ -136,7 +145,22 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       isCheckRequestInProgress: false,
       precheckResultsMessage: '',
       precheckResultsTitle: '',
-      action: ''
+      action: '',
+      isWizardRestricted: false
+    }),
+    Em.Object.create({
+      displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.HOU.title'),
+      type: 'HOST_ORDERED',
+      icon: "glyphicon glyphicon-bolt",
+      description: '',
+      selected: false,
+      allowed: false,
+      isCheckComplete: false,
+      isCheckRequestInProgress: false,
+      precheckResultsMessage: '',
+      precheckResultsTitle: '',
+      action: '',
+      isWizardRestricted: !App.supports.enabledWizardForHostOrderedUpgrade
     })
   ],
 
@@ -195,7 +219,8 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     'failuresTolerance',
     'isDowngrade',
     'downgradeAllowed',
-    'isSuspended'
+    'isSuspended',
+    'isWizardRestricted'
   ],
 
   /**
@@ -815,15 +840,18 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     this.set('upgradeId', data.resources[0].Upgrade.request_id);
     this.set('upgradeVersion', params.label);
     this.set('isDowngrade', !!params.isDowngrade);
-    var upgradeMethod = this.get('upgradeMethods').findProperty('type', params.type);
-    var upgradeTypeDisplayName = null;
-    var upgradeType = null;
+    var upgradeMethod = this.get('upgradeMethods').findProperty('type', params.type),
+        upgradeTypeDisplayName = null,
+        upgradeType = null,
+        isWizardRestricted = false;
 
     if (upgradeMethod) {
       upgradeTypeDisplayName = upgradeMethod.get('displayName');
       upgradeType = upgradeMethod.get('type');
+      isWizardRestricted = upgradeMethod.get('isWizardRestricted');
     }
 
+    this.set('isWizardRestricted', isWizardRestricted);
     this.set('upgradeType', upgradeType);
     this.set('upgradeTypeDisplayName', upgradeTypeDisplayName);
     this.set('failuresTolerance', Em.Object.create({
@@ -836,6 +864,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       upgradeState: 'PENDING',
       isDowngrade: !!params.isDowngrade,
       upgradeType: upgradeType,
+      isWizardRestricted: isWizardRestricted,
       upgradeTypeDisplayName: upgradeTypeDisplayName,
       failuresTolerance: Em.Object.create({
         skipComponentFailures: params.skipComponentFailures == 'true',
@@ -934,6 +963,8 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
         });
       request.type = 'ALL';
       this.get('runningCheckRequests').push(request);
+    } else {
+      this.set('isUpgradeTypesLoaded', true);
     }
 
     return App.ModalPopup.show({
@@ -1596,6 +1627,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       currentVersion: undefined,
       upgradeTypeDisplayName: undefined,
       upgradeType: undefined,
+      isWizardRestricted: false,
       failuresTolerance: undefined,
       isDowngrade: undefined,
       downgradeAllowed: undefined
@@ -1648,7 +1680,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    * @return {App.ModalPopup}
    */
   openUpgradeDialog: function () {
-    if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+    if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') && !this.get('isWizardRestricted')) {
       App.propertyDidChange('upgradeSuspended');
       App.router.transitionTo('admin.stackUpgrade');
     }
@@ -1834,6 +1866,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       isDowngrade: lastUpgradeData.Upgrade.direction === 'DOWNGRADE',
       upgradeState: lastUpgradeData.Upgrade.request_status,
       upgradeType: lastUpgradeData.Upgrade.upgrade_type,
+      isWizardRestricted: upgradeType.get('isWizardRestricted'),
       downgradeAllowed: lastUpgradeData.Upgrade.downgrade_allowed,
       upgradeTypeDisplayName: upgradeType.get('displayName'),
       failuresTolerance: Em.Object.create({

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

@@ -1701,6 +1701,7 @@ Em.I18n.translations = {
   'admin.stackVersions.version.upgrade.upgradeOptions.RU.title': "Rolling Upgrade",
   'admin.stackVersions.version.upgrade.upgradeOptions.RU.description': "Services remain running while the upgrade is performed. Minimized disruption but slower upgrade.",
   'admin.stackVersions.version.upgrade.upgradeOptions.EU.title': "Express Upgrade",
+  'admin.stackVersions.version.upgrade.upgradeOptions.HOU.title': "Host Ordered Upgrade",
   'admin.stackVersions.version.upgrade.upgradeOptions.EU.description': "Services are stopped while the upgrade is performed. Incurs downtime, but faster upgrade.",
   'admin.stackVersions.version.upgrade.upgradeOptions.errors_bypassed': "Bypassed errors,<br/>proceed at your own risk.",
   'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.rerun':'Rerun Checks',

+ 3 - 0
ambari-web/app/styles/application.less

@@ -76,6 +76,9 @@ footer {
 
 .ru-badge {
   text-align: center;
+  a:hover {
+    text-decoration: none;
+  }
 }
 
 #top-nav, .ru-badge {

+ 3 - 0
ambari-web/app/styles/stack_versions.less

@@ -192,6 +192,9 @@
         color: #0088cc;
         font-size: 16px;
       }
+      i[disabled='disabled'] {
+        color: inherit;
+      }
       .label {
         padding: 5px 20px;
         font-size: 14px;

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

@@ -69,9 +69,10 @@
   {{/if}}
   {{#if view.stateElement.isLink}}
     {{#if view.stateElement.iconClass}}
-      <i {{bindAttr class="view.stateElement.iconClass"}}></i>
+      <i {{bindAttr class="view.stateElement.iconClass" disabled="view.stateElement.isDisabled"}}></i>
     {{/if}}
-    <a href="#" {{action runAction target="view"}}>{{view.stateElement.text}}</a>
+    <a href="#" {{action runAction target="view"}}
+        {{bindAttr disabled="view.stateElement.isDisabled"}}>{{view.stateElement.text}}</a>
     {{#if view.stateElement.isInstalling}}
       {{view App.ProgressBarView
         progressBinding="view.installProgress"

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

@@ -61,9 +61,10 @@
   {{/if}}
   {{#if view.stateElement.isLink}}
     {{#if view.stateElement.iconClass}}
-        <i {{bindAttr class="view.stateElement.iconClass"}}></i>
+      <i {{bindAttr class="view.stateElement.iconClass" disabled="view.stateElement.isDisabled"}}></i>
     {{/if}}
-      <a href="#" {{action runAction target="view"}}>{{view.stateElement.text}}</a>
+    <a href="#" {{action runAction target="view"}}
+        {{bindAttr disabled="view.stateElement.isDisabled"}}>{{view.stateElement.text}}</a>
     {{#if view.stateElement.isInstalling}}
       {{view App.ProgressBarView
           progressBinding="view.installProgress"

+ 4 - 0
ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js

@@ -226,6 +226,10 @@ App.UpgradeVersionBoxView = Em.View.extend({
       element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.resume'): text);
       element.set('isDisabled', this.get('controller.requestInProgress'));
     }
+    //For restricted upgrade wizard should be disabled in any state
+    if (this.get('controller.isWizardRestricted')) {
+      element.set('isDisabled', true);
+    }
     return element;
   }.property(
     'content.status',

+ 31 - 0
ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js

@@ -365,11 +365,25 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       expect(App.router.transitionTo.called).to.be.false;
     });
 
+    it('should not open dialog, isWizardRestricted=true', function () {
+      this.mockAuthorized.returns(true);
+      controller.set('isWizardRestricted', true);
+      controller.openUpgradeDialog();
+      expect(App.router.transitionTo.called).to.be.false;
+    });
+
     it('upgradeSuspended should not receive value', function () {
       this.mockAuthorized.returns(false);
       controller.openUpgradeDialog();
       expect(mock.observer.called).to.be.false;
     });
+
+    it('upgradeSuspended should not receive value, isWizardRestricted=true', function () {
+      this.mockAuthorized.returns(true);
+      controller.set('isWizardRestricted', true);
+      controller.openUpgradeDialog();
+      expect(mock.observer.called).to.be.false;
+    });
   });
 
   describe("#runPreUpgradeCheck()", function() {
@@ -1791,6 +1805,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
         isDowngrade: false,
         upgradeState: 'PENDING',
         upgradeType: "ROLLING",
+        isWizardRestricted: false,
         downgradeAllowed: true,
         upgradeTypeDisplayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
         failuresTolerance: Em.Object.create({
@@ -3023,6 +3038,22 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       App.clusterStatus.setClusterStatus.restore();
     });
 
+    it("setDBProperties should be called", function() {
+      controller.finish();
+      expect(controller.setDBProperties.calledWith({
+        upgradeId: undefined,
+        upgradeState: 'INIT',
+        upgradeVersion: undefined,
+        currentVersion: undefined,
+        upgradeTypeDisplayName: undefined,
+        upgradeType: undefined,
+        isWizardRestricted: false,
+        failuresTolerance: undefined,
+        isDowngrade: undefined,
+        downgradeAllowed: undefined
+      })).to.be.true;
+    });
+
     it("App.clusterStatus.setClusterStatus should be called", function() {
       controller.finish();
       expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;

+ 2 - 2
ambari-web/test/views/common/quick_link_view_test.js

@@ -20,9 +20,9 @@ var App = require('app');
 require('views/common/quick_view_link_view');
 var testHelpers = require('test/helpers');
 
-describe('App.QuickViewLinks', function () {
+describe('App.QuickLinksView', function () {
 
-  var quickViewLinks = App.QuickViewLinks.create({
+  var quickViewLinks = App.QuickLinksView.create({
     content: Em.Object.create()
   });
 

+ 22 - 0
ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js

@@ -701,6 +701,28 @@ describe('App.UpgradeVersionBoxView', function () {
         },
         title: 'upgrading, holding'
       },
+      {
+        inputData: {
+          'content.status': 'UPGRADING',
+          'isUpgrading': true,
+          'controller.isDowngrade': false,
+          'controller.upgradeVersion': 'HDP-2.2.1',
+          'controller.isWizardRestricted': true,
+          'content.displayName': 'HDP-2.2.1'
+        },
+        setup: function () {
+          this.getMock.withArgs('upgradeState').returns('HOLDING');
+        },
+        expected: {
+          isDisabled: true,
+          status: 'UPGRADING',
+          isLink: true,
+          action: 'openUpgradeDialog',
+          iconClass: 'glyphicon glyphicon-pause',
+          text: Em.I18n.t('admin.stackVersions.version.upgrade.pause')
+        },
+        title: 'upgrading, holding, isWizardRestricted=true'
+      },
       {
         inputData: {
           'content.status': 'UPGRADING',