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/03/24 17:23:24 UTC
[1/2] ambari git commit: AMBARI-10185. Incorrect order of services in
IE10 after adding AMS (alexantonenko)
Repository: ambari
Updated Branches:
refs/heads/trunk 241f83115 -> 68f9bcd08
AMBARI-10185. Incorrect order of services in IE10 after adding AMS (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/68f9bcd0
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/68f9bcd0
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/68f9bcd0
Branch: refs/heads/trunk
Commit: 68f9bcd08d22113f851604cbe5a049c2ecbadd0f
Parents: 2518f87
Author: Alex Antonenko <hi...@gmail.com>
Authored: Mon Mar 23 21:35:09 2015 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Mar 24 18:22:46 2015 +0200
----------------------------------------------------------------------
ambari-web/app/assets/test/tests.js | 1 +
ambari-web/app/mappers/stack_service_mapper.js | 18 +-
ambari-web/app/utils/misc.js | 2 +-
.../test/mappers/stack_service_mapper_test.js | 235 +++++++++++++++++++
4 files changed, 245 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/68f9bcd0/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index 72b5278..afb170c 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -130,6 +130,7 @@ var files = ['test/init_model_test',
'test/mappers/status_mapper_test',
'test/mappers/users_mapper_test',
'test/mappers/stack_mapper_test',
+ 'test/mappers/stack_service_mapper_test',
'test/mappers/configs/stack_config_properties_mapper_test',
'test/mappers/configs/config_groups_mapper_test',
'test/mappers/configs/config_versions_mapper_test',
http://git-wip-us.apache.org/repos/asf/ambari/blob/68f9bcd0/ambari-web/app/mappers/stack_service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_service_mapper.js b/ambari-web/app/mappers/stack_service_mapper.js
index 6d38e11..612c62e 100644
--- a/ambari-web/app/mappers/stack_service_mapper.js
+++ b/ambari-web/app/mappers/stack_service_mapper.js
@@ -78,8 +78,14 @@ App.stackServiceMapper = App.QuickDataMapper.create({
var result = [];
var stackServiceComponents = [];
var nonInstallableServices = ['KERBEROS'];
- this.rearrangeServicesForDisplayOrder(json.items, App.StackService.displayOrder);
- json.items.forEach(function (item) {
+ var displayOrderLength = App.StackService.displayOrder.length;
+ var items = json.items.map(function (item, index) {
+ var displayOrderIndex = App.StackService.displayOrder.indexOf(item.StackServices.service_name);
+ return $.extend(item, {
+ index: displayOrderIndex == -1 ? displayOrderLength + index : displayOrderIndex
+ });
+ }).sortProperty('index');
+ items.forEach(function (item) {
var stackService = item.StackServices;
var serviceComponents = [];
item.components.forEach(function (serviceComponent) {
@@ -123,14 +129,6 @@ App.stackServiceMapper = App.QuickDataMapper.create({
});
}, this);
}, this);
- },
-
- rearrangeServicesForDisplayOrder: function (array, displayOrderArray) {
- return array.sort(function (a, b) {
- var aValue = displayOrderArray.indexOf(a.StackServices.service_name) != -1 ? displayOrderArray.indexOf(a.StackServices.service_name) : array.length;
- var bValue = displayOrderArray.indexOf(b.StackServices.service_name) != -1 ? displayOrderArray.indexOf(b.StackServices.service_name) : array.length;
- return aValue - bValue;
- });
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/68f9bcd0/ambari-web/app/utils/misc.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/misc.js b/ambari-web/app/utils/misc.js
index 8a48e0f..b9e9530 100644
--- a/ambari-web/app/utils/misc.js
+++ b/ambari-web/app/utils/misc.js
@@ -63,5 +63,5 @@ module.exports = {
}
}
return sorted;
- },
+ }
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/68f9bcd0/ambari-web/test/mappers/stack_service_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/stack_service_mapper_test.js b/ambari-web/test/mappers/stack_service_mapper_test.js
new file mode 100644
index 0000000..7a390d5
--- /dev/null
+++ b/ambari-web/test/mappers/stack_service_mapper_test.js
@@ -0,0 +1,235 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+var App = require('app');
+
+require('mappers/stack_service_mapper');
+
+describe('App.stackServiceMapper', function () {
+
+ describe('#map', function () {
+
+ var data = {
+ "items": [
+ {
+ "StackServices" : {
+ "comments" : "A high-throughput distributed messaging system",
+ "custom_commands" : [ ],
+ "display_name" : "Kafka",
+ "required_services" : [
+ "ZOOKEEPER"
+ ],
+ "service_check_supported" : true,
+ "service_name" : "KAFKA",
+ "service_version" : "0.8.1.2.2",
+ "stack_name" : "HDP",
+ "stack_version" : "2.2",
+ "config_types" : {
+ "kafka-broker" : {
+ "supports" : {
+ "adding_forbidden" : "false",
+ "do_not_extend" : "false",
+ "final" : "false"
+ }
+ },
+ "kafka-env" : {
+ "supports" : {
+ "adding_forbidden" : "false",
+ "do_not_extend" : "false",
+ "final" : "false"
+ }
+ },
+ "kafka-log4j" : {
+ "supports" : {
+ "adding_forbidden" : "false",
+ "do_not_extend" : "false",
+ "final" : "false"
+ }
+ }
+ }
+ },
+ "components" : [
+ {
+ "StackServiceComponents" : {
+ "cardinality" : "1+",
+ "component_category" : "MASTER",
+ "component_name" : "KAFKA_BROKER",
+ "custom_commands" : [ ],
+ "display_name" : "Kafka Broker",
+ "is_client" : false,
+ "is_master" : true,
+ "service_name" : "KAFKA",
+ "stack_name" : "HDP",
+ "stack_version" : "2.2"
+ },
+ "dependencies" : [
+ {
+ "Dependencies" : {
+ "component_name" : "ZOOKEEPER_SERVER",
+ "dependent_component_name" : "KAFKA_BROKER",
+ "dependent_service_name" : "KAFKA",
+ "scope" : "cluster",
+ "stack_name" : "HDP",
+ "stack_version" : "2.2"
+ }
+ }
+ ]
+ }
+ ],
+ "artifacts" : [
+ {
+ "Artifacts" : {
+ "artifact_name": "widget_descriptor"
+ }
+ }
+ ]
+ },
+ {
+ "StackServices" : {
+ "service_name" : "ZOOKEEPER"
+ },
+ "components" : [ ],
+ "artifacts" : [ ]
+ },
+ {
+ "StackServices" : {
+ "service_name" : "KERBEROS"
+ },
+ "components" : [ ],
+ "artifacts" : [ ]
+ },
+ {
+ "StackServices" : {
+ "service_name" : "HDFS"
+ },
+ "components" : [ ],
+ "artifacts" : [ ]
+ },
+ {
+ "StackServices" : {
+ "service_name" : "ACCUMULO"
+ },
+ "components" : [ ],
+ "artifacts" : [ ]
+ },
+ {
+ "StackServices" : {
+ "service_name" : "HIVE"
+ },
+ "components" : [
+ {
+ "StackServiceComponents" : {
+ "component_name" : "MYSQL_SERVER",
+ "custom_commands" : [
+ "CLEAN"
+ ]
+ },
+ "dependencies" : [ ]
+ }
+ ],
+ "artifacts" : [ ]
+ }
+ ]
+ },
+ sortedServiceNames = ["HDFS", "HIVE", "ZOOKEEPER", "KAFKA", "KERBEROS", "ACCUMULO"],
+ serviceResult = {
+ id: "KAFKA",
+ serviceName: "KAFKA",
+ displayName: "Kafka",
+ configTypes: {
+ "kafka-broker" : {
+ "supports" : {
+ "adding_forbidden" : "false",
+ "do_not_extend" : "false",
+ "final" : "false"
+ }
+ },
+ "kafka-env" : {
+ "supports" : {
+ "adding_forbidden" : "false",
+ "do_not_extend" : "false",
+ "final" : "false"
+ }
+ },
+ "kafka-log4j" : {
+ "supports" : {
+ "adding_forbidden" : "false",
+ "do_not_extend" : "false",
+ "final" : "false"
+ }
+ }
+ },
+ comments: "A high-throughput distributed messaging system",
+ serviceVersion: "0.8.1.2.2",
+ stackName: "HDP",
+ isInstalled: false,
+ isInstallable: true,
+ serviceCheckSupported: true,
+ isServiceWithWidgets: true,
+ requiredServices: ["ZOOKEEPER"]
+ },
+ componentResult = {
+ id: "KAFKA_BROKER",
+ componentName: "KAFKA_BROKER",
+ displayName: "Kafka Broker",
+ cardinality: "1+",
+ customCommands: [],
+ serviceName: "KAFKA",
+ componentCategory: "MASTER",
+ isMaster: true,
+ isClient: false,
+ stackName: "HDP",
+ stackVersion: "2.2",
+ dependencies: [
+ {
+ componentName: "ZOOKEEPER_SERVER",
+ scope : "cluster"
+ }
+ ]
+ };
+
+ beforeEach(function () {
+ App.stackServiceMapper.clearStackModels();
+ });
+
+ afterEach(function () {
+ });
+
+ it('should sort and map data about services with their components', function () {
+ App.stackServiceMapper.map(data);
+ var services = App.StackService.find(),
+ components = App.StackServiceComponent.find(),
+ kafkaService = services.findProperty('serviceName', 'KAFKA');
+ expect(services.mapProperty('serviceName')).to.eql(sortedServiceNames);
+ expect(kafkaService.get('serviceComponents.length')).to.equal(1);
+ Em.keys(serviceResult).forEach(function (key) {
+ expect(kafkaService.get(key)).to.eql(serviceResult[key]);
+ });
+ Em.keys(componentResult).forEach(function (key) {
+ expect(kafkaService.get('serviceComponents').toArray()[0].get(key)).to.eql(componentResult[key]);
+ });
+ Em.keys(componentResult).forEach(function (key) {
+ expect(components.findProperty('componentName', 'KAFKA_BROKER').get(key)).to.eql(componentResult[key]);
+ });
+ expect(services.findProperty('serviceName', 'KERBEROS').get('isInstallable')).to.be.false;
+ expect(services.findProperty('serviceName', 'KERBEROS').get('isSelected')).to.be.false;
+ expect(components.findProperty('componentName', 'MYSQL_SERVER').get('customCommands')).to.be.empty;
+ });
+
+ });
+
+});
[2/2] ambari git commit: AMBARI-10184. Admin View: property
validation needs to show for instance invalid (alexantonenko)
Posted by al...@apache.org.
AMBARI-10184. Admin View: property validation needs to show for instance invalid (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2518f87f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2518f87f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2518f87f
Branch: refs/heads/trunk
Commit: 2518f87fdc9e90494ed81b7f09ea68a82d3ad825
Parents: 241f831
Author: Alex Antonenko <hi...@gmail.com>
Authored: Mon Mar 23 19:46:46 2015 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Mar 24 18:22:46 2015 +0200
----------------------------------------------------------------------
.../controllers/ambariViews/CreateViewInstanceCtrl.js | 7 +++++++
.../ui/admin-web/app/views/ambariViews/create.html | 11 +++++++----
2 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2518f87f/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
index 41d49d3..2492c91 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
@@ -90,6 +90,8 @@ angular.module('ambariAdminConsole')
})
.catch(function (data) {
var errorMessage = data.message;
+ var showGeneralError = true;
+
if (data.status >= 400) {
try {
var errorObject = JSON.parse(errorMessage);
@@ -97,9 +99,14 @@ angular.module('ambariAdminConsole')
angular.forEach(errorObject.propertyResults, function (item, key) {
$scope.form.instanceCreateForm[key].validationError = !item.valid;
if (!item.valid) {
+ showGeneralError = false;
$scope.form.instanceCreateForm[key].validationMessage = item.detail;
}
});
+
+ if (showGeneralError) {
+ $scope.form.instanceCreateForm.generalValidationError = errorMessage;
+ }
} catch (e) {
console.error('Unable to parse error message:', data.message);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2518f87f/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
index db0443f..4d0b87a 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
@@ -35,13 +35,13 @@
</div>
</div>
</div>
-
+
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Details</h3>
</div>
<div class="panel-body">
- <div class="form-group"
+ <div class="form-group"
ng-class="{'has-error' : ( (form.instanceCreateForm.instanceNameInput.$error.required || form.instanceCreateForm.instanceNameInput.$error.pattern) && form.instanceCreateForm.submitted) || instanceExists }"
>
<label for="" class="control-label col-sm-2">Instance Name</label>
@@ -98,6 +98,9 @@
<h3 class="panel-title">Properties</h3>
</div>
<div class="panel-body property-form">
+ <div class="alert alert-danger bottom-margin top-margin" ng-show='form.instanceCreateForm.generalValidationError'>
+ {{form.instanceCreateForm.generalValidationError}}
+ </div>
<div class="form-group" ng-repeat="parameter in instance.properties"
ng-class="{'has-error' : ((form.instanceCreateForm[parameter.name].$error.required && form.instanceCreateForm.submitted) || form.instanceCreateForm[parameter.name].validationError)}" >
<label for="" class="col-sm-3 control-label" ng-class="{'not-required': !parameter.required}">{{parameter.label || parameter.displayName}}{{parameter.required ? '*' : ''}}</label>
@@ -121,11 +124,11 @@
</div>
</div>
</div>
-
+
<div class="col-sm-12 ">
<button class="btn btn-primary pull-right left-margin save-button"
ng-class="{'disabled' : (form.instanceCreateForm.isSaving)}" ng-click="save()" type="submit">Save</button>
<a href ng-click="cancel()" class="btn btn-default pull-right cancel-button">Cancel</a>
</div>
-
+
</form>