You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/04/10 20:06:53 UTC
ambari git commit: AMBARI-10333. The stop service confirmation dialog
should show a warning if some other services depends on the one to be stopped
(Di Li via alejandro)
Repository: ambari
Updated Branches:
refs/heads/trunk 3133b1db4 -> 83df8c2a9
AMBARI-10333. The stop service confirmation dialog should show a warning if some other services depends on the one to be stopped (Di Li via alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/83df8c2a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/83df8c2a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/83df8c2a
Branch: refs/heads/trunk
Commit: 83df8c2a99ee2d68aa287d9a1db1dfd0cc423033
Parents: 3133b1d
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Fri Apr 10 11:05:12 2015 -0700
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Fri Apr 10 11:05:12 2015 -0700
----------------------------------------------------------------------
ambari-web/app/controllers/main/service/item.js | 50 ++++++++++++-
ambari-web/app/messages.js | 3 +-
.../test/controllers/main/service/item_test.js | 76 ++++++++++++++++++++
3 files changed, 127 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/83df8c2a/ambari-web/app/controllers/main/service/item.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/item.js b/ambari-web/app/controllers/main/service/item.js
index 8f817d2..4518efb 100644
--- a/ambari-web/app/controllers/main/service/item.js
+++ b/ambari-web/app/controllers/main/service/item.js
@@ -164,12 +164,16 @@ App.MainServiceItemController = Em.Controller.extend({
var self = this;
var serviceDisplayName = this.get('content.displayName');
var isMaintenanceOFF = this.get('content.passiveState') === 'OFF';
+
+ var msg = isMaintenanceOFF && serviceHealth == 'INSTALLED'? Em.I18n.t('services.service.stop.warningMsg.turnOnMM').format(serviceDisplayName) : null;
+ msg = self.addAdditionalWarningMessage(serviceHealth, msg, serviceDisplayName);
+
var bodyMessage = Em.Object.create({
putInMaintenance: (serviceHealth == 'INSTALLED' && isMaintenanceOFF) || (serviceHealth == 'STARTED' && !isMaintenanceOFF),
turnOnMmMsg: serviceHealth == 'INSTALLED' ? Em.I18n.t('passiveState.turnOnFor').format(serviceDisplayName) : Em.I18n.t('passiveState.turnOffFor').format(serviceDisplayName),
confirmMsg: serviceHealth == 'INSTALLED'? Em.I18n.t('services.service.stop.confirmMsg').format(serviceDisplayName) : Em.I18n.t('services.service.start.confirmMsg').format(serviceDisplayName),
confirmButton: serviceHealth == 'INSTALLED'? Em.I18n.t('services.service.stop.confirmButton') : Em.I18n.t('services.service.start.confirmButton'),
- additionalWarningMsg: isMaintenanceOFF && serviceHealth == 'INSTALLED'? Em.I18n.t('services.service.stop.warningMsg.turnOnMM').format(serviceDisplayName) : null
+ additionalWarningMsg: msg
});
return App.showConfirmationFeedBackPopup(function(query, runMmOperation) {
@@ -178,6 +182,50 @@ App.MainServiceItemController = Em.Controller.extend({
}, bodyMessage);
},
+ addAdditionalWarningMessage: function(serviceHealth, msg, serviceDisplayName){
+ var servicesAffectedDisplayNames = [];
+ var servicesAffected = [];
+
+ if(serviceHealth == 'INSTALLED'){
+ //To stop a service, display dependencies message...
+ var currentService = this.get('content.serviceName');
+ console.debug("Service to be stopped:", currentService);
+
+ var stackServices = App.StackService.find();
+ stackServices.forEach(function(service){
+ if(service.get('isInstalled') || service.get('isSelected')){ //only care about services installed...
+ var stackServiceDisplayName = service.get("displayName");
+ console.debug("Checking service dependencies for " + stackServiceDisplayName);
+ var requiredServices = service.get('requiredServices'); //services required in order to have the current service be functional...
+ if (!!requiredServices && requiredServices.length) { //only care about services with a non-empty requiredServices list.
+ console.debug("Service dependencies for " + stackServiceDisplayName, requiredServices);
+
+ requiredServices.forEach(function(_requiredService){
+ if (currentService === _requiredService) { //the service to be stopped is a required service by some other services...
+ console.debug(currentService + " is a service dependency for " + stackServiceDisplayName);
+ if(servicesAffected.indexOf(service) == -1 ) {
+ servicesAffected.push(service);
+ servicesAffectedDisplayNames.push(stackServiceDisplayName);
+ }
+ }
+ },this);
+ }
+ }
+ },this);
+
+ var names = servicesAffectedDisplayNames.join();
+ if(names){
+ //only display this line with a non-empty dependency list
+ var dependenciesMsg = Em.I18n.t('services.service.stop.warningMsg.dependent.services').format(serviceDisplayName,names);
+ if(msg)
+ msg = msg + " " + dependenciesMsg;
+ else
+ msg = dependenciesMsg;
+ }
+ }
+
+ return msg;
+ },
startStopWithMmode: function(serviceHealth, query, runMmOperation) {
var self = this;
http://git-wip-us.apache.org/repos/asf/ambari/blob/83df8c2a/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index cc92d2d..4d7a811 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1727,7 +1727,8 @@ Em.I18n.translations = {
'services.service.stop.confirmMsg' : 'You are about to stop {0}',
'services.service.stop.confirmButton': 'Confirm Stop',
'services.service.start.confirmButton' : 'Confirm Start',
- 'services.service.stop.warningMsg.turnOnMM': 'This will generate alerts as the service is stopped. To suppress alerts, turn on Maintenance Mode for {0} prior to stopping',
+ 'services.service.stop.warningMsg.turnOnMM': 'This will generate alerts as the service is stopped. To suppress alerts, turn on Maintenance Mode for {0} prior to stopping.',
+ 'services.service.stop.warningMsg.dependent.services': 'Stopping {0} may impair the functioning of its dependent service(s): {1}.',
'services.service.restartAll.confirmButton': 'Confirm Restart All',
'services.service.restartAll.confirmMsg': 'You are about to restart {0}',
'services.service.restartAll.warningMsg.turnOnMM': 'This will trigger alerts as the service is restarted. To suppress alerts, turn on Maintenance Mode for {0} prior to running restart all',
http://git-wip-us.apache.org/repos/asf/ambari/blob/83df8c2a/ambari-web/test/controllers/main/service/item_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/item_test.js b/ambari-web/test/controllers/main/service/item_test.js
index 7d57570..b6e969b 100644
--- a/ambari-web/test/controllers/main/service/item_test.js
+++ b/ambari-web/test/controllers/main/service/item_test.js
@@ -407,6 +407,46 @@ describe('App.MainServiceItemController', function () {
});
describe("modal messages", function() {
+
+ beforeEach(function () {
+ sinon.stub(App.StackService, 'find').returns([
+ Em.Object.create({
+ serviceName: 'HDFS',
+ displayName: 'HDFS',
+ isInstalled: true,
+ isSelected: true,
+ requiredServices:["ZOOKEEPER"]
+ }),
+ Em.Object.create({
+ serviceName: 'HIVE',
+ displayName: 'Hive',
+ isInstalled: true,
+ isSelected: true
+ }),
+ Em.Object.create({
+ serviceName: 'HBASE',
+ displayName: 'HBase',
+ isInstalled: true,
+ isSelected: true,
+ requiredServices:["HDFS", "ZOOKEEPER"]
+ }),
+ Em.Object.create({
+ serviceName: 'YARN',
+ displayName: 'YARN',
+ isInstalled: true,
+ isSelected: true,
+ requiredServices:["HDFS"]
+ }),
+ Em.Object.create({
+ serviceName: 'SPARK',
+ displayName: 'Spark',
+ isInstalled: true,
+ isSelected: true,
+ requiredServices:["HIVE"]
+ })
+ ]);
+ });
+
it ("should confirm stop if serviceHealth is INSTALLED", function() {
mainServiceItemController.startStopPopup(event, "INSTALLED");
expect(Em.I18n.t.calledWith('services.service.stop.confirmMsg')).to.be.ok;
@@ -418,6 +458,42 @@ describe('App.MainServiceItemController', function () {
expect(Em.I18n.t.calledWith('services.service.start.confirmMsg')).to.be.ok;
expect(Em.I18n.t.calledWith('services.service.start.confirmButton')).to.be.ok;
});
+
+ it ("should not display a dependent list if it is to start a service", function() {
+ var mainServiceItemController = App.MainServiceItemController.create(
+ {content: {serviceName: "HDFS", passiveState:'OFF'}});
+ mainServiceItemController.startStopPopup(event, "");
+ expect(Em.I18n.t.calledWith('services.service.stop.warningMsg.dependent.services')).to.not.be.ok;
+ });
+
+ it ("should display dependent list if other services depend on the one to be stopped", function() {
+ var mainServiceItemController = App.MainServiceItemController.create(
+ {content: {serviceName: "HDFS", passiveState:'OFF'}});
+ mainServiceItemController.startStopPopup(event, "INSTALLED");
+ expect(Em.I18n.t.calledWith('services.service.stop.warningMsg.turnOnMM')).to.be.ok;
+ expect(Em.I18n.t.calledWith('services.service.stop.warningMsg.dependent.services')).to.be.ok;
+
+ var dependencies = Em.I18n.t('services.service.stop.warningMsg.dependent.services').format("HDFS", "HBase,YARN")
+ var msg = Em.I18n.t('services.service.stop.warningMsg.turnOnMM').format("HDFS");
+ var fullMsg = mainServiceItemController.addAdditionalWarningMessage("INSTALLED", msg, "HDFS");
+ expect(fullMsg).to.be.equal(msg + " " + dependencies);
+ });
+
+ it ("should display the dependent service if another service depends on the one to be stopped", function() {
+ var mainServiceItemController = App.MainServiceItemController.create(
+ {content: {serviceName: "HIVE", passiveState:'OFF'}});
+ mainServiceItemController.startStopPopup(event, "INSTALLED");
+ expect(Em.I18n.t.calledWith('services.service.stop.warningMsg.dependent.services')).to.be.ok;
+
+ var dependencies = Em.I18n.t('services.service.stop.warningMsg.dependent.services').format("HIVE", "Spark")
+ var msg = Em.I18n.t('services.service.stop.warningMsg.turnOnMM').format("HIVE");
+ var fullMsg = mainServiceItemController.addAdditionalWarningMessage("INSTALLED", msg, "HIVE");
+ expect(fullMsg).to.be.equal(msg + " " + dependencies);
+ });
+
+ afterEach(function () {
+ App.StackService.find.restore();
+ });
});
});