You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by is...@apache.org on 2018/04/16 15:18:26 UTC

[ambari] branch branch-2.6 updated: [AMBARI-23582] UI reads service versions from base stack repo (#1006)

This is an automated email from the ASF dual-hosted git repository.

ishanbha pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/branch-2.6 by this push:
     new 982da77  [AMBARI-23582] UI reads service versions from base stack repo (#1006)
982da77 is described below

commit 982da77f25f6522a751ad8a027ecee1a45a45bb6
Author: Ishan Bhatt <is...@gmail.com>
AuthorDate: Mon Apr 16 11:18:23 2018 -0400

    [AMBARI-23582] UI reads service versions from base stack repo (#1006)
    
    * [AMBARI-23582] UI reads service versions from base stack repo
    
    * Added an extra test
---
 .../main/admin/stack_and_upgrade_controller.js     |  62 ++---
 .../main/admin/stack_upgrade/services_view.js      |  13 +-
 .../admin/stack_and_upgrade_controller_test.js     | 275 +++++++++++++++------
 3 files changed, 240 insertions(+), 110 deletions(-)

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 fc2c7bc..2ba21b5 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
@@ -2162,41 +2162,45 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     newWindow.focus();
   },
 
-  /**
-   * load version for services to display on Choose Services page
-   * should load from VersionDefinition endpoint
-   */
-  loadServiceVersionFromVersionDefinitions: function () {
-    return App.ajax.send({
-      name: 'cluster.load_current_repo_stack_services',
-      sender: this,
-      data: {
-        clusterName: App.get('clusterName')
-      },
-      success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
-      error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-    });
-  },
-
   serviceVersionsMap: {},
 
   /**
-   * @param {object|null} jsonData
+   * load version for services to display on admin service page
+   * it should be fetched from the repo which corresponds to the desiredRepositoryVersionId of the service
    */
-  loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var rv = Em.getWithDefault(jsonData, 'items', []).filter(function(i) {
-      return Em.getWithDefault(i, 'ClusterStackVersions.stack', null) === App.get('currentStackName') &&
-       Em.getWithDefault(i, 'ClusterStackVersions.version', null) === App.get('currentStackVersionNumber');
-    })[0];
+  getServiceVersionFromRepo: function () {
+
+    var currentStackName = App.get('currentStackName');
+    var currentStackVersionNumber = App.get('currentStackVersionNumber');
     var map = this.get('serviceVersionsMap');
-    var stackServices = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.stack_services', false);
-    if (stackServices) {
-      stackServices.forEach(function (item) {
-        map[item.name] = item.versions[0];
+
+    var stackServices = App.StackService.find().filter(function (service) {
+      return service.get('stackName') === currentStackName && service.get('stackVersion') === currentStackVersionNumber;
+    });
+
+    stackServices.forEach(function (service) {
+      var serviceName = service.get('serviceName');
+
+      var installedService = App.Service.find().findProperty('serviceName', serviceName);
+      var desiredRepositoryVersionId = installedService ? installedService.get('desiredRepositoryVersionId') : null;
+      var serviceVersion = "";
+      var currentStackRepoVersions = App.RepositoryVersion.find().filter(function (repoVersion) {
+        return repoVersion.get('stackVersionType') === currentStackName && repoVersion.get('stackVersionNumber') === currentStackVersionNumber;
       });
-    }
-  },
 
-  loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) {}
+      //Get service version from the current standard repo for stack services which are not installed else search by id
+      if(!desiredRepositoryVersionId) {
+        currentStackRepoVersions.forEach(function(repoVersion) {
+          if(repoVersion.get('isCurrent') && repoVersion.get('isStandard')) {
+            serviceVersion = repoVersion.get('stackServices').findProperty('name', serviceName).get('latestVersion');
+          }
+        })
+      } else {
+        var repoVersion = currentStackRepoVersions.findProperty('id', desiredRepositoryVersionId);
+        serviceVersion = repoVersion.get('stackServices').findProperty('name', serviceName).get('latestVersion');
+      }
+      map[serviceName] = serviceVersion;
+    });
+  }.observes('App.router.clusterController.isLoaded')
 
 });
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
index 25efffe..6c5bd29 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
@@ -32,15 +32,14 @@ App.MainAdminStackServicesView = Em.View.extend({
   services: function() {
     var services = App.supports.installGanglia ? App.StackService.find() : App.StackService.find().without(App.StackService.find('GANGLIA'));
     var controller = this.get('controller');
-    controller.loadServiceVersionFromVersionDefinitions().complete(function () {
-      return services.map(function(s) {
-        s.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[s.get('serviceName')]);
-        s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName')));
-        return s;
-      });
+
+    services.map(function(s) {
+      s.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[s.get('serviceName')]);
+      s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName')));
+      return s;
     });
     return services;
-  }.property('App.router.clusterController.isLoaded'),
+  }.property('App.router.clusterController.isLoaded', 'controller.serviceVersionsMap'),
 
   didInsertElement: function () {
     if (!App.get('stackVersionsAvailable')) {
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 4414d91..54f4e0f 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
@@ -3283,88 +3283,215 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     });
   });
 
-  describe("#loadServiceVersionFromVersionDefinitions()", function () {
+  describe("#getServiceVersionFromRepo()", function () {
 
-    it("App.ajax.send should be called", function() {
-      App.set('clusterName', 'c1');
-      controller.loadServiceVersionFromVersionDefinitions();
-      var args = testHelpers.findAjaxRequest('name', 'cluster.load_current_repo_stack_services');
-      expect(args[0]).to.be.eql({
-        name: 'cluster.load_current_repo_stack_services',
-        sender: controller,
-        data: {
-          clusterName: App.get('clusterName')
-        },
-        success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
-        error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-      });
-    });
-  });
+    var cases = [
+      {
+        currentStackName: 'HDP',
+        currentStackVersionNumber: '2.6',
+        repoVersions: [
+          Em.Object.create({
+            'id': '1',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.5',
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.6.2'
+              })
+            ]
+          }),
+          Em.Object.create({
+            'id': '2',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.7.3'
+              })
+            ]
+          })
+        ],
+        services: [
+          Em.Object.create({
+            'serviceName': 'HDFS',
+            'desiredRepositoryVersionId': '2'
+          })
+        ],
+        stackServices: [
+          Em.Object.create({
+            'serviceName': 'HDFS',
+            'stackName': 'HDP',
+            'stackVersion': '2.6'
+          })
+        ],
+        title: 'If multiple stacks should select the repo on the current stack',
+        expected: {'HDFS': '2.7.3'}
+      },
 
-  describe("#loadServiceVersionFromVersionDefinitionsSuccessCallback()", function () {
-    var cases;
-    beforeEach(function() {
-      this.appGetStub = sinon.stub(App, 'get');
-    });
+      {
+        currentStackName: 'HDP',
+        currentStackVersionNumber: '2.6',
+        repoVersions : [
+          Em.Object.create({
+            'id': '1',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.6.5'
+              })
+            ]
+          }),
+          Em.Object.create({
+            'id': '2',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.7.3'
+              })
+            ]
+          })
+        ],
+        services: [
+          Em.Object.create({
+            'serviceName': 'HDFS',
+            'desiredRepositoryVersionId': '2'
+          })
+        ],
+        stackServices: [
+          Em.Object.create({
+            'serviceName': 'HDFS',
+            'stackName': 'HDP',
+            'stackVersion': '2.6'
+          })
+        ],
+        title: 'If multiple repositories in the same stack should select by id',
+        expected: {'HDFS': '2.7.3'}
+      },
+
+      {
+        currentStackName: 'HDP',
+        currentStackVersionNumber: '2.6',
+        repoVersions : [
+          Em.Object.create({
+            'id': '1',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'isCurrent': false,
+            'isStandard': true,
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.6.5'
+              })
+            ]
+          }),
+          Em.Object.create({
+            'id': '2',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'isCurrent': false,
+            'isStandard': true,
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.7.3'
+              })
+            ]
+          })
+        ],
+
+        services: [
+          Em.Object.create({
+            'serviceName': 'YARN',
+            'desiredRepositoryVersionId': '2'
+          })
+        ],
+
+        stackServices: [
+          Em.Object.create({
+            'serviceName': 'HDFS',
+            'stackName': 'HDP',
+            'stackVersion': '2.6'
+          })
+        ],
+        title: 'No standard repo in current state - nothing should be returned',
+        expected: {'HDFS': ''}
+      },
+      {
+        currentStackName: 'HDP',
+        currentStackVersionNumber: '2.6',
+        repoVersions : [
+          Em.Object.create({
+            'id': '1',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'isCurrent': true,
+            'isStandard': true,
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.6.5'
+              })
+            ]
+          }),
+          Em.Object.create({
+            'id': '2',
+            'stackVersionType': 'HDP',
+            'stackVersionNumber': '2.6',
+            'isCurrent': false,
+            'isStandard': true,
+            'stackServices': [
+              Em.Object.create({
+                'name': 'HDFS',
+                'latestVersion': '2.7.3'
+              })
+            ]
+          })
+        ],
+
+        services: [
+          Em.Object.create({
+            'serviceName': 'YARN',
+            'desiredRepositoryVersionId': '2'
+          })
+        ],
+
+        stackServices: [
+          Em.Object.create({
+            'serviceName': 'HDFS',
+            'stackName': 'HDP',
+            'stackVersion': '2.6'
+          })
+        ],
+        title: 'Service not installed - get version from current & standard repo',
+        expected: {'HDFS': '2.6.5'}
+      },
+
+    ];
 
     afterEach(function() {
       App.get.restore();
+      App.Service.find.restore();
+      App.StackService.find.restore();
+      App.RepositoryVersion.find.restore();
       controller.set('serviceVersionsMap', {});
     });
-    cases = [
-      {
-        jsonData: {
-          items: [
-            {
-              ClusterStackVersions: {
-                version: '2.3',
-                stack: 'HDP',
-                state: 'NOT_REQUIRED'
-              },
-              repository_versions: [
-                {
-                  RepositoryVersions: {
-                    stack_services: [
-                      { name: 'S3', versions: ['v3']}
-                    ]
-                  }
-                }
-              ]
-            },
-            {
-              ClusterStackVersions: {
-                version: '2.2',
-                stack: 'HDP',
-                state: 'NOT_REQUIRED'
-              },
-              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',
-        e: { "S2": "v2"}
-      }
-    ];
 
-    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);
-      })
+    cases.forEach(function(item) {
+      it(item.title, function() {
+        sinon.stub(App, 'get').withArgs('currentStackName').returns(item.currentStackName).withArgs('currentStackVersionNumber').returns(item.currentStackVersionNumber);
+        sinon.stub(App.Service, 'find').returns(item.services);
+        sinon.stub(App.StackService, 'find').returns(item.stackServices);
+        sinon.stub(App.RepositoryVersion, 'find').returns(item.repoVersions);
+        controller.getServiceVersionFromRepo();
+        expect(controller.get('serviceVersionsMap')).to.be.eql(item.expected);
+      });
     });
   });
 

-- 
To stop receiving notification emails like this one, please contact
ishanbha@apache.org.