You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2016/02/10 17:13:02 UTC
[05/24] ambari git commit: AMBARI-14846. Dependencies popup is
displayed even when all dependent services are selected (alexantonenko)
AMBARI-14846. Dependencies popup is displayed even when all dependent services are selected (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f905a024
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f905a024
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f905a024
Branch: refs/heads/branch-dev-patch-upgrade
Commit: f905a0243ec34df9c74cc76551cecd53a8251523
Parents: a396ff0
Author: Alex Antonenko <hi...@gmail.com>
Authored: Mon Feb 8 21:29:39 2016 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Mon Feb 8 21:29:47 2016 +0200
----------------------------------------------------------------------
.../app/controllers/wizard/step4_controller.js | 122 +++++++++++++++----
.../test/controllers/wizard/step4_test.js | 40 +++++-
2 files changed, 136 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f905a024/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 90479ac..a8ad7fc 100644
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ b/ambari-web/app/controllers/wizard/step4_controller.js
@@ -86,13 +86,23 @@ App.WizardStep4Controller = Em.ArrayController.extend({
*/
ambariMetricsValidation: function (callback) {
var ambariMetricsService = this.findProperty('serviceName', 'AMBARI_METRICS');
- if (ambariMetricsService && !ambariMetricsService.get('isSelected')) {
- this.addValidationError({
- id: 'ambariMetricsCheck',
- type: 'WARNING',
- callback: this.ambariMetricsCheckPopup,
- callbackParams: [callback]
- });
+ if (ambariMetricsService) {
+ if(!ambariMetricsService.get('isSelected')) {
+ this.addValidationError({
+ id: 'ambariMetricsCheck',
+ type: 'WARNING',
+ callback: this.ambariMetricsCheckPopup,
+ callbackParams: [callback]
+ });
+ }
+ else {
+ //metrics is selected, remove the metrics error from errorObject array
+ var metricsError = this.get('errorStack').filterProperty('id',"ambariMetricsCheck");
+ if(metricsError)
+ {
+ this.get('errorStack').removeObject(metricsError[0]);
+ }
+ }
}
},
@@ -103,13 +113,23 @@ App.WizardStep4Controller = Em.ArrayController.extend({
*/
rangerValidation: function (callback) {
var rangerService = this.findProperty('serviceName', 'RANGER');
- if (rangerService && rangerService.get('isSelected') && !rangerService.get('isInstalled')) {
- this.addValidationError({
- id: 'rangerRequirements',
- type: 'WARNING',
- callback: this.rangerRequirementsPopup,
- callbackParams: [callback]
- });
+ if (rangerService && !rangerService.get('isInstalled')) {
+ if(rangerService.get('isSelected')) {
+ this.addValidationError({
+ id: 'rangerRequirements',
+ type: 'WARNING',
+ callback: this.rangerRequirementsPopup,
+ callbackParams: [callback]
+ });
+ }
+ else {
+ //Ranger is selected, remove the Ranger error from errorObject array
+ var rangerError = this.get('errorStack').filterProperty('id',"rangerRequirements");
+ if(rangerError)
+ {
+ this.get('errorStack').removeObject(rangerError[0]);
+ }
+ }
}
},
@@ -120,14 +140,24 @@ App.WizardStep4Controller = Em.ArrayController.extend({
*/
sparkValidation: function (callback) {
var sparkService = this.findProperty('serviceName', 'SPARK');
- if (sparkService && sparkService.get('isSelected') && !sparkService.get('isInstalled') &&
+ if (sparkService && !sparkService.get('isInstalled') &&
App.get('currentStackName') == 'HDP' && App.get('currentStackVersionNumber') == '2.2') {
- this.addValidationError({
- id: 'sparkWarning',
- type: 'WARNING',
- callback: this.sparkWarningPopup,
- callbackParams: [callback]
- });
+ if(sparkService.get('isSelected')) {
+ this.addValidationError({
+ id: 'sparkWarning',
+ type: 'WARNING',
+ callback: this.sparkWarningPopup,
+ callbackParams: [callback]
+ });
+ }
+ else {
+ //Spark is selected, remove the Spark error from errorObject array
+ var sparkError = this.get('errorStack').filterProperty('id',"sparkWarning");
+ if(sparkError)
+ {
+ this.get('errorStack').removeObject(sparkError[0]);
+ }
+ }
}
},
@@ -317,6 +347,15 @@ App.WizardStep4Controller = Em.ArrayController.extend({
callbackParams: [services, 'multipleDFS', primaryDfsDisplayName, callback]
});
}
+ else
+ {
+ //if multiple DFS are not selected, remove the related error from the error array
+ var fsError = this.get('errorStack').filterProperty('id',"multipleDFS");
+ if(fsError)
+ {
+ this.get('errorStack').removeObject(fsError[0]);
+ }
+ }
}
}
},
@@ -335,16 +374,34 @@ App.WizardStep4Controller = Em.ArrayController.extend({
if (!!requiredServices && requiredServices.length) {
requiredServices.forEach(function(_requiredService){
var requiredService = this.findProperty('serviceName', _requiredService);
- if (requiredService && requiredService.get('isSelected') === false) {
- if(missingDependencies.indexOf(_requiredService) == -1 ) {
- missingDependencies.push(_requiredService);
- missingDependenciesDisplayName.push(requiredService.get('displayNameOnSelectServicePage'));
+ if (requiredService) {
+ if(requiredService.get('isSelected') === false)
+ {
+ if(missingDependencies.indexOf(_requiredService) == -1 ) {
+ missingDependencies.push(_requiredService);
+ missingDependenciesDisplayName.push(requiredService.get('displayNameOnSelectServicePage'));
+ }
}
+ else
+ {
+ //required service is selected, remove the service error from errorObject array
+ var serviceName = requiredService.get('serviceName');
+ var serviceError = this.get('errorStack').filterProperty('id',"serviceCheck_"+serviceName);
+ if(serviceError)
+ {
+ this.get('errorStack').removeObject(serviceError[0]);
+ }
+ }
}
},this);
}
},this);
+ //create a copy of the errorStack, reset it
+ //and add the dependencies in the correct order
+ var errorStackCopy = this.get('errorStack');
+ this.set('errorStack', []);
+
if (missingDependencies.length > 0) {
for(var i = 0; i < missingDependencies.length; i++) {
this.addValidationError({
@@ -352,7 +409,22 @@ App.WizardStep4Controller = Em.ArrayController.extend({
callback: this.needToAddServicePopup,
callbackParams: [{serviceName: missingDependencies[i], selected: true}, 'serviceCheck', missingDependenciesDisplayName[i], callback]
});
+ }
+ }
+
+ //iterate through the errorStackCopy array and add to errorStack array, the error objects that have no matching entry in the errorStack
+ //and that are not related to serviceChecks since serviceCheck errors have already been added when iterating through the missing dependencies list
+ //Only add Ranger, Ambari Metrics, Spark and file system service validation errors if they exist in the errorStackCopy array
+ var ctr = 0;
+ while(ctr < errorStackCopy.length) {
+ //no matching entry in errorStack array
+ if (!this.get('errorStack').someProperty('id', errorStackCopy[ctr].id)) {
+ //not serviceCheck error
+ if(!errorStackCopy[ctr].id.startsWith('serviceCheck_')) {
+ this.get('errorStack').push(this.createError(errorStackCopy[ctr]));
+ }
}
+ ctr++;
}
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/f905a024/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 80667c9..7796d61 100644
--- a/ambari-web/test/controllers/wizard/step4_test.js
+++ b/ambari-web/test/controllers/wizard/step4_test.js
@@ -25,7 +25,7 @@ describe('App.WizardStep4Controller', function () {
var services = [
'HDFS', 'GANGLIA', 'OOZIE', 'HIVE', 'HBASE', 'PIG', 'SCOOP', 'ZOOKEEPER',
- 'YARN', 'MAPREDUCE2', 'FALCON', 'TEZ', 'STORM', 'AMBARI_METRICS', 'RANGER', 'SPARK'
+ 'YARN', 'MAPREDUCE2', 'FALCON', 'TEZ', 'STORM', 'AMBARI_METRICS', 'RANGER', 'SPARK', 'SLIDER'
];
var controller = App.WizardStep4Controller.create();
@@ -625,6 +625,44 @@ describe('App.WizardStep4Controller', function () {
})
});
+ describe('#serviceDependencyValidation', function () {
+
+ var cases = [
+ {
+ services: ['HBASE'],
+ dependentServices: ['HDFS', 'ZOOKEEPER'],
+ title: 'HBASE selected and HDFS not selected initially'
+ },
+ {
+ services: ['TEZ', 'HDFS'],
+ dependentServices: ['ZOOKEEPER', 'YARN'],
+ title: 'TEZ selected and ZOOKEEPER not selected initially'
+ }
+ ];
+
+ beforeEach(function() {
+ controller.clear();
+ controller.set('errorStack', []);
+ });
+
+ cases.forEach(function (item) {
+ it(item.title, function () {
+ controller.set('content', generateSelectedServicesContent(item.services));
+ controller.serviceDependencyValidation();
+ expect(controller.get('errorStack').mapProperty('id').contains("serviceCheck_"+item.dependentServices[0])).to.equal(true);
+ expect(controller.get('errorStack').mapProperty('id').contains("serviceCheck_"+item.dependentServices[1])).to.equal(true);
+ controller.findProperty('serviceName', item.dependentServices[0]).set('isSelected', true);
+
+ //simulate situation where user clicks cancel on error for first dependent service and then selects it in which case
+ //serviceDependencyValidation() will be called again
+ controller.serviceDependencyValidation();
+ //error for first dependent service must be removed from errorStack array
+ expect(controller.get('errorStack').mapProperty('id').contains("serviceCheck_"+item.dependentServices[0])).to.equal(false);
+ expect(controller.get('errorStack').mapProperty('id').contains("serviceCheck_"+item.dependentServices[1])).to.equal(true);
+ });
+ });
+ });
+
describe('#ambariMetricsValidation', function () {
var cases = [