Browse Source

AMBARI-11185. Edit Repositories on an added repo version fails with 500 status code. (Di Li via Jaimin)

Jaimin Jetly 10 years ago
parent
commit
8e496ce611

+ 19 - 5
ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js

@@ -556,6 +556,17 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     return repoVersion;
   },
 
+  /**
+   * Return stack version for the repo object
+   * @param {Em.Object} repo
+   * */
+  getStackVersionNumber: function(repo){
+    var stackVersionNumber = repo.get('stackVersion');
+    if(null == stackVersionNumber)
+      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
@@ -571,13 +582,15 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
         deferred.resolve(data);
       } else {
         var repoVersion = self.prepareRepoForSaving(repo);
-
+        var stackVersionNumber = self.getStackVersionNumber(repo);
+        console.log("Repository stack version:"+stackVersionNumber);
+        
         App.ajax.send({
           name: 'admin.stack_versions.edit.repo',
           sender: this,
           data: {
             stackName: App.get('currentStackName'),
-            stackVersion: App.get('currentStackVersionNumber'),
+            stackVersion: stackVersionNumber,
             repoVersionId: repo.get('repoVersionId'),
             repoVersion: repoVersion
           }
@@ -588,7 +601,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     });
     return deferred.promise();
   },
-
+  
   /**
    * send request for validation for each repository
    * @param {Em.Object} repo
@@ -599,10 +612,11 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     var deferred = $.Deferred(),
       totalCalls = 0,
       invalidUrls = [];
-
+    
     if (skip) {
       deferred.resolve(invalidUrls);
     } else {
+      var stackVersionNumber = this.getStackVersionNumber(repo);
       repo.get('operatingSystems').forEach(function (os) {
         if (os.get('isSelected')) {
           os.get('repositories').forEach(function (repo) {
@@ -616,7 +630,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
                 baseUrl: repo.get('baseUrl'),
                 osType: os.get('osType'),
                 stackName: App.get('currentStackName'),
-                stackVersion: App.get('currentStackVersionNumber')
+                stackVersion: stackVersionNumber
               }
             })
               .success(function () {

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

@@ -185,6 +185,25 @@ App.UpgradeVersionBoxView = Em.View.extend({
     }
   },
 
+  /**
+   * @param App.RepositoryVersion
+   * */
+  getStackVersionNumber: function(repository){
+    var stackVersion = null; 
+    var systems = repository.get('operatingSystems');
+    
+    systems.forEach(function(os){
+      repos = os.get('repositories');
+      repos.forEach(function(repo){
+        stackVersion = repo.get('stackVersion');
+        if(null != stackVersion)
+          return stackVersion;
+      });
+    });
+
+    return stackVersion; 
+  },
+  
   /**
    * show popup with repositories to edit
    * @return {App.ModalPopup}
@@ -197,6 +216,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
       repoVersionId: repoRecord.get('id'),
       displayName: repoRecord.get('displayName'),
       repositoryVersion: repoRecord.get('displayName'),
+      stackVersion: self.getStackVersionNumber(repoRecord),
       operatingSystems: repoRecord.get('operatingSystems').map(function (os) {
         return Em.Object.create({
           osType: os.get('osType'),

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

@@ -763,6 +763,30 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     });
   });
 
+  describe("#getStackVersionNumber()", function(){
+    it("get stack version number", function(){
+      var repo = Em.Object.create({
+        "stackVersionType": 'HDP',
+        "stackVersion": '2.3',
+        "repositoryVersion": '2.2.1'
+      });
+      
+      var stackVersion = controller.getStackVersionNumber(repo);
+      expect(stackVersion).to.equal('2.3');
+    });
+    
+    it("get default stack version number", function(){
+      App.set('currentStackVersion', '1.2.3');
+      var repo = Em.Object.create({
+        "stackVersionType": 'HDP',
+        "repositoryVersion": '2.2.1'
+      });
+      
+      var stackVersion = controller.getStackVersionNumber(repo);
+      expect(stackVersion).to.equal('1.2.3');
+    });
+  });
+  
   describe("#saveRepoOS()", function() {
     before(function(){
       this.mock = sinon.stub(controller, 'validateRepoVersions');

+ 29 - 1
ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js

@@ -182,7 +182,35 @@ describe('App.UpgradeVersionBoxView', function () {
       expect(view.get('controller').upgrade.called).to.be.false;
     });
   });
-
+  
+  describe("#getStackVersionNumber()", function(){
+    it("get stack version number", function(){
+      var repoRecord = Em.Object.create({
+        operatingSystems: [
+          Em.Object.create({
+            osType: "redhat6",
+            repositories: [Em.Object.create({
+                "baseUrl": "111121",
+                "repoId": "HDP-2.3",
+                "repoName": "HDP",
+                "stackVersion": "2.3",
+                hasError: false
+            }), Em.Object.create({
+                "baseUrl": "1",
+                "repoId": "HDP-UTILS-1.1.0.20",
+                "repoName": "HDP-UTILS",
+                "stackVersion": "2.3",
+                hasError: false
+              })]
+           })
+        ]
+      });
+      
+      var stackVersionNumber = view.getStackVersionNumber(repoRecord);
+      expect(stackVersionNumber).to.equal('2.3');
+    });
+  });
+  
   describe("#editRepositories()", function () {
     beforeEach(function () {
       sinon.stub(App.RepositoryVersion, 'find').returns(Em.Object.create({