You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2014/08/27 22:39:40 UTC
git commit: AMBARI-7041. Select Services page: service dependencies
should be derived from stack API. (jaimin)
Repository: ambari
Updated Branches:
refs/heads/trunk b267bd828 -> f6ee0747c
AMBARI-7041. Select Services page: service dependencies should be derived from stack API. (jaimin)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f6ee0747
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f6ee0747
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f6ee0747
Branch: refs/heads/trunk
Commit: f6ee0747c1fa2750f0eb5c6822d5023e489d8b91
Parents: b267bd8
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Wed Aug 27 13:37:18 2014 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Wed Aug 27 13:37:18 2014 -0700
----------------------------------------------------------------------
.../app/controllers/wizard/step4_controller.js | 35 +++++++-----
ambari-web/app/mappers/stack_service_mapper.js | 1 +
ambari-web/app/models/stack_service.js | 44 +--------------
.../test/controllers/wizard/step4_test.js | 38 ++++++++++++-
ambari-web/test/service_components.js | 58 +++++++++++++++++++-
5 files changed, 115 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6ee0747/ambari-web/app/controllers/wizard/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step4_controller.js b/ambari-web/app/controllers/wizard/step4_controller.js
index 22774d2..92dbed4 100644
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ b/ambari-web/app/controllers/wizard/step4_controller.js
@@ -254,27 +254,34 @@ App.WizardStep4Controller = Em.ArrayController.extend({
* @method serviceDependencyValidation
*/
serviceDependencyValidation: function() {
- var notSelectedServices = this.filterProperty('isSelected',false);
- notSelectedServices.forEach(function(service){
- var showWarningPopup;
- var dependentServices = service.get('dependentServices');
+ var selectedServices = this.filterProperty('isSelected',true);
+ var missingDependencies = [];
+ var missingDependenciesDisplayName = [];
+ selectedServices.forEach(function(service){
+
+ var dependentServices = service.get('requiredServices');
if (!!dependentServices) {
- showWarningPopup = false;
dependentServices.forEach(function(_dependentService){
var dependentService = this.findProperty('serviceName', _dependentService);
- if (dependentService && dependentService.get('isSelected') === true) {
- showWarningPopup = true;
+ if (dependentService && dependentService.get('isSelected') === false) {
+ if(missingDependencies.indexOf(_dependentService) == -1 ) {
+ missingDependencies.push(_dependentService);
+ missingDependenciesDisplayName.push(dependentService.get('displayNameOnSelectServicePage'));
+ }
}
},this);
- if (showWarningPopup) {
- this.addValidationError({
- id: 'serviceCheck_' + service.get('serviceName'),
- callback: this.needToAddServicePopup,
- callbackParams: [{serviceName: service.get('serviceName'), selected: true}, 'serviceCheck', service.get('displayNameOnSelectServicePage')]
- });
- }
}
},this);
+
+ if (missingDependencies.length > 0) {
+ for(var i = 0; i < missingDependencies.length; i++) {
+ this.addValidationError({
+ id: 'serviceCheck_' + missingDependencies[i],
+ callback: this.needToAddServicePopup,
+ callbackParams: [{serviceName: missingDependencies[i], selected: true}, 'serviceCheck', missingDependenciesDisplayName[i]]
+ });
+ }
+ }
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6ee0747/ambari-web/app/mappers/stack_service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_service_mapper.js b/ambari-web/app/mappers/stack_service_mapper.js
index 7609d9d..1f3d0c2 100644
--- a/ambari-web/app/mappers/stack_service_mapper.js
+++ b/ambari-web/app/mappers/stack_service_mapper.js
@@ -32,6 +32,7 @@ App.stackServiceMapper = App.QuickDataMapper.create({
stack_version: 'stack_version',
is_selected: 'is_selected',
is_installed: 'is_installed',
+ required_services: 'required_services',
service_check_supported: 'service_check_supported',
service_components_key: 'service_components',
service_components_type: 'array',
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6ee0747/ambari-web/app/models/stack_service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_service.js b/ambari-web/app/models/stack_service.js
index 7c69804..a711936 100644
--- a/ambari-web/app/models/stack_service.js
+++ b/ambari-web/app/models/stack_service.js
@@ -49,6 +49,7 @@ App.StackService = DS.Model.extend({
isInstalled: DS.attr('boolean', {defaultValue: false}),
serviceComponents: DS.hasMany('App.StackServiceComponent'),
configs: DS.attr('array'),
+ requiredServices: DS.attr('array'),
// Is the service a distributed filesystem
isDFS: function () {
@@ -90,34 +91,6 @@ App.StackService = DS.Model.extend({
return hiddenServices.contains(this.get('serviceName'));
}.property('serviceName'),
- dependentServices: function () {
- var serviceName = this.get('serviceName');
- var dependentServices = [];
- if (App.get('isHadoop2Stack')) {
- dependentServices = App.StackService.dependency['HDP-2'][serviceName];
- } else {
- dependentServices = App.StackService.dependency['HDP-1'][serviceName];
- }
- return dependentServices;
- }.property('serviceName'),
-
- /**
- * other services on which the service is dependent
- */
- serviceDependency: function () {
- var serviceName = this.get('serviceName');
- var serviceDependencyMap, key, serviceDependencies = [];
- if (App.get('isHadoop2Stack')) {
- serviceDependencyMap = App.StackService.dependency['HDP-2'];
- } else {
- serviceDependencyMap = App.StackService.dependency['HDP-1'];
- }
- for (key in serviceDependencyMap) {
- if (serviceDependencyMap[key].contains(serviceName)) serviceDependencies.push(key);
- }
- return serviceDependencies;
- }.property('serviceName'),
-
// Is the service required for monitoring of other hadoop ecosystem services
isMonitoringService: function () {
var services = ['NAGIOS', 'GANGLIA'];
@@ -223,21 +196,6 @@ App.StackService.displayOrder = [
'FLUME'
];
-App.StackService.dependency = {
- 'HDP-1': {
- 'HDFS': ['MAPREDUCE', 'HBASE', 'SQOOP'],
- 'MAPREDUCE': ['PIG', 'OOZIE', 'HIVE'],
- 'ZOOKEEPER': ['HBASE', 'HIVE', 'WEBHCAT']
- },
- 'HDP-2': {
- 'ZOOKEEPER': ['HDFS', 'HBASE', 'HIVE', 'WEBHCAT', 'STORM'],
- 'HDFS': ['YARN', 'HBASE', 'FLUME', 'SQOOP'],
- 'YARN': ['PIG', 'OOZIE', 'HIVE', 'TEZ'],
- 'TEZ': ['YARN'],
- 'OOZIE': ['FALCON']
- }
-};
-
//@TODO: Write unit test for no two keys in the object should have any intersecting elements in their values
App.StackService.coSelected = {
'YARN': ['MAPREDUCE2'],
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6ee0747/ambari-web/test/controllers/wizard/step4_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step4_test.js b/ambari-web/test/controllers/wizard/step4_test.js
index ca693e4..7344853 100644
--- a/ambari-web/test/controllers/wizard/step4_test.js
+++ b/ambari-web/test/controllers/wizard/step4_test.js
@@ -32,6 +32,7 @@ describe('App.WizardStep4Controller', function () {
var generateSelectedServicesContent = function(selectedServiceNames) {
var allServices = services.slice(0);
+ modelSetup.setupStackServiceComponent();
if (selectedServiceNames.contains('GLUSTERFS')) allServices.push('GLUSTERFS');
allServices = allServices.map(function(serviceName) {
return [Ember.Object.create({
@@ -42,7 +43,7 @@ describe('App.WizardStep4Controller', function () {
isPrimaryDFS: serviceName == 'HDFS',
isDFS: ['HDFS','GLUSTERFS'].contains(serviceName),
isMonitoringService: ['NAGIOS','GANGLIA'].contains(serviceName),
- dependentServices: App.StackService.dependency['HDP-2'][serviceName],
+ requiredServices: App.StackService.find(serviceName).get('requiredServices'),
displayNameOnSelectServicePage: App.format.role(serviceName),
coSelectedServices: function() {
return App.StackService.coSelected[this.get('serviceName')] || [];
@@ -471,4 +472,39 @@ describe('App.WizardStep4Controller', function () {
})
});
+ describe('#dependencies', function() {
+ var tests = [
+ {
+ services: ['HDFS'],
+ dependencies: ['ZOOKEEPER']
+ },
+ {
+ services: ['STORM'],
+ dependencies: ['ZOOKEEPER']
+ }
+ ];
+ tests.forEach(function(test) {
+ var message = '{0} dependency should be {1}'.format(test.services.join(','), test.dependencies.join(','));
+ it(message, function() {
+
+ controller.clear();
+ controller.set('content', generateSelectedServicesContent(test.services));
+
+ var dependentServicesTest = [];
+
+ test.services.forEach(function(serviceName) {
+ var service = controller.filterProperty('serviceName', serviceName);
+ service.forEach(function(item) {
+ var dependencies = item.get('requiredServices');
+ if(!!dependencies) {
+ dependentServicesTest = dependentServicesTest.concat(dependencies);
+ }
+ });
+ });
+
+ expect(dependentServicesTest).to.be.eql(test.dependencies);
+ });
+ })
+ });
+
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6ee0747/ambari-web/test/service_components.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/service_components.js b/ambari-web/test/service_components.js
index 8b89ab3..091048c 100644
--- a/ambari-web/test/service_components.js
+++ b/ambari-web/test/service_components.js
@@ -25,7 +25,10 @@ module.exports = {
"display_name" : "MapReduce",
"service_version" : "1.2.0.1.3.3.0",
"stack_name" : "HDP",
- "stack_version" : "1.3.2"
+ "stack_version" : "1.3.2",
+ "required_services" : [
+ "YARN"
+ ]
},
"serviceComponents" : [
{
@@ -115,7 +118,10 @@ module.exports = {
"final" : "true"
}
}
- }
+ },
+ "required_services" : [
+ "OOZIE"
+ ]
},
"serviceComponents" : [
{
@@ -201,7 +207,10 @@ module.exports = {
"final" : "false"
}
}
- }
+ },
+ "required_services" : [
+ "HDFS"
+ ]
},
"serviceComponents" : [
{
@@ -234,6 +243,7 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : null,
"config_types" : {
"ganglia-env" : {
"supports" : {
@@ -292,6 +302,10 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "ZOOKEEPER",
+ "HDFS"
+ ],
"config_types" : {
"hbase-env" : {
"supports" : {
@@ -401,6 +415,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "HIVE"
+ ],
"config_types" : {
"hive-env" : {
"supports" : {
@@ -445,6 +462,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "ZOOKEEPER"
+ ],
"config_types" : {
"core-site" : {
"supports" : {
@@ -586,6 +606,10 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "ZOOKEEPER",
+ "YARN"
+ ],
"config_types" : {
"hive-env" : {
"supports" : {
@@ -738,6 +762,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "YARN"
+ ],
"config_types" : {
"core-site" : {
"supports" : {
@@ -823,6 +850,7 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [ ],
"config_types" : {
"nagios-env" : {
"supports" : {
@@ -923,6 +951,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "YARN"
+ ],
"config_types" : {
"oozie-env" : {
"supports" : {
@@ -1045,6 +1076,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "YARN"
+ ],
"config_types" : {
"pig-env" : {
"supports" : {
@@ -1094,6 +1128,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "HDFS"
+ ],
"config_types" : {
"sqoop-env" : {
"supports" : {
@@ -1154,6 +1191,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "ZOOKEEPER"
+ ],
"config_types" : {
"storm-env" : {
"supports" : {
@@ -1273,6 +1313,9 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "YARN"
+ ],
"config_types" : {
"tez-env" : {
"supports" : {
@@ -1317,6 +1360,10 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "HIVE",
+ "ZOOKEEPER"
+ ],
"config_types" : {
"webhcat-env" : {
"supports" : {
@@ -1412,6 +1459,10 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [
+ "HDFS",
+ "TEZ"
+ ],
"config_types" : {
"capacity-scheduler" : {
"supports" : {
@@ -1522,6 +1573,7 @@ module.exports = {
"stack_name" : "HDP",
"stack_version" : "2.1",
"user_name" : null,
+ "required_services" : [ ],
"config_types" : {
"zoo.cfg" : {
"supports" : {