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>