Browse Source

AMBARI-1855. Capacity Scheduler: when adding a new queue, populate fields. (srimanth)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1466280 13f79535-47bb-0310-9956-ffa450edef68
Srimanth 12 years ago
parent
commit
581a8e4a59

+ 3 - 0
CHANGES.txt

@@ -11,6 +11,9 @@ Trunk (unreleased changes):
  INCOMPATIBLE CHANGES 
 
  NEW FEATURES
+
+ AMBARI-1855. Capacity Scheduler: when adding a new queue, populate 
+ fields. (srimanth)
  
  AMBARI-1850. Update unit tests. (srimanth)
 

+ 1 - 1
ambari-web/app/data/custom_configs.js

@@ -101,7 +101,7 @@ module.exports =
       "id": "site property",
       "name": "mapred.capacity-scheduler.queue.<queue-name>.supports-priority",
       "displayName": "Supports Priority",
-      "value": false,
+      "value": 'false',
       "defaultValue": false,
       "displayType": "checkbox",
       "description": "If true, priorities of jobs will be taken into account in scheduling decisions.",

+ 18 - 14
ambari-web/app/utils/config.js

@@ -275,44 +275,48 @@ App.config = Em.Object.create({
     } else {
       queueProperties = preDefinedCustomConfigs.filterProperty('isQueue');
       queueProperties.forEach(function (customConfig) {
-        this.setDefaultQueue(customConfig);
+        this.setDefaultQueue(customConfig, 'default');
         configs.push(customConfig);
       }, this);
     }
   },
   /**
-   * set values to properties of default queue
+   * set values to properties of queue
    * @param customConfig
+   * @param queueName
    */
-  setDefaultQueue: function (customConfig) {
-    customConfig.name = customConfig.name.replace(/<queue-name>/, 'default');
-    //values for default queue
+  setDefaultQueue: function (customConfig, queueName) {
+    customConfig.name = customConfig.name.replace(/<queue-name>/, queueName);
+    //default values of queue
     switch (customConfig.name) {
-      case 'mapred.capacity-scheduler.queue.default.capacity':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.capacity':
         customConfig.value = '100';
         break;
-      case 'mapred.capacity-scheduler.queue.default.maximum-capacity':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.maximum-capacity':
         customConfig.value = '100';
         break;
-      case 'mapred.capacity-scheduler.queue.default.minimum-user-limit-percent':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.minimum-user-limit-percent':
         customConfig.value = '100';
         break;
-      case 'mapred.capacity-scheduler.queue.default.user-limit-factor':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.user-limit-factor':
         customConfig.value = '1';
         break;
-      case 'mapred.capacity-scheduler.queue.default.maximum-initialized-active-tasks':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.maximum-initialized-active-tasks':
         customConfig.value = '200000';
         break;
-      case 'mapred.capacity-scheduler.queue.default.maximum-initialized-active-tasks-per-user':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.maximum-initialized-active-tasks-per-user':
         customConfig.value = '100000';
         break;
-      case 'mapred.capacity-scheduler.queue.default.init-accept-jobs-factor':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.init-accept-jobs-factor':
         customConfig.value = '10';
         break;
-      case 'mapred.queue.default.acl-submit-job':
+      case 'mapred.capacity-scheduler.queue.' + queueName + '.supports-priority':
+        customConfig.value = 'false';
+        break;
+      case 'mapred.queue.' + queueName + '.acl-submit-job':
         customConfig.value = '* *';
         break;
-      case 'mapred.queue.default.acl-administer-jobs':
+      case 'mapred.queue.' + queueName + '.acl-administer-jobs':
         customConfig.value = '* *';
         break;
     }

+ 20 - 12
ambari-web/app/views/common/configs/services_config.js

@@ -529,27 +529,35 @@ App.ServiceConfigCapacityScheduler = App.ServiceConfigsByCategoryView.extend({
     if(isCollapsed){
       this.$('.accordion-body').hide();
     }
-    this.createEmptyQueue(this.get('queues')[0]);
+    this.createEmptyQueue(this.get('customConfigs').filterProperty('isQueue'));
   },
+  //list of fields which will be populated by default in a new queue
+  fieldsToPopulate: [
+    "mapred.capacity-scheduler.queue.<queue-name>.minimum-user-limit-percent",
+    "mapred.capacity-scheduler.queue.<queue-name>.user-limit-factor",
+    "mapred.capacity-scheduler.queue.<queue-name>.supports-priority",
+    "mapred.capacity-scheduler.queue.<queue-name>.maximum-initialized-active-tasks",
+    "mapred.capacity-scheduler.queue.<queue-name>.maximum-initialized-active-tasks-per-user",
+    "mapred.capacity-scheduler.queue.<queue-name>.init-accept-jobs-factor"
+  ],
   /**
    * create empty queue
    * take some queue then copy it and set all config values to null
-   * @param queue
+   * @param customConfigs
    */
-  createEmptyQueue: function(queue){
+  createEmptyQueue: function(customConfigs){
     var emptyQueue = {
       name: '<queue-name>',
       configs: []
     };
-    queue.configs.forEach(function(config){
-      var newConfig = App.ServiceConfigProperty.create(config);
-      if(newConfig.get('name') == 'mapred.capacity-scheduler.queue.' + queue.name + '.supports-priority'){
-        newConfig.set('value', false);
-      } else {
-        newConfig.set('value', '');
+    var fieldsToPopulate = this.get('fieldsToPopulate');
+    customConfigs.forEach(function(config){
+      var newConfig = $.extend({}, config);
+      if(fieldsToPopulate.contains(config.name)){
+        App.config.setDefaultQueue(newConfig, emptyQueue.name);
       }
-      //comparison executes including 'queue.<queue-name>' to avoid false matches
-      newConfig.set('name', newConfig.get('name').replace('queue.' + queue.name, 'queue.<queue-name>'));
+      newConfig = App.ServiceConfigProperty.create(newConfig);
+      newConfig.validate();
       emptyQueue.configs.push(newConfig);
     });
     this.set('emptyQueue', emptyQueue);
@@ -615,7 +623,7 @@ App.ServiceConfigCapacityScheduler = App.ServiceConfigsByCategoryView.extend({
       var serviceConfigProperty = $.extend({}, _config);
       serviceConfigProperty.name = serviceConfigProperty.name.replace(/<queue-name>/, queueName);
       if(!queue.someProperty('name', serviceConfigProperty.name)){
-        App.config.setDefaultQueue(serviceConfigProperty);
+        App.config.setDefaultQueue(serviceConfigProperty, queueName);
         serviceConfigProperty = App.ServiceConfigProperty.create(serviceConfigProperty);
         serviceConfigProperty.validate();
         queue.push(serviceConfigProperty);