Browse Source

AMBARI-13594.Express Upgrade: UI - Disallow RU in HDP 2.1->2.3 since no upgrade pack supports it.(xiwang)

Xi Wang 9 years ago
parent
commit
9873736281

+ 18 - 0
ambari-web/app/assets/data/stack_versions/supported_upgrade_types.json

@@ -0,0 +1,18 @@
+{
+  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/compatible_repository_versions?CompatibleRepositoryVersions/repository_version=2.3.4.0-3074",
+  "items" : [
+    {
+      "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/compatible_repository_versions/2",
+      "CompatibleRepositoryVersions" : {
+        "id" : 2,
+        "repository_version" : "2.3.4.0-3074",
+        "stack_name" : "HDP",
+        "stack_version" : "2.3",
+        "upgrade_types" : [
+          "ROLLING",
+          "NON_ROLLING"
+        ]
+      }
+    }
+  ]
+}

+ 31 - 1
ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js

@@ -605,7 +605,13 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
   upgradeOptions: function (isInUpgradeWizard, version) {
     var self = this;
     if (!isInUpgradeWizard) {
-      this.runUpgradeMethodChecks(version);
+      this.getSupportedUpgradeTypes(Ember.Object.create({
+        stackName: App.get('currentStackVersion').split('-')[0],
+        stackVersion: App.get('currentStackVersion').split('-')[1],
+        toVersion: version.get('repositoryVersion')
+      })).done(function(){
+          self.runUpgradeMethodChecks(version);
+      });
     }
 
     return App.ModalPopup.show({
@@ -767,6 +773,30 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     }
   },
 
+  /**
+   * send request to get available upgrade tye names
+   */
+  getSupportedUpgradeTypes: function(data) {
+    return App.ajax.send({
+      name: "admin.upgrade.get_supported_upgradeTypes",
+      sender: this,
+      data: data,
+      success: "getSupportedUpgradeTypesSuccess",
+      error: "getSupportedUpgradeTypesError"
+    });
+  },
+
+  /**
+   * success callback of <code>getSupportedUpgradeTypes()</code>
+   * @param data {object}
+   */
+  getSupportedUpgradeTypesSuccess: function (data) {
+    var supportedUpgradeTypes = data.items[0] && data.items[0].CompatibleRepositoryVersions.upgrade_types;
+    this.get('upgradeMethods').forEach(function (method) {
+      method.set('allowed', supportedUpgradeTypes && !!supportedUpgradeTypes.contains(method.get('type')));
+    });
+  },
+
   /**
    * success callback of <code>runPreUpgradeCheckOnly()</code>
    * Show a message how many fails/warnings/passed

+ 5 - 0
ambari-web/app/utils/ajax/ajax.js

@@ -1729,6 +1729,11 @@ var urls = {
     'mock': '/data/stack_versions/pre_upgrade_check.json'
   },
 
+  'admin.upgrade.get_supported_upgradeTypes': {
+    'real': '/stacks/{stackName}/versions/{stackVersion}/compatible_repository_versions?CompatibleRepositoryVersions/repository_version={toVersion}',
+    'mock': '/data/stack_versions/supported_upgrade_types.json'
+  },
+
   'admin.kerberos_security.checks': {
     //TODO when api will be known
     'real': '',

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

@@ -768,15 +768,20 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     before(function () {
       sinon.spy(App, 'ModalPopup');
       sinon.spy(App, 'showConfirmationFeedBackPopup');
+      this.mock = sinon.stub(controller, 'getSupportedUpgradeTypes');
       sinon.stub(controller, 'runPreUpgradeCheck', Em.K);
     });
     after(function () {
       App.ModalPopup.restore();
       App.showConfirmationFeedBackPopup.restore();
       controller.runPreUpgradeCheck.restore();
+      this.mock.restore();
     });
     it("show confirmation popup", function() {
       var version = Em.Object.create({displayName: 'HDP-2.2'});
+      this.mock.returns({
+        done: function(callback) {callback([1]);}
+      });
       controller.upgradeMethods = [
         Em.Object.create({
           displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
@@ -805,6 +810,9 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     });
     it("NOT show confirmation popup on Downgrade", function() {
       var version = Em.Object.create({displayName: 'HDP-2.2'});
+      this.mock.returns({
+        done: function(callback) {callback([1]);}
+      });
       controller.set('isDowngrade', true);
       var popup = controller.upgradeOptions(false, version);
       expect(App.ModalPopup.calledOnce).to.be.false;