This is an automated email from the ASF dual-hosted git repository.
ishanbha pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new 2c18ebe [AMBARI-24720] UI: Configure Rolling Restart Advanced Options.
2c18ebe is described below
commit 2c18ebe5b45910cadb76ab4f6eae75d7067f7eda
Author: Ishan Bhatt <[email protected]>
AuthorDate: Mon Oct 1 14:24:02 2018 -0700
[AMBARI-24720] UI: Configure Rolling Restart Advanced Options.
---
ambari-web/app/messages.js | 15 +++-
ambari-web/app/styles/application.less | 44 +++++++++-
.../app/templates/common/service_restart.hbs | 96 ++++++++++++++++++----
.../app/views/common/service_restart_view.js | 53 +++++++++---
4 files changed, 178 insertions(+), 30 deletions(-)
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index bbcece5..67c45f3 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -3284,7 +3284,20 @@ Em.I18n.translations = {
'service.rolling.restart.choose.info': 'Critical services remain running
while the upgrade is performed. </br>Minimized disruption, but is a slower
upgrade.',
'service.express.restart.choose.info': 'Services are stopped when this
upgrade is performed. </br>Incurs downtime, but is a faster upgrade.',
'service.restart.show.advanced.info': 'Show advanced configurations options
<p style="font-size: 12px; color: #999999; display: inline;">(Restart by
batches/hosts, interval between restarts, etc.)</p>',
-
+ 'service.restart.rolling.title.info': 'RESTART HOSTS BY',
+ 'service.restart.rolling.batchesOfHosts': 'Batches of Hosts',
+ 'service.restart.rolling.rackByRack': 'Rack by Rack',
+ 'service.restart.rolling.advanced.noOfHosts': 'NUMBER OF HOSTS IN A BATCH',
+ 'service.restart.rolling.advanced.batchIntervalHosts': 'INTERVAL BETWEEN
BATCHES (SEC)',
+ 'service.restart.rolling.advanced.percentRacks': '% OF RACKS STARTED AT A
TIME',
+ 'service.restart.rolling.advanced.batchIntervalRacks': 'INTERVAL BETWEEN
RACKS (SEC)',
+ 'service.restart.rolling.advanced.automatic.retry': 'Automatically retry on
failed hosts',
+ 'service.restart.rolling.advanced.noOfRetries': 'NUMBER OF RETRIES PER HOST',
+ 'service.restart.rolling.advanced.max.failures.tolerated': 'MAXIMUM FAILURES
TOLERATED<p style="font-size: 11px;">(Restart process is suspended after
threshold is reached)</p>',
+ 'service.restart.rolling.advanced.max.failures.batch': 'MAXIMUM FAILURES
TOLERATED/BATCH',
+ 'service.restart.rolling.advanced.max.failures.rack': 'MAXIMUM FAILURES
TOLERATED/RACK',
+ 'service.restart.rolling.advanced.suppress.alerts': 'Suppress alerts during
rolling restart',
+ 'service.restart.rolling.advanced.pause.after.first': 'Pause after first
batch',
'rolling.command.context': 'Rolling set {0} to state "{1}" - batch {2} of
{3}',
'rolling.nothingToDo.header': 'Nothing to do',
diff --git a/ambari-web/app/styles/application.less
b/ambari-web/app/styles/application.less
index 56986e5..546aea4 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -3018,6 +3018,11 @@ a.abort-icon:hover {
}
.service-rolling-restart {
+
+ .radio + .radio, .checkbox + .checkbox {
+ margin-top: 0;
+ }
+
.restart-header-info {
margin-bottom: 30px; margin-left: 10px;
}
@@ -3026,7 +3031,7 @@ a.abort-icon:hover {
margin-bottom: 15px;
display: flex;
}
- .rolling-block, .express-block {
+ .option-rolling-block, .option-express-block {
label {
font-size: 16px;
left: -20px;
@@ -3037,9 +3042,6 @@ a.abort-icon:hover {
padding-bottom: 5px;
}
}
- .express-block {
- margin-top: 0px;
- }
.fa-caret-right {
color: #1491C1;
}
@@ -3048,5 +3050,39 @@ a.abort-icon:hover {
float: left;
clear: both;
margin-left: 40px;
+ margin-bottom: 10px;
+ a {
+ color: inherit;
+ text-decoration: none;
+ cursor: default;
+ }
+ }
+ .rolling-restart-advanced {
+ display: inline-block;
+ margin-top: 10px;
+ margin-left: 60px;
+ .rolling-restart-by {
+ display: flex;
+ margin-bottom: 20px;
+ input[type="radio"] {
+ padding-left: 15px;
+ }
+ .checkbox.radio {
+ display: inline-block;
+ }
+ .radio.big-radio {
+ padding-right: 20px;
+ }
+ }
+ .input-option {
+ padding-bottom: 10px;
+ margin: 0;
+ }
+ .num-retries {
+ padding-left: 10px;
+ }
+ .separator {
+ width: 40em;
+ }
}
}
diff --git a/ambari-web/app/templates/common/service_restart.hbs
b/ambari-web/app/templates/common/service_restart.hbs
index e183169..226b9df 100644
--- a/ambari-web/app/templates/common/service_restart.hbs
+++ b/ambari-web/app/templates/common/service_restart.hbs
@@ -18,22 +18,90 @@
<div class="service-rolling-restart">
- <h5 class="restart-header-info">{{t service.restart.choose.text}}</h5>
- <div class="restart-options">
- <div class="rolling-block col-sm-6 radio big-radio">
- <i class="fa fa-tachometer"></i>
- {{view view.rollingRestartCheckBox
labelIdentifier="use-rolling-restart"}}
- <p class="faintText">{{t service.rolling.restart.choose.info}}</p>
- </div>
+ <h5 class="restart-header-info">{{t service.restart.choose.text}}</h5>
+ <div class="restart-options">
+ <div class="option-rolling-block col-sm-6 radio big-radio">
+ <i class="fa fa-tachometer"></i>
+ {{view view.rollingRestartRadioButton
labelIdentifier="use-rolling-restart"}}
+ <p class="faintText">{{t service.rolling.restart.choose.info}}</p>
+ </div>
- <div class="express-block col-sm-6 radio big-radio">
- <i class="fa fa-bolt"></i>
- {{view view.expressRestartCheckBox
labelIdentifier="use-express-restart"}}
- <p class="faintText">{{t service.express.restart.choose.info}}</p>
- </div>
+ <div class="option-express-block col-sm-6 radio big-radio">
+ <i class="fa fa-bolt"></i>
+ {{view view.expressRestartRadioButton
labelIdentifier="use-express-restart"}}
+ <p class="faintText">{{t service.express.restart.choose.info}}</p>
</div>
+ </div>
+ {{#if view.useRolling}}
<div class="restart-advanced-configs">
- <i class="fa fa-caret-right"></i>
- <span>{{t service.restart.show.advanced.info}}</span>
+ <a href="#" {{action "toggleAdvancedOptions" target="view"}}><i
class="fa fa-caret-right"></i>
+ <span>{{t service.restart.show.advanced.info}}</span></a>
</div>
+ {{#if view.showAdvancedOptions}}
+ <div class="rolling-restart-advanced">
+ {{t service.restart.rolling.title.info}}
+ <div class="rolling-restart-by">
+ <div class="radio big-radio">
+ {{view view.batchesOfHostsRadioButton
labelIdentifier="use-batches-of-hosts"}}
+ <i class="fa fa-question-circle"></i>
+ </div>
+ <div class="radio big-radio">
+ {{view view.rackByRackRadioButton
labelIdentifier="use-rack-by-rack"}}
+ <i class="fa fa-question-circle"></i>
+ </div>
+ </div>
+ {{#if view.batchesOfHosts}}
+ <div class="input-option row">
+ <div>{{t service.restart.rolling.advanced.noOfHosts}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.noOfHostsInBatch"}}<br>
+ </div>
+ <div class=" input-option row">
+ <div>{{t
service.restart.rolling.advanced.batchIntervalHosts}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.batchIntervalHosts"}}
+ </div>
+ {{else}}
+ <div class="input-option row">
+ <div>{{t service.restart.rolling.advanced.percentRacks}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.percentRackStarted"}}<br>
+ </div>
+ <div class="input-option row">
+ <div>{{t
service.restart.rolling.advanced.batchIntervalRacks}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.batchIntervalRacks"}}
+ </div>
+ {{/if}}
+ <hr class="separator">
+ <div style="margin-top: 20px;">
+ {{view App.CheckboxView checkedBinding="view.isRetryChecked"
labelTranslate="service.restart.rolling.advanced.automatic.retry"}}
+ </div>
+ {{#if view.isRetryChecked}}
+ <div class="input-option num-retries row">
+ <div>{{t service.restart.rolling.advanced.noOfRetries}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.noOfRetriesPerHost"}}<br>
+ </div>
+ {{/if}}
+ <div class="input-option row">
+ <div>{{t
service.restart.rolling.advanced.max.failures.tolerated}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.maxFailuresTolerated"}}<br>
+ </div>
+ {{#if view.batchesOfHosts}}
+ <div class="input-option row">
+ <div>{{t
service.restart.rolling.advanced.max.failures.batch}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.maxFailuresBatch"}}
+ </div>
+ {{else}}
+ <div class="input-option row">
+ <div>{{t service.restart.rolling.advanced.max.failures.rack}}</div>
+ {{view Ember.TextField type="number" class="input-sm col-xs-2"
valueBinding="view.maxFailuresRack"}}
+ </div>
+ {{/if}}
+ <hr class="separator">
+ <div class="mtl">
+ {{view App.CheckboxView checkedBinding="view.suppressAlerts"
labelTranslate="service.restart.rolling.advanced.suppress.alerts"}}
+ </div>
+ <div class="mtm">
+ {{view App.CheckboxView checkedBinding="view.pauseAfterFirst"
labelTranslate="service.restart.rolling.advanced.pause.after.first"}}
+ </div>
+ </div>
+ {{/if}}
+ {{/if}}
</div>
\ No newline at end of file
diff --git a/ambari-web/app/views/common/service_restart_view.js
b/ambari-web/app/views/common/service_restart_view.js
index 35f9e2f..b6566e8 100644
--- a/ambari-web/app/views/common/service_restart_view.js
+++ b/ambari-web/app/views/common/service_restart_view.js
@@ -21,31 +21,62 @@ App.ServiceRestartView = Em.View.extend({
templateName: require('templates/common/service_restart'),
- useRolling: true,
-
- useExpress: false,
-
didInsertElement: function() {
+ this.initDefaultConfigs();
+ },
+
+ initDefaultConfigs: function () {
this.set('useRolling', true);
- this.set('useExpress', false);
+ this.set('showAdvancedOptions', false);
+ this.set('batchesOfHosts', true);
+ this.set('noOfHostsInBatch', 10);
+ this.set('batchIntervalHosts', 120);
+ this.set('percentRackStarted', 100);
+ this.set('batchIntervalRacks', 120);
+ this.set('isRetryChecked', true);
+ this.set('noOfRetriesPerHost', 2);
+ this.set('maxFailuresTolerated', 10);
+ this.set('maxFailuresBatch', 2);
+ this.set('maxFailuresRack', 2);
+ this.set('suppressAlerts', true);
+ this.set('pauseAfterFirst', false);
+
},
- rollingRestartCheckBox: App.RadioButtonView.extend({
+ rollingRestartRadioButton: App.RadioButtonView.extend({
labelTranslate: 'common.rolling',
checked: Em.computed.alias('parentView.useRolling'),
click: function () {
this.set('parentView.useRolling', true);
- this.set('parentView.useExpress', false);
}
}),
- expressRestartCheckBox: App.RadioButtonView.extend({
+ expressRestartRadioButton: App.RadioButtonView.extend({
labelTranslate: 'common.express',
- checked: Em.computed.alias('parentView.useExpress'),
+ checked: Em.computed.not('parentView.useRolling'),
click: function () {
this.set('parentView.useRolling', false);
- this.set('parentView.useExpress', true);
}
- })
+ }),
+
+ batchesOfHostsRadioButton: App.RadioButtonView.extend({
+ labelTranslate: 'service.restart.rolling.batchesOfHosts',
+ checked: Em.computed.alias('parentView.batchesOfHosts'),
+ click: function () {
+ this.set('parentView.batchesOfHosts', true);
+ }
+ }),
+
+ rackByRackRadioButton: App.RadioButtonView.extend({
+ labelTranslate: 'service.restart.rolling.rackByRack',
+ checked: Em.computed.not('parentView.batchesOfHosts'),
+ click: function () {
+ this.set('parentView.batchesOfHosts', false);
+ }
+ }),
+
+ toggleAdvancedOptions: function () {
+ this.toggleProperty('showAdvancedOptions');
+ }
});
\ No newline at end of file