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 <ishanbhatt.1...@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 ishan...@apache.org.