You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/10/18 19:33:00 UTC

[08/12] ambari git commit: AMBARI-18627. Add service wizard hung at Choose services page as no ClusterStackVersion is available with state=CURRENT (alexantonenko)

AMBARI-18627. Add service wizard hung at Choose services page as no ClusterStackVersion is available with state=CURRENT (alexantonenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: ee2a12527864dd1238b18366badfec89465444b3
Parents: 3fc0b3e
Author: Alex Antonenko <hi...@gmail.com>
Authored: Tue Oct 18 17:00:16 2016 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Oct 18 18:03:24 2016 +0300

----------------------------------------------------------------------
 .../main/admin/stack_and_upgrade_controller.js  |  22 ++-
 ambari-web/app/controllers/wizard.js            |  12 +-
 ambari-web/app/utils/ajax/ajax.js               |   2 +-
 .../admin/stack_and_upgrade_controller_test.js  | 154 ++++++++++++++++---
 4 files changed, 156 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ee2a1252/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 01feb14..58344b2 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
@@ -678,7 +678,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       },
       error: errorCallback
     });
-  },  
+  },
 
   /**
    * error callback of <code>abortUpgrade()</code>
@@ -1430,7 +1430,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       stackVersionNumber = App.get('currentStackVersion');
     return stackVersionNumber;
   },
-  
+
   /**
    * perform validation if <code>skip<code> is  false and run save if
    * validation successfull or run save without validation is <code>skip<code> is true
@@ -1447,7 +1447,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
       } else {
         var repoVersion = self.prepareRepoForSaving(repo);
         var stackVersionNumber = self.getStackVersionNumber(repo);
-        
+
         App.ajax.send({
           name: 'admin.stack_versions.edit.repo',
           sender: this,
@@ -1464,7 +1464,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     });
     return deferred.promise();
   },
-  
+
   /**
    * send request for validation for each repository
    * @param {Em.Object} repo
@@ -1475,7 +1475,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     var deferred = $.Deferred(),
       totalCalls = 0,
       invalidUrls = [];
-    
+
     if (skip) {
       deferred.resolve(invalidUrls);
     } else {
@@ -1903,10 +1903,16 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    * @param {object|null} jsonData
    */
   loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var rv = jsonData.items[0].repository_versions[0].RepositoryVersions;
+    var versions = Em.getWithDefault(jsonData, 'items', []);
+    var currentVersion = versions.filterProperty('ClusterStackVersions.state', 'CURRENT')[0];
+    var rv = currentVersion || versions.filter(function(i) {
+      return i.ClusterStackVersions.stack === App.get('currentStackName') &&
+       i.ClusterStackVersions.version === App.get('currentStackVersionNumber');
+    })[0];
     var map = this.get('serviceVersionsMap');
-    if (rv) {
-      rv.stack_services.forEach(function (item) {
+    var stackServices = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.stack_services', false);
+    if (stackServices) {
+      stackServices.forEach(function (item) {
         map[item.name] = item.versions[0];
       });
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/ee2a1252/ambari-web/app/controllers/wizard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js
index e0df4fa..05cd35c 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -696,10 +696,16 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
 
   serviceVersionsMap: {},
   loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var rv = jsonData.items[0].repository_versions[0].RepositoryVersions;
+    var versions = Em.getWithDefault(jsonData, 'items', []);
+    var currentVersion = versions.filterProperty('ClusterStackVersions.state', 'CURRENT')[0];
+    var rv = currentVersion || versions.filter(function(i) {
+      return i.ClusterStackVersions.stack === App.get('currentStackName') &&
+       i.ClusterStackVersions.version === App.get('currentStackVersionNumber');
+    })[0];
     var map = this.get('serviceVersionsMap');
-    if (rv) {
-      rv.stack_services.forEach(function (item) {
+    var stackServices = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.stack_services', false);
+    if (stackServices) {
+      stackServices.forEach(function (item) {
         map[item.name] = item.versions[0];
       });
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/ee2a1252/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 a5eafef..b761a14 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1387,7 +1387,7 @@ var urls = {
     'mock': '/data/stack_versions/stack_version_all.json'
   },
   'cluster.load_current_repo_stack_services': {
-    'real': '/clusters/{clusterName}/stack_versions?ClusterStackVersions/state=CURRENT&fields=repository_versions/RepositoryVersions/stack_services',
+    'real': '/clusters/{clusterName}/stack_versions?fields=repository_versions/RepositoryVersions/stack_services,ClusterStackVersions/state',
     'mock': '/data/stack_versions/stack_version_all.json'
   },
   'cluster.save_provisioning_state': {

http://git-wip-us.apache.org/repos/asf/ambari/blob/ee2a1252/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 ecf861d..21942d4 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
@@ -3121,31 +3121,141 @@ describe('App.MainAdminStackAndUpgradeController', function() {
   });
 
   describe("#loadServiceVersionFromVersionDefinitionsSuccessCallback()", function () {
+    var cases;
+    beforeEach(function() {
+      this.appGetStub = sinon.stub(App, 'get');
+    });
 
-    it("serviceVersionsMap should be set", function() {
+    afterEach(function() {
+      App.get.restore();
       controller.set('serviceVersionsMap', {});
-      var data = {
-        items: [
-          {
-            repository_versions: [
-              {
-                RepositoryVersions: {
-                  stack_services: [
-                    {
-                      name: 'S1',
-                      versions: ['v1']
-                    }
-                  ]
+    });
+    cases = [
+      {
+        jsonData: {
+          items: [
+            {
+              ClusterStackVersions: {
+                state: 'CURRENT'
+              },
+              repository_versions: [
+                {
+                  RepositoryVersions: {
+                    stack_services: [
+                      { name: 'S1', versions: ['v1']}
+                    ]
+                  }
                 }
-              }
-            ]
-          }
-        ]
-      };
-      controller.loadServiceVersionFromVersionDefinitionsSuccessCallback(data);
-      expect(controller.get('serviceVersionsMap')).to.be.eql({
-        "S1": "v1"
-      });
+              ]
+            }
+          ]
+        },
+        currentStackData: {
+          currentStackVersionNumber: '2.2',
+          currentStackName: 'HDP'
+        },
+        m: 'should add stack services from stack version with state CURRENT',
+        e: { "S1": "v1"}
+      },
+      {
+        jsonData: {
+          items: [
+            {
+              ClusterStackVersions: {
+                version: '2.3',
+                stack: 'HDP',
+                state: 'INIT'
+              },
+              repository_versions: [
+                {
+                  RepositoryVersions: {
+                    stack_services: [
+                      { name: 'S3', versions: ['v3']}
+                    ]
+                  }
+                }
+              ]
+            },
+            {
+              ClusterStackVersions: {
+                version: '2.2',
+                stack: 'HDP',
+                state: 'INIT'
+              },
+              repository_versions: [
+                {
+                  RepositoryVersions: {
+                    stack_services: [
+                      { name: 'S2', versions: ['v2']}
+                    ]
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        currentStackData: {
+          currentStackVersionNumber: '2.2',
+          currentStackName: 'HDP'
+        },
+        m: 'should add stack services from stack version by current stack name and version number' +
+           'when CURRENT version not available',
+        e: { "S2": "v2"}
+      },
+      {
+        jsonData: {
+          items: [
+            {
+              ClusterStackVersions: {
+                version: '2.3',
+                stack: 'HDP',
+                state: 'CURRENT'
+              },
+              repository_versions: [
+                {
+                  RepositoryVersions: {
+                    stack_services: [
+                      { name: 'S3', versions: ['v3']}
+                    ]
+                  }
+                }
+              ]
+            },
+            {
+              ClusterStackVersions: {
+                version: '2.2',
+                stack: 'HDP',
+                state: 'INIT'
+              },
+              repository_versions: [
+                {
+                  RepositoryVersions: {
+                    stack_services: [
+                      { name: 'S2', versions: ['v2']}
+                    ]
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        currentStackData: {
+          currentStackVersionNumber: '2.2',
+          currentStackName: 'HDP'
+        },
+        m: 'should add stack services by state CURRENT even when there is stack version with ' +
+           'current stack name and version number',
+        e: { "S3": "v3"}
+      }
+    ];
+
+    cases.forEach(function(test) {
+      it(test.m, function() {
+        this.appGetStub.withArgs('currentStackName').returns(test.currentStackData.currentStackName)
+          .withArgs('currentStackVersionNumber').returns(test.currentStackData.currentStackVersionNumber);
+        controller.loadServiceVersionFromVersionDefinitionsSuccessCallback(test.jsonData);
+        expect(controller.get('serviceVersionsMap')).to.be.eql(test.e);
+      })
     });
   });