Repository: ambari Updated Branches: refs/heads/trunk 1800b0b21 -> e518ac33a
AMBARI-11921. CapSched View does not write config file when cluster uses RM-HA (Erik Bergenholtz via rlevas) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e518ac33 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e518ac33 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e518ac33 Branch: refs/heads/trunk Commit: e518ac33ab2dc5734dc376695fb9b42157af375a Parents: 1800b0b Author: Erik Bergenholtz <[email protected]> Authored: Mon Jun 15 15:44:56 2015 -0400 Committer: Robert Levas <[email protected]> Committed: Mon Jun 15 15:45:05 2015 -0400 ---------------------------------------------------------------------- .../capacityscheduler/ConfigurationService.java | 25 ++++++++++++----- .../src/main/resources/ui/app/adapters.js | 27 +++++++++---------- .../main/resources/ui/app/controllers/queues.js | 28 +++++++++++++------- .../src/main/resources/ui/app/store.js | 8 ++---- .../main/resources/ui/app/templates/queues.hbs | 22 ++++++++------- 5 files changed, 63 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e518ac33/contrib/views/capacity-scheduler/src/main/java/org/apache/ambari/view/capacityscheduler/ConfigurationService.java ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/java/org/apache/ambari/view/capacityscheduler/ConfigurationService.java b/contrib/views/capacity-scheduler/src/main/java/org/apache/ambari/view/capacityscheduler/ConfigurationService.java index c3e415a..968f212 100644 --- a/contrib/views/capacity-scheduler/src/main/java/org/apache/ambari/view/capacityscheduler/ConfigurationService.java +++ b/contrib/views/capacity-scheduler/src/main/java/org/apache/ambari/view/capacityscheduler/ConfigurationService.java @@ -23,7 +23,6 @@ import org.apache.ambari.view.capacityscheduler.utils.MisconfigurationFormattedE import org.apache.ambari.view.capacityscheduler.utils.ServiceFormattedException; import org.apache.ambari.view.utils.ambari.AmbariApi; import org.apache.commons.io.IOUtils; -import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; import org.slf4j.Logger; @@ -240,7 +239,7 @@ public class ConfigurationService { Response response; try { - String url = String.format(RM_GET_NODE_LABEL_URL, getRMHost()); + String url = String.format(RM_GET_NODE_LABEL_URL, getRMUrl()); InputStream rmResponse = context.getURLStreamProvider().readFrom( url, "GET", (String) null, new HashMap<String, String>()); @@ -434,8 +433,8 @@ public class ConfigurationService { return Response.status(401).build(); } - String rmHost = getRMHost(); - JSONObject data = getJsonObject(String.format(REFRESH_RM_REQUEST_DATA, rmHost)); + String rmHosts = getRMHosts(); + JSONObject data = getJsonObject(String.format(REFRESH_RM_REQUEST_DATA, rmHosts)); Map<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/x-www-form-urlencoded"); @@ -465,9 +464,9 @@ public class ConfigurationService { return Response.status(401).build(); } - String rmHost = getRMHost(); + String rmHosts = getRMHosts(); JSONObject data = getJsonObject(String.format(RESTART_RM_REQUEST_DATA, - ambariApi.getCluster().getName(), rmHost, rmHost)); + ambariApi.getCluster().getName(), rmHosts, rmHosts)); Map<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/x-www-form-urlencoded"); @@ -481,8 +480,20 @@ public class ConfigurationService { return readLatestConfiguration(); } - private String getRMHost() { + private String getRMUrl() { return ambariApi.getServices().getRMUrl(); } + private String getRMHosts() { + StringBuilder hosts = new StringBuilder(); + boolean first = true; + for (String host : ambariApi.getHostsWithComponent("RESOURCEMANAGER")) { + if (!first) { + hosts.append(","); + } + hosts.append(host); + first = false; + } + return hosts.toString(); + } } // end ConfigurationService http://git-wip-us.apache.org/repos/asf/ambari/blob/e518ac33/contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js b/contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js index e7fb4fb..dd02587 100644 --- a/contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js +++ b/contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js @@ -83,18 +83,12 @@ App.QueueAdapter = DS.Adapter.extend({ saveMark:'', updateRecord:function (store,type,record) { - var adapter = this; - var saveMark = this.get('saveMark'), + var adapter = this, uri = _getCapacitySchedulerViewUri(this), serializer = store.serializerFor('queue'), props = serializer.serializeConfig(record), new_tag = 'version' + Math.floor(+moment()), - postSaveUri,data; - - if (saveMark) { - postSaveUri = [_getCapacitySchedulerViewUri(this),saveMark].join('/'); - this.set('saveMark',''); - } + data; data = JSON.stringify({'Clusters': {'desired_config': @@ -114,16 +108,21 @@ App.QueueAdapter = DS.Adapter.extend({ }, function(jqXHR) { jqXHR.then = null; Ember.run(null, reject, jqXHR); - }).then(function () { - if (postSaveUri) { - adapter.postSave(postSaveUri); - } }); },'App: QueueAdapter#updateRecord save config woth ' + new_tag + ' tag'); }, - postSave:function(uri){ - this.ajax(uri,'PUT',{contentType:'application/json; charset=utf-8',data:JSON.stringify({save:true})}); + relaunchCapSched: function (opt) { + if (!opt) return; + var uri = [_getCapacitySchedulerViewUri(this),opt].join('/'); + return new Ember.RSVP.Promise(function(resolve, reject) { + this.ajax(uri,'PUT',{contentType:'application/json; charset=utf-8',data:JSON.stringify({save:true})}) + .then(function (data) { + resolve(data); + },function (error) { + reject(error); + }); + }.bind(this),'App: QueueAdapter#relaunchCapSched ' + opt + ' capacity-scheduler'); }, /** http://git-wip-us.apache.org/repos/asf/ambari/blob/e518ac33/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queues.js ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queues.js b/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queues.js index 9a27b10..429832f 100644 --- a/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queues.js +++ b/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queues.js @@ -97,23 +97,30 @@ App.QueuesController = Ember.ArrayController.extend({ } }, saveConfig:function (mark) { - if (mark == 'restart') { - this.get('store').markForRestart(); - } else if (mark == 'refresh') { - this.get('store').markForRefresh(); - } var collectedLabels = this.get('model').reduce(function (prev,q) { return prev.pushObjects(q.get('labels.content')); },[]); var scheduler = this.get('scheduler').save(), model = this.get('model').save(), - labels = DS.ManyArray.create({content:collectedLabels}).save(); + labels = DS.ManyArray.create({content:collectedLabels}).save(), + opt = ''; + + if (mark == 'restart') { + opt = 'saveAndRestart'; + } else if (mark == 'refresh') { + opt = 'saveAndRefresh'; + } Em.RSVP.Promise.all([labels,model,scheduler]).then( Em.run.bind(this,'saveSuccess'), - Em.run.bind(this,'saveError') - ); + Em.run.bind(this,'saveConfigError','save') + ).then(function () { + if (opt) { + return this.get('store').relaunchCapSched(opt); + } + }.bind(this)) + .catch(Em.run.bind(this,'saveConfigError',mark)); }, clearAlert:function () { @@ -194,8 +201,9 @@ App.QueuesController = Ember.ArrayController.extend({ this.set('store.deletedQueues',[]); }, - saveError:function (error) { - var response = JSON.parse(error.responseText); + saveConfigError:function (operation, error) { + var response = error.responseJSON; + response.simpleMessage = operation.capitalize() + ' failed!'; this.set('alertMessage',response); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/e518ac33/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js b/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js index c7a7e6a..4297b17 100644 --- a/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js +++ b/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js @@ -303,12 +303,8 @@ App.ApplicationStore = DS.Store.extend({ isInitialized: Ember.computed.and('tag', 'clusterName'), - markForRefresh:function () { - this.set('defaultAdapter.saveMark','saveAndRefresh'); - }, - - markForRestart:function () { - this.set('defaultAdapter.saveMark','saveAndRestart'); + relaunchCapSched: function (opt) { + return this.get('defaultAdapter').relaunchCapSched(opt); }, flushPendingSave: function() { http://git-wip-us.apache.org/repos/asf/ambari/blob/e518ac33/contrib/views/capacity-scheduler/src/main/resources/ui/app/templates/queues.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/resources/ui/app/templates/queues.hbs b/contrib/views/capacity-scheduler/src/main/resources/ui/app/templates/queues.hbs index f785a62..94cb421 100644 --- a/contrib/views/capacity-scheduler/src/main/resources/ui/app/templates/queues.hbs +++ b/contrib/views/capacity-scheduler/src/main/resources/ui/app/templates/queues.hbs @@ -57,6 +57,18 @@ </div> {{/if}} </div> + {{!-- ALERT --}} + {{#if alertMessage}} + <div class="alert alert-danger"> + <button {{action 'clearAlert'}}type="button" class="close" aria-hidden="true">×</button> + <strong> {{alertMessage.status}} </strong> {{alertMessage.simpleMessage}} + <div> + <small>{{alertMessage.message}}</small> + </div> + <br> + {{#link-to 'trace' class="alert-link"}}Trace{{/link-to}} + </div> + {{/if}} {{!-- QUEUE LIST --}} <div class="list-group queue-list"> {{recurce-queues depth=0}} @@ -97,16 +109,6 @@ </div> </div> </div> - - {{!-- ALERT --}} - {{#if alertMessage}} - <div class="alert alert-danger"> - <button {{action 'clearAlert'}}type="button" class="close" aria-hidden="true">×</button> - <strong> {{alertMessage.status}} </strong> {{alertMessage.message}} - <br> - {{#link-to 'trace' class="alert-link"}}Trace{{/link-to}} - </div> - {{/if}} </div> {{!-- QUEUE --}}
