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.