You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/09/17 14:12:28 UTC

git commit: AMBARI-7358 Configs: compare between host config group versions shows other props. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk f63dd8a6e -> 0fb11d23e


AMBARI-7358 Configs: compare between host config group versions shows other props. (atkach)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0fb11d23
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0fb11d23
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0fb11d23

Branch: refs/heads/trunk
Commit: 0fb11d23e7c312aa34140ab7ecf3db5826a5e7ab
Parents: f63dd8a
Author: atkach <at...@hortonworks.com>
Authored: Wed Sep 17 15:10:27 2014 +0300
Committer: atkach <at...@hortonworks.com>
Committed: Wed Sep 17 15:10:27 2014 +0300

----------------------------------------------------------------------
 .../controllers/main/service/info/configs.js    | 237 +++++++++++++------
 ambari-web/app/models/service_config.js         |   1 +
 .../common/configs/compare_property.hbs         |  30 +--
 .../common/configs/service_config_category.hbs  |   6 +-
 4 files changed, 192 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index 9fcdaaa..4411667 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -185,7 +185,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    * @return {Boolean}
    */
   isVersionDefault: function(version) {
-    return version && version.get('groupId') == -1;
+    return (App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + version).get('groupId') == -1);
   },
 
   /**
@@ -324,12 +324,11 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     var self = this;
     this.set('versionLoaded', false);
     version = version || this.get('currentDefaultVersion');
-    var versionRecord = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + version);
     //version of non-default group require properties from current version of default group to correctly display page
-    var versions = (this.isVersionDefault(versionRecord)) ? [version] : [this.get('currentDefaultVersion'), version];
+    var versions = (this.isVersionDefault(version)) ? [version] : [this.get('currentDefaultVersion'), version];
 
     //if version from default group selected then switch to default group
-    if (self.get('dataIsLoaded') && this.isVersionDefault(versionRecord)) {
+    if (self.get('dataIsLoaded') && this.isVersionDefault(version)) {
       this.set('selectedConfigGroup', this.get('configGroups').findProperty('isDefault'));
     }
 
@@ -569,10 +568,16 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   loadCompareVersionConfigs: function (allConfigs) {
     var dfd = $.Deferred();
     var self = this;
-    var compareServiceVersion = this.get('compareServiceVersion');
+    var compareServiceVersions = [];
 
-    if (compareServiceVersion) {
-      this.getCompareVersionConfigs(compareServiceVersion).done(function (json) {
+    if (this.get('compareServiceVersion')) {
+      if (!this.isVersionDefault(this.get('compareServiceVersion').get('version'))) {
+        compareServiceVersions = [this.get('compareServiceVersion').get('version'), this.get('selectedVersion')];
+      } else {
+        compareServiceVersions = [this.get('compareServiceVersion').get('version')];
+      }
+
+      this.getCompareVersionConfigs(compareServiceVersions).done(function (json) {
         self.initCompareConfig(allConfigs, json);
         self.set('compareServiceVersion', null);
         self.set('isCompareMode', true);
@@ -597,76 +602,173 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   initCompareConfig: function(allConfigs, json) {
     var serviceVersionMap = {};
     var configNamesMap = {};
-    var serviceName = json.items[0].service_name;
-    var compareServiceVersion = this.get('compareServiceVersion');
+    var serviceName = this.get('content.serviceName');
+    var compareVersionNumber = this.get('compareServiceVersion').get('version');
+    //indicate whether compared versions are from non-default group
+    var compareNonDefaultVersions = (json.items.length > 1);
 
+    serviceVersionMap[compareVersionNumber] = {};
+    if (compareNonDefaultVersions) {
+      serviceVersionMap[this.get('selectedVersion')] = {};
+    }
     allConfigs.mapProperty('name').forEach(function(name) {
       configNamesMap[name] = true;
     });
 
-    json.items[0].configurations.forEach(function (configuration) {
-      if (serviceName == 'YARN' && configuration.type == 'capacity-scheduler') {
-        // put all properties in a single textarea for capacity-scheduler
-        var value = '';
-        for (var prop in configuration.properties) {
-          value += prop + '=' + configuration.properties[prop] + '\n';
-        }
-        serviceVersionMap[configuration.type + '-' + configuration.type] = {
-          name: configuration.type,
-          value: value,
-          type: configuration.type,
-          tag: configuration.tag,
-          version: configuration.version
-        };
-      } else {
-        for (var prop in configuration.properties) {
-          serviceVersionMap[prop + '-' + configuration.type] = {
-            name: prop,
-            value: configuration.properties[prop],
+    json.items.forEach(function (item) {
+      item.configurations.forEach(function (configuration) {
+        if (serviceName == 'YARN' && configuration.type == 'capacity-scheduler') {
+          // put all properties in a single textarea for capacity-scheduler
+          var value = '';
+          for (var prop in configuration.properties) {
+            value += prop + '=' + configuration.properties[prop] + '\n';
+          }
+          serviceVersionMap[item.service_config_version][configuration.type + '-' + configuration.type] = {
+            name: configuration.type,
+            value: value,
             type: configuration.type,
             tag: configuration.tag,
-            version: configuration.version
+            version: configuration.version,
+            service_config_version: item.service_config_version
           };
-          if (Em.isNone(configNamesMap[prop])) {
-            allConfigs.push(this.getMockConfig(prop, serviceName, App.config.getOriginalFileName(configuration.type)));
+        } else {
+          for (var prop in configuration.properties) {
+            serviceVersionMap[item.service_config_version][prop + '-' + configuration.type] = {
+              name: prop,
+              value: configuration.properties[prop],
+              type: configuration.type,
+              tag: configuration.tag,
+              version: configuration.version,
+              service_config_version: item.service_config_version
+            };
+            if (Em.isNone(configNamesMap[prop])) {
+              allConfigs.push(this.getMockConfig(prop, serviceName, App.config.getOriginalFileName(configuration.type)));
+            }
           }
         }
-      }
-      if (configuration.properties_attributes && configuration.properties_attributes.final) {
-        for (var final in configuration.properties_attributes.final) {
-          serviceVersionMap[final + '-' + configuration.type].isFinal = (configuration.properties_attributes.final[final] === 'true');
+        if (configuration.properties_attributes && configuration.properties_attributes.final) {
+          for (var final in configuration.properties_attributes.final) {
+            serviceVersionMap[item.service_config_version][final + '-' + configuration.type].isFinal = (configuration.properties_attributes.final[final] === 'true');
+          }
         }
-      }
+      }, this);
     }, this);
 
-    allConfigs.forEach(function (serviceConfig) {
-      // map the property in the compare version to compare with current serviceConfig
-      var compareConfig = serviceVersionMap[serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)];
-      var compareObject = $.extend(true, {isComparison: true}, serviceConfig);
-      compareObject.serviceVersion = compareServiceVersion;
-      compareObject.isEditable = false;
-
-      if (compareConfig) {
-        if (serviceConfig.isMock) {
-          compareObject.displayType = 'string';
-          compareObject.isMock = false;
-        }
-        serviceConfig.compareConfig = App.ServiceConfigProperty.create(compareObject);
-        this.setSupportsFinal(serviceConfig.compareConfig);
-        serviceConfig.compareConfig.set('isFinal', compareConfig.isFinal);
-        serviceConfig.compareConfig.set('value', App.config.formatOverrideValue(serviceConfig, compareConfig.value));
-        serviceConfig.isComparison = true;
-        serviceConfig.hasCompareDiffs = (serviceConfig.value !== serviceConfig.compareConfig.get('value'))||
-          (serviceConfig.isFinal !== (serviceConfig.compareConfig.get('isFinal') == true));
-      } else if (serviceConfig.isUserProperty) {
-        compareObject.isMock = true;
-        compareObject.displayType = 'label';
-        serviceConfig.compareConfig = App.ServiceConfigProperty.create(compareObject);
-        serviceConfig.compareConfig.set('value', 'Undefined');
-        serviceConfig.isComparison = true;
-        serviceConfig.hasCompareDiffs = true;
+    if (compareNonDefaultVersions) {
+      allConfigs.forEach(function (serviceConfig) {
+        this.setCompareConfigs(serviceConfig, serviceVersionMap, compareVersionNumber, this.get('selectedVersion'));
+      }, this);
+    } else {
+      allConfigs.forEach(function (serviceConfig) {
+        this.setCompareDefaultGroupConfig(serviceConfig, serviceVersionMap[this.get('compareServiceVersion').get('version')]);
+      }, this);
+    }
+  },
+
+
+  /**
+   * set compare properties to service config of non-default group
+   * @param serviceConfig
+   * @param serviceVersionMap
+   * @param compareVersion
+   * @param selectedVersion
+   */
+  setCompareConfigs: function (serviceConfig, serviceVersionMap, compareVersion, selectedVersion) {
+    var compareConfig = serviceVersionMap[compareVersion][serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)];
+    var selectedConfig = serviceVersionMap[selectedVersion][serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)];
+
+    serviceConfig.compareConfigs = [];
+    serviceConfig.isComparison = true;
+
+    if (compareConfig && selectedConfig) {
+      serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, compareConfig));
+      serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, selectedConfig));
+      serviceConfig.hasCompareDiffs = this.hasCompareDiffs(serviceConfig.compareConfigs[0], serviceConfig.compareConfigs[1]);
+    } else if (compareConfig && !selectedConfig) {
+      serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, compareConfig));
+      serviceConfig.compareConfigs.push(this.getMockComparisonConfig(selectedConfig, selectedVersion));
+      serviceConfig.hasCompareDiffs = true;
+    } else if (!compareConfig && selectedConfig) {
+      serviceConfig.compareConfigs.push(this.getMockComparisonConfig(selectedConfig, compareVersion));
+      serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, selectedConfig));
+      serviceConfig.hasCompareDiffs = true;
+    }
+  },
+
+  /**
+   * init attributes and wrap mock compare config into App.ServiceConfigProperty
+   * @param serviceConfig
+   * @param compareConfig
+   * @return {object}
+   */
+  getMockComparisonConfig: function (serviceConfig, compareServiceVersion) {
+    var compareObject = $.extend(true, {isComparison: true},  serviceConfig);
+    compareObject.isEditable = false;
+
+    compareObject.serviceVersion = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + compareServiceVersion);
+    compareObject.isMock = true;
+    compareObject.displayType = 'label';
+    compareObject = App.ServiceConfigProperty.create(compareObject);
+    compareObject.set('value', 'Undefined');
+    return compareObject;
+  },
+
+  /**
+   * init attributes and wrap compare config into App.ServiceConfigProperty
+   * @param serviceConfig
+   * @param compareConfig
+   * @return {object}
+   */
+  getComparisonConfig: function (serviceConfig, compareConfig) {
+    var compareObject = $.extend(true, {isComparison: true},  serviceConfig);
+    compareObject.isEditable = false;
+
+    if (compareConfig) {
+      if (serviceConfig.isMock) {
+        compareObject.displayType = 'string';
+        compareObject.isMock = false;
       }
-    }, this);
+      compareObject.serviceVersion = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + compareConfig.service_config_version);
+      compareObject = App.ServiceConfigProperty.create(compareObject);
+      compareObject.set('isFinal', compareConfig.isFinal);
+      compareObject.set('value', App.config.formatOverrideValue(serviceConfig, compareConfig.value));
+      this.setSupportsFinal(compareObject);
+    }
+    return compareObject;
+  },
+
+  /**
+   * set compare properties to service config of default group
+   * @param serviceConfig
+   * @param serviceVersionMap
+   */
+  setCompareDefaultGroupConfig: function (serviceConfig, serviceVersionMap) {
+    // map the property in the compare version to compare with current serviceConfig
+    var compareConfig = serviceVersionMap[serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)];
+    var compareObject = {};
+
+    serviceConfig.compareConfigs = [];
+    serviceConfig.isComparison = true;
+
+    if (compareConfig) {
+      compareObject = this.getComparisonConfig(serviceConfig, compareConfig);
+      serviceConfig.hasCompareDiffs = serviceConfig.isMock || this.hasCompareDiffs(serviceConfig, compareObject);
+      serviceConfig.compareConfigs.push(compareObject);
+    } else if (serviceConfig.isUserProperty) {
+      serviceConfig.compareConfigs.push(this.getMockComparisonConfig(serviceConfig, this.get('compareServiceVersion').get('version')));
+      serviceConfig.hasCompareDiffs = true;
+    }
+  },
+
+  /**
+   * check value and final attribute of original and compare config for differencies
+   * @param originalConfig
+   * @param compareConfig
+   * @return {Boolean}
+   */
+  hasCompareDiffs: function (originalConfig, compareConfig) {
+    return (originalConfig.value !== compareConfig.value) ||
+    (originalConfig.isFinal !== (compareConfig.isFinal == true));
   },
 
   /**
@@ -701,18 +803,18 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
 
   /**
    * get configs of chosen version from server to compare
-   * @param compareServiceVersion
+   * @param compareServiceVersions
    * @return {$.ajax}
    */
-  getCompareVersionConfigs: function (compareServiceVersion) {
+  getCompareVersionConfigs: function (compareServiceVersions) {
     this.set('versionLoaded', false);
 
     return App.ajax.send({
-      name: 'service.serviceConfigVersion.get',
+      name: 'service.serviceConfigVersions.get.multiple',
       sender: this,
       data: {
         serviceName: this.get('content.serviceName'),
-        serviceConfigVersion: compareServiceVersion.get('version')
+        serviceConfigVersions: compareServiceVersions
       }
     });
   },
@@ -1041,6 +1143,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    */
   setEditability: function (serviceConfigProperty, defaultGroupSelected) {
     serviceConfigProperty.set('isEditable', false);
+    if (serviceConfigProperty.get('isComparison')) return;
     if (App.get('isAdmin') && defaultGroupSelected && !this.get('isHostsConfigsPage') && !serviceConfigProperty.get('group')) {
       serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable'));
     } else if (serviceConfigProperty.get('group') && this.get('selectedConfigGroup.name') === serviceConfigProperty.get('group.name')) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/models/service_config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service_config.js b/ambari-web/app/models/service_config.js
index 7d99660..963ff16 100644
--- a/ambari-web/app/models/service_config.js
+++ b/ambari-web/app/models/service_config.js
@@ -180,6 +180,7 @@ App.ServiceConfigProperty = Ember.Object.extend({
   group: null, // Contain group related to this property. Set only when isOriginalSCP is false.
   isUserProperty: null, // This property was added by user. Hence they get removal actions etc.
   isOverridable: true,
+  compareConfigs: [],
   isComparison: false,
   hasCompareDiffs: false,
   showLabel: true,

http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/templates/common/configs/compare_property.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/compare_property.hbs b/ambari-web/app/templates/common/configs/compare_property.hbs
index 9c8e73e..3e6ddbe 100644
--- a/ambari-web/app/templates/common/configs/compare_property.hbs
+++ b/ambari-web/app/templates/common/configs/compare_property.hbs
@@ -16,17 +16,19 @@
 * limitations under the License.
 }}
 
-<div {{bindAttr class=":control-group :overrideField"}}>
-  {{view view.serviceConfigProperty.compareConfig.viewClass serviceConfigBinding="view.serviceConfigProperty.compareConfig"}}
-  {{#unless view.serviceConfigProperty.compareConfig.isMock}}
-    <span class="label label-info">{{view.serviceConfigProperty.compareConfig.serviceVersion.versionText}}</span>
-    {{#if view.serviceConfigProperty.compareConfig.serviceVersion.isCurrent}}
-        <span class="label label-success">{{t common.current}}</span>
-    {{/if}}
-    {{#if view.serviceConfigProperty.compareConfig.supportsFinal}}
-        <a disabled="disabled" {{bindAttr class=":btn :btn-small :btn-final view.serviceConfigProperty.compareConfig.isFinal:active view.serviceConfigProperty.compareConfig.hideFinalIcon:hidden" }}>
-            <i class="icon-lock"></i>
-        </a>
-    {{/if}}
-  {{/unless}}
-</div>
+{{#each compareConfig in view.serviceConfigProperty.compareConfigs}}
+    <div {{bindAttr class=":control-group :overrideField"}}>
+      {{view compareConfig.viewClass serviceConfigBinding="compareConfig"}}
+      {{#unless compareConfig.isMock}}
+          <span class="label label-info">{{compareConfig.serviceVersion.versionText}}</span>
+        {{#if compareConfig.serviceVersion.isCurrent}}
+            <span class="label label-success">{{t common.current}}</span>
+        {{/if}}
+        {{#if compareConfig.supportsFinal}}
+            <a disabled="disabled" {{bindAttr class=":btn :btn-small :btn-final compareConfig.isFinal:active compareConfig.hideFinalIcon:hidden" }}>
+                <i class="icon-lock"></i>
+            </a>
+        {{/if}}
+      {{/unless}}
+    </div>
+{{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/templates/common/configs/service_config_category.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/service_config_category.hbs b/ambari-web/app/templates/common/configs/service_config_category.hbs
index 23553e2..0aaf35f 100644
--- a/ambari-web/app/templates/common/configs/service_config_category.hbs
+++ b/ambari-web/app/templates/common/configs/service_config_category.hbs
@@ -49,9 +49,13 @@
             <div {{bindAttr class="errorMessage:error: warnMessage:warning: :control-group"}}>
               {{view viewClass serviceConfigBinding="this" categoryConfigsAllBinding="view.categoryConfigsAll" }}
               {{#if this.isComparison}}
+                {{#if controller.selectedConfigGroup.isDefault}}
                   <span class="label label-info">{{t dashboard.configHistory.table.version.prefix}}{{controller.selectedVersion}}</span>
-                {{#if controller.isCurrentSelected}}
+                  {{#if controller.isCurrentSelected}}
                     <span class="label label-success">{{t common.current}}</span>
+                  {{/if}}
+                {{else}}
+                  <span class="label label-info">{{t common.default}}&nbsp;{{t services.service.config.configHistory.configGroup}}</span>
                 {{/if}}
               {{/if}}
               {{#if supportsFinal}}