You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2017/02/03 14:53:05 UTC

[01/50] [abbrv] ambari git commit: AMBARI-19763: Workflow Manager View : Separate log file into its own directory similar to other views (sangeetar)

Repository: ambari
Updated Branches:
  refs/heads/branch-dev-patch-upgrade 393ab3ee2 -> d222f572e


AMBARI-19763: Workflow Manager View : Separate log file into its own directory similar to other views (sangeetar)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: cc42c95db84ecb115393a0dec5390245f377d7d6
Parents: a8b8b41
Author: Sangeeta Ravindran <sa...@apache.org>
Authored: Tue Jan 31 15:33:07 2017 -0800
Committer: Sangeeta Ravindran <sa...@apache.org>
Committed: Tue Jan 31 15:33:07 2017 -0800

----------------------------------------------------------------------
 contrib/views/wfmanager/pom.xml                 |  1 +
 .../src/main/resources/view.log4j.properties    | 29 ++++++++++++++++++++
 2 files changed, 30 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cc42c95d/contrib/views/wfmanager/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/pom.xml b/contrib/views/wfmanager/pom.xml
index fff793c..2585e13 100644
--- a/contrib/views/wfmanager/pom.xml
+++ b/contrib/views/wfmanager/pom.xml
@@ -276,6 +276,7 @@
 				<includes>
 					<include>META-INF/**/*</include>
 					<include>view.xml</include>
+					<include>view.log4j.properties</include>
 				</includes>
 			</resource>
 			<resource>

http://git-wip-us.apache.org/repos/asf/ambari/blob/cc42c95d/contrib/views/wfmanager/src/main/resources/view.log4j.properties
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/view.log4j.properties b/contrib/views/wfmanager/src/main/resources/view.log4j.properties
new file mode 100644
index 0000000..83612a1
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/view.log4j.properties
@@ -0,0 +1,29 @@
+# Copyright 2011 The Apache Software Foundation
+#
+# 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.
+
+log4j.appender.wfmanagerview=org.apache.log4j.RollingFileAppender
+log4j.appender.wfmanagerview.File=${ambari.log.dir}/wfmanager-view/wfmanager-view.log
+log4j.appender.wfmanagerview.MaxFileSize=80MB
+log4j.appender.wfmanagerview.MaxBackupIndex=60
+log4j.appender.wfmanagerview.layout=org.apache.log4j.PatternLayout
+log4j.appender.wfmanagerview.layout.ConversionPattern=%d{DATE} %5p [%t] [%X{viewName} %X{viewVersion} %X{viewInstanceName}] %c{1}:%L - %m%n
+
+log4j.logger.org.apache.oozie.ambari.view=INFO,wfmanagerview
+log4j.logger.org.apache.ambari.view.workflowmanager=INFO,wfmanagerview
+log4j.additivity.org.apache.ambari.view.workflowmanager= false
+log4j.additivity.org.apache.oozie.ambari.view= false
\ No newline at end of file


[16/50] [abbrv] ambari git commit: AMBARI-19331. Setup correct authentication and authorization mechanism between Yarn and Zookeeper (Attila Magyar via rlevas)

Posted by nc...@apache.org.
AMBARI-19331. Setup correct authentication and authorization mechanism between Yarn and Zookeeper (Attila Magyar via rlevas)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 4026efacc398197ddb3b67230641efd7c850e2b8
Parents: 2627380
Author: Attila Magyar <am...@hortonworks.com>
Authored: Wed Feb 1 13:14:07 2017 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Wed Feb 1 13:14:07 2017 -0500

----------------------------------------------------------------------
 .../YARN/2.1.0.2.0/package/scripts/params_linux.py            | 2 ++
 .../YARN/2.1.0.2.0/package/scripts/resourcemanager.py         | 2 ++
 .../resources/common-services/YARN/3.0.0.3.0/kerberos.json    | 7 ++++++-
 .../YARN/3.0.0.3.0/package/scripts/params_linux.py            | 4 +++-
 .../YARN/3.0.0.3.0/package/scripts/resourcemanager.py         | 2 ++
 .../main/resources/stacks/HDP/2.6/services/YARN/kerberos.json | 6 +++++-
 6 files changed, 20 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4026efac/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
index aed8abc..335f1ac 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
@@ -257,6 +257,8 @@ rm_zk_address = config['configurations']['yarn-site']['yarn.resourcemanager.zk-a
 rm_zk_znode = config['configurations']['yarn-site']['yarn.resourcemanager.zk-state-store.parent-path']
 rm_zk_store_class = config['configurations']['yarn-site']['yarn.resourcemanager.store.class']
 stack_supports_zk_security = check_stack_feature(StackFeature.SECURE_ZOOKEEPER, version_for_stack_feature_checks)
+rm_zk_failover_znode = default('/configurations/yarn-site/yarn.resourcemanager.ha.automatic-failover.zk-base-path', '/yarn-leader-election')
+hadoop_registry_zk_root = default('/configurations/yarn-site/hadoop.registry.zk.root', '/registry')
 
 if security_enabled:
   rm_principal_name = config['configurations']['yarn-site']['yarn.resourcemanager.principal']

http://git-wip-us.apache.org/repos/asf/ambari/blob/4026efac/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py
index a659dd1..b871b68 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py
@@ -241,6 +241,8 @@ class ResourcemanagerDefault(Resourcemanager):
       params.yarn_jaas_file, \
       params.yarn_user)
     zkmigrator.set_acls(params.rm_zk_znode, 'world:anyone:crdwa')
+    zkmigrator.set_acls(params.rm_zk_failover_znode, 'world:anyone:crdwa')
+    zkmigrator.set_acls(params.hadoop_registry_zk_root, 'world:anyone:crdwa')
 
   def wait_for_dfs_directories_created(self, *dirs):
     import params

http://git-wip-us.apache.org/repos/asf/ambari/blob/4026efac/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
index 29cc00a..ae4db4f 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
@@ -31,7 +31,12 @@
             "yarn.resourcemanager.proxyuser.*.groups": "",
             "yarn.resourcemanager.proxyuser.*.hosts": "",
             "yarn.resourcemanager.proxyuser.*.users": "",
-            "yarn.resourcemanager.proxy-user-privileges.enabled": "true"
+            "yarn.resourcemanager.proxy-user-privileges.enabled": "true",
+            "yarn.resourcemanager.zk-acl" : "sasl:rm:rwcda",
+            "hadoop.registry.secure" : "true",
+            "hadoop.registry.system.accounts" : "sasl:yarn,sasl:mapred,sasl:hadoop,sasl:hdfs,sasl:rm,sasl:hive",
+            "hadoop.registry.client.auth" : "kerberos",
+            "hadoop.registry.jaas.context" : "Client"
           }
         },
         {

http://git-wip-us.apache.org/repos/asf/ambari/blob/4026efac/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
index 4d47925..0f6f1fa 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
@@ -255,6 +255,8 @@ nodemanager_kinit_cmd = ""
 rm_zk_address = config['configurations']['yarn-site']['yarn.resourcemanager.zk-address']
 rm_zk_znode = config['configurations']['yarn-site']['yarn.resourcemanager.zk-state-store.parent-path']
 rm_zk_store_class = config['configurations']['yarn-site']['yarn.resourcemanager.store.class']
+rm_zk_failover_znode = default('/configurations/yarn-site/yarn.resourcemanager.ha.automatic-failover.zk-base-path', '/yarn-leader-election')
+hadoop_registry_zk_root = default('/configurations/yarn-site/hadoop.registry.zk.root', '/registry')
 
 if security_enabled:
   rm_principal_name = config['configurations']['yarn-site']['yarn.resourcemanager.principal']
@@ -490,4 +492,4 @@ if enable_ranger_yarn and is_supported_yarn_ranger:
   if has_ranger_admin and stack_supports_ranger_audit_db and xa_audit_db_flavor == 'sqla':
     xa_audit_db_is_enabled = False
 
-# ranger yarn plugin end section
\ No newline at end of file
+# ranger yarn plugin end section

http://git-wip-us.apache.org/repos/asf/ambari/blob/4026efac/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/resourcemanager.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/resourcemanager.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/resourcemanager.py
index 4d8d95e..ba748f1 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/resourcemanager.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/resourcemanager.py
@@ -122,6 +122,8 @@ class ResourcemanagerDefault(Resourcemanager):
       params.yarn_jaas_file, \
       params.yarn_user)
     zkmigrator.set_acls(params.rm_zk_znode, 'world:anyone:crdwa')
+    zkmigrator.set_acls(params.rm_zk_failover_znode, 'world:anyone:crdwa')
+    zkmigrator.set_acls(params.hadoop_registry_zk_root, 'world:anyone:crdwa')
 
   def start(self, env, upgrade_type=None):
     import params

http://git-wip-us.apache.org/repos/asf/ambari/blob/4026efac/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
index eaffec6..ae4db4f 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
@@ -32,7 +32,11 @@
             "yarn.resourcemanager.proxyuser.*.hosts": "",
             "yarn.resourcemanager.proxyuser.*.users": "",
             "yarn.resourcemanager.proxy-user-privileges.enabled": "true",
-            "yarn.resourcemanager.zk-acl" : "sasl:rm:rwcda"
+            "yarn.resourcemanager.zk-acl" : "sasl:rm:rwcda",
+            "hadoop.registry.secure" : "true",
+            "hadoop.registry.system.accounts" : "sasl:yarn,sasl:mapred,sasl:hadoop,sasl:hdfs,sasl:rm,sasl:hive",
+            "hadoop.registry.client.auth" : "kerberos",
+            "hadoop.registry.jaas.context" : "Client"
           }
         },
         {


[17/50] [abbrv] ambari git commit: AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. Revert redundant changes. (mpapirkovskyy)

Posted by nc...@apache.org.
AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. Revert redundant changes. (mpapirkovskyy)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: a8a43bcca718604c92be6a918ac2e08a0df55b00
Parents: 4026efa
Author: Myroslav Papirkovskyi <mp...@hortonworks.com>
Authored: Wed Feb 1 19:57:06 2017 +0200
Committer: Myroslav Papirkovskyi <mp...@hortonworks.com>
Committed: Wed Feb 1 20:15:21 2017 +0200

----------------------------------------------------------------------
 ambari-project/pom.xml                                  |  2 +-
 .../src/main/resources/META-INF/persistence.xml         | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a8a43bcc/ambari-project/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml
index 6e8ef0e..0eab275 100644
--- a/ambari-project/pom.xml
+++ b/ambari-project/pom.xml
@@ -553,7 +553,7 @@
           <redirectTestOutputToFile>true</redirectTestOutputToFile>
           <forkedProcessTimeoutInSeconds>900</forkedProcessTimeoutInSeconds>
           <reuseForks>false</reuseForks>
-          <forkCount>1</forkCount>
+          <forkCount>1C</forkCount>
         </configuration>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a8a43bcc/ambari-server/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml
index 3aa7689..0375650 100644
--- a/ambari-server/src/main/resources/META-INF/persistence.xml
+++ b/ambari-server/src/main/resources/META-INF/persistence.xml
@@ -106,8 +106,8 @@
       <property name="eclipselink.connection-pool.sequence" value="true" />
       <property name="eclipselink.weaving" value="static" />
       <property name="eclipselink.session.customizer" value="org.apache.ambari.server.orm.EclipseLinkSessionCustomizer"/>
-      <!--<property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>-->
-      <!--<property name="eclipselink.logging.level" value="INFO"/>-->
+      <property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>
+      <property name="eclipselink.logging.level" value="INFO"/>
     </properties>
   </persistence-unit>
 
@@ -119,8 +119,8 @@
       <property name="eclipselink.cache.size.default" value="10000" />
       <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
       <property name="eclipselink.weaving" value="static" />
-      <!--<property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>-->
-      <!--<property name="eclipselink.logging.level" value="INFO"/>-->
+      <property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>
+      <property name="eclipselink.logging.level" value="INFO"/>
     </properties>
   </persistence-unit>
   <persistence-unit name="ambari-view-migration" transaction-type="RESOURCE_LOCAL">
@@ -130,8 +130,8 @@
       <property name="eclipselink.cache.size.default" value="10000" />
       <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
       <property name="eclipselink.weaving" value="static" />
-      <!--<property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>-->
-      <!--<property name="eclipselink.logging.level" value="INFO"/>-->
+      <property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>
+      <property name="eclipselink.logging.level" value="INFO"/>
     </properties>
   </persistence-unit>
 


[41/50] [abbrv] ambari git commit: AMBARI-19319 Disable auto start before RU/EU and enable during finalization phase

Posted by nc...@apache.org.
AMBARI-19319 Disable auto start before RU/EU and enable during finalization phase


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: b457d7b874364b105d08a657e37721de973f9dca
Parents: 69c8389
Author: Andrii Tkach <at...@apache.org>
Authored: Thu Feb 2 21:06:55 2017 +0200
Committer: Andrii Tkach <at...@apache.org>
Committed: Thu Feb 2 21:06:55 2017 +0200

----------------------------------------------------------------------
 ambari-web/app/messages.js                                          | 1 +
 .../app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b457d7b8/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 6f8f435..cb88fda 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1818,6 +1818,7 @@ Em.I18n.translations = {
     "Click on <b>Finalize</b> when you are ready to finalize the downgrade and commit to the new version." +
     " You are strongly encouraged to run tests on your cluster to ensure it is fully operational before finalizing." +
     " <b>You cannot go back to the original version once the downgrade is finalized.</b>",
+  'admin.stackUpgrade.finalize.message.autoStart': "Please remember to re-enable Auto Start if you disabled it for upgrade.",
   'admin.stackUpgrade.finalize.message.skippedServiceChecks': "During the upgrade, checks for the following services failed and were skipped:",
   'admin.stackUpgrade.finalize.message.testServices': "You are strongly recommended to test these services before finalizing upgrade.",
   'admin.stackUpgrade.failedHosts.message': "Upgrade did not succeed on",

http://git-wip-us.apache.org/repos/asf/ambari/blob/b457d7b8/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
index 8bb0904..f82cca4 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
@@ -126,6 +126,7 @@
             {{else}}
               <p class="manual-steps-content">{{t admin.stackUpgrade.finalize.message.upgrade}}</p>
             {{/if}}
+              <p class="manual-steps-content"><strong>{{t admin.stackUpgrade.finalize.message.autoStart}}</strong></p>
 
             {{#if areSkippedServiceChecksLoaded}}
               {{#if skippedServiceChecks.length}}


[29/50] [abbrv] ambari git commit: AMBARI-19841. Add yarn.client.failover-proxy-provider in yarn-site.xml by default for all HA enabled clusters (Madhuvanthi Radhakrishnan via smohanty)

Posted by nc...@apache.org.
AMBARI-19841. Add yarn.client.failover-proxy-provider in yarn-site.xml by default for all HA enabled clusters (Madhuvanthi Radhakrishnan via smohanty)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 325dc20537b3328ce9cc6e4a3f5d0b111e353d94
Parents: d1f26f9
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Feb 1 22:45:45 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Feb 1 22:45:45 2017 -0800

----------------------------------------------------------------------
 .../services/YARN/configuration/yarn-site.xml   | 26 ++++++++++++++++++++
 .../stacks/HDP/2.6/services/YARN/metainfo.xml   |  1 +
 2 files changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/325dc205/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-site.xml
new file mode 100644
index 0000000..555768e
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-site.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+  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.
+-->
+<configuration supports_final="true">
+  <property>
+    <name>yarn.client.failover-proxy-provider</name>
+    <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
+    <description>When HA is enabled, the class to be used by Clients, AMs and NMs to failover to the Active RM. It should extend org.apache.hadoop.yarn.client.RMFailoverProxyProvider</description>
+    <on-ambari-upgrade add="false"/>
+  </property>
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/325dc205/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/metainfo.xml
index ad457b2..801df78 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/metainfo.xml
@@ -26,6 +26,7 @@
     <service>
       <name>MAPREDUCE2</name>
       <version>2.7.3.2.6</version>
+      <configuration-dir>configuration-mapred</configuration-dir>
     </service>
   </services>
 </metainfo>


[32/50] [abbrv] ambari git commit: AMBARI-19843. Publish asset has issues when different users logins (Madhan Mohan Reddy via gauravn7)

Posted by nc...@apache.org.
AMBARI-19843. Publish asset has issues when different users logins (Madhan Mohan Reddy via gauravn7)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 0b472f2e2efbe1d1b2c2dc78c7442d59237edf2a
Parents: b5ee4c5
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Thu Feb 2 18:15:52 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Thu Feb 2 18:15:52 2017 +0530

----------------------------------------------------------------------
 .../java/org/apache/oozie/ambari/view/assets/AssetResource.java   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0b472f2e/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/assets/AssetResource.java
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/assets/AssetResource.java b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/assets/AssetResource.java
index af86810..ef3b508 100644
--- a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/assets/AssetResource.java
+++ b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/assets/AssetResource.java
@@ -115,7 +115,7 @@ public class AssetResource {
     String workflowXml = oozieUtils.generateWorkflowXml(postBody);
     try {
       Map<String, String> result = new HashMap<>();
-      String tempWfPath = "/tmp" + "/tmpooziewfs/tempwf.xml";
+      String tempWfPath = "/tmp" + "/tmpooziewfs/tempwf_" + Math.round(Math.random()*100000) + ".xml";
       hdfsFileUtils.writeToFile(tempWfPath, workflowXml, true);
       queryParams.put("oozieparam.action", getAsList("dryrun"));
       queryParams.put("oozieconfig.rerunOnFailure", getAsList("false"));
@@ -125,6 +125,7 @@ public class AssetResource {
         tempWfPath, queryParams, JobType.WORKFLOW);
       LOGGER.info(String.format("resp from validating asset=[%s]",
         dryRunResp));
+      hdfsFileUtils.deleteFile(tempWfPath);
       if (dryRunResp != null && dryRunResp.trim().startsWith("{")) {
         JsonElement jsonElement = new JsonParser().parse(dryRunResp);
         JsonElement idElem = jsonElement.getAsJsonObject().get("id");


[10/50] [abbrv] ambari git commit: AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. (mpapirkovskyy)

Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
index 5890c35..e29c276 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
@@ -17,12 +17,14 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -47,7 +49,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class ServiceConfigDAOTest {
   private static final StackId HDP_01 = new StackId("HDP", "0.1");
@@ -78,8 +79,8 @@ public class ServiceConfigDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private ServiceConfigEntity createServiceConfig(String serviceName,
@@ -156,9 +157,11 @@ public class ServiceConfigDAOTest {
     ServiceConfigEntity serviceConfigEntity =
       createServiceConfig("HDFS", "admin", 1L, 1L, 1111L, null);
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(serviceConfigEntity);
     Assert.assertEquals("c1", serviceConfigEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), serviceConfigEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, serviceConfigEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("HDFS", serviceConfigEntity.getServiceName());
     Assert.assertEquals(Long.valueOf(1111L), serviceConfigEntity.getCreateTimestamp());
@@ -175,9 +178,11 @@ public class ServiceConfigDAOTest {
 
     ServiceConfigEntity serviceConfigEntity = serviceConfigDAO.find(sce.getServiceConfigId());
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(serviceConfigEntity);
     Assert.assertEquals("c1", serviceConfigEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), serviceConfigEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, serviceConfigEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("HDFS", serviceConfigEntity.getServiceName());
     Assert.assertEquals(Long.valueOf(1111L), serviceConfigEntity.getCreateTimestamp());
@@ -195,9 +200,11 @@ public class ServiceConfigDAOTest {
     ServiceConfigEntity serviceConfigEntity =
       serviceConfigDAO.findByServiceAndVersion("HDFS", 1L);
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(serviceConfigEntity);
     Assert.assertEquals("c1", serviceConfigEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), serviceConfigEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, serviceConfigEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("HDFS", serviceConfigEntity.getServiceName());
     Assert.assertEquals(Long.valueOf(1111L), serviceConfigEntity.getCreateTimestamp());
@@ -235,10 +242,12 @@ public class ServiceConfigDAOTest {
     Assert.assertNotNull(serviceConfigEntities);
     Assert.assertEquals(2, serviceConfigEntities.size());
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     for (ServiceConfigEntity sce: serviceConfigEntities) {
       if ("HDFS".equals(sce.getServiceName())) {
         Assert.assertEquals("c1", sce.getClusterEntity().getClusterName());
-        Assert.assertEquals(Long.valueOf(1), sce.getClusterEntity()
+        Assert.assertEquals(clusterId, sce.getClusterEntity()
           .getClusterId());
         Assert.assertEquals(Long.valueOf(2222L), sce.getCreateTimestamp());
         Assert.assertEquals(Long.valueOf(2), sce.getVersion());
@@ -247,7 +256,7 @@ public class ServiceConfigDAOTest {
       }
       if ("YARN".equals(sce.getServiceName())) {
         Assert.assertEquals("c1", sce.getClusterEntity().getClusterName());
-        Assert.assertEquals(Long.valueOf(1), sce.getClusterEntity()
+        Assert.assertEquals(clusterId, sce.getClusterEntity()
           .getClusterId());
         Assert.assertEquals(Long.valueOf(3333L), sce.getCreateTimestamp());
         Assert.assertEquals(Long.valueOf(1), sce.getVersion());
@@ -265,7 +274,7 @@ public class ServiceConfigDAOTest {
     Clusters clusters = injector.getInstance(Clusters.class);
     clusters.addCluster("c1", HDP_01);
     ConfigGroupEntity configGroupEntity1 = new ConfigGroupEntity();
-    ClusterEntity clusterEntity = clusterDAO.findById(1L);
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
     configGroupEntity1.setClusterEntity(clusterEntity);
     configGroupEntity1.setClusterId(clusterEntity.getClusterId());
     configGroupEntity1.setGroupName("group1");
@@ -309,12 +318,14 @@ public class ServiceConfigDAOTest {
     createServiceConfig("HDFS", "admin", 2L, 2L, 2222L, null);
     createServiceConfig("YARN", "admin", 1L, 3L, 3333L, null);
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     ServiceConfigEntity serviceConfigEntity =
-      serviceConfigDAO.getLastServiceConfig(1L, "HDFS");
+      serviceConfigDAO.getLastServiceConfig(clusterId, "HDFS");
 
     Assert.assertNotNull(serviceConfigEntity);
     Assert.assertEquals("c1", serviceConfigEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), serviceConfigEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, serviceConfigEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("HDFS", serviceConfigEntity.getServiceName());
     Assert.assertEquals(Long.valueOf(2222L), serviceConfigEntity.getCreateTimestamp());
@@ -330,8 +341,10 @@ public class ServiceConfigDAOTest {
     createServiceConfig("HDFS", "admin", 2L, 2L, 2222L, null);
     createServiceConfig("YARN", "admin", 1L, 3L, 3333L, null);
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     List<ServiceConfigEntity> serviceConfigEntities =
-      serviceConfigDAO.getServiceConfigs(clusterDAO.findByName("c1").getClusterId());
+      serviceConfigDAO.getServiceConfigs(clusterId);
 
     Assert.assertNotNull(serviceConfigEntities);
     Assert.assertEquals(3, serviceConfigEntities.size());
@@ -339,21 +352,21 @@ public class ServiceConfigDAOTest {
     for (ServiceConfigEntity sce: serviceConfigEntities) {
       if ("HDFS".equals(sce.getServiceName()) && (sce.getVersion() == 1)) {
         Assert.assertEquals("c1", sce.getClusterEntity().getClusterName());
-        Assert.assertEquals(Long.valueOf(1), sce.getClusterEntity()
+        Assert.assertEquals(clusterId, sce.getClusterEntity()
           .getClusterId());
         Assert.assertEquals(Long.valueOf(1111L), sce.getCreateTimestamp());
         Assert.assertTrue(sce.getClusterConfigEntities().isEmpty());
         Assert.assertNotNull(sce.getServiceConfigId());
       } else if ("HDFS".equals(sce.getServiceName()) && (sce.getVersion() == 2)) {
         Assert.assertEquals("c1", sce.getClusterEntity().getClusterName());
-        Assert.assertEquals(Long.valueOf(1), sce.getClusterEntity()
+        Assert.assertEquals(clusterId, sce.getClusterEntity()
           .getClusterId());
         Assert.assertEquals(Long.valueOf(2222L), sce.getCreateTimestamp());
         Assert.assertTrue(sce.getClusterConfigEntities().isEmpty());
         Assert.assertNotNull(sce.getServiceConfigId());
       } else if ("YARN".equals(sce.getServiceName())) {
         Assert.assertEquals("c1", sce.getClusterEntity().getClusterName());
-        Assert.assertEquals(Long.valueOf(1), sce.getClusterEntity()
+        Assert.assertEquals(clusterId, sce.getClusterEntity()
           .getClusterId());
         Assert.assertEquals(Long.valueOf(3333L), sce.getCreateTimestamp());
         Assert.assertEquals(Long.valueOf(1), sce.getVersion());
@@ -457,11 +470,13 @@ public class ServiceConfigDAOTest {
 
     List<ConfigGroupEntity> configGroupEntities = configGroupDAO.findAllByTag("OOZIE");
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(configGroupEntities);
     ConfigGroupEntity configGroupEntity = configGroupEntities.get(0);
     Assert.assertNotNull(configGroupEntity);
     Assert.assertEquals("c1", configGroupEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), configGroupEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, configGroupEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("oozie_server", configGroupEntity.getGroupName());
     Assert.assertEquals("OOZIE", configGroupEntity.getTag());
@@ -551,7 +566,8 @@ public class ServiceConfigDAOTest {
     clusters.addCluster("c1", HDP_01);
     initClusterEntitiesWithConfigGroups();
     ConfigGroupEntity configGroupEntity1 = new ConfigGroupEntity();
-    ClusterEntity clusterEntity = clusterDAO.findById(1L);
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
+    Long clusterId = clusterEntity.getClusterId();
     configGroupEntity1.setClusterEntity(clusterEntity);
     configGroupEntity1.setClusterId(clusterEntity.getClusterId());
     configGroupEntity1.setGroupName("toTestDeleteGroup_OOZIE");
@@ -562,11 +578,11 @@ public class ServiceConfigDAOTest {
     ConfigGroupEntity testDeleteGroup_OOZIE = configGroupDAO.findByName("toTestDeleteGroup_OOZIE");
     createServiceConfigWithGroup("OOZIE", "", 2L, 2L, System.currentTimeMillis(), null,
         testDeleteGroup_OOZIE.getGroupId());
-    Collection<ServiceConfigEntity> serviceConfigEntityList = serviceConfigDAO.getLastServiceConfigsForService(1L,
+    Collection<ServiceConfigEntity> serviceConfigEntityList = serviceConfigDAO.getLastServiceConfigsForService(clusterId,
         "OOZIE");
     Assert.assertEquals(2, serviceConfigEntityList.size());
     configGroupDAO.remove(configGroupEntity1);
-    serviceConfigEntityList = serviceConfigDAO.getLastServiceConfigsForService(1L, "OOZIE");
+    serviceConfigEntityList = serviceConfigDAO.getLastServiceConfigsForService(clusterId, "OOZIE");
     Assert.assertEquals(1, serviceConfigEntityList.size());
   }
   private void initClusterEntities() throws Exception{
@@ -589,6 +605,7 @@ public class ServiceConfigDAOTest {
     String oozieSite = "oozie-site";
 
     for (int i = 1; i < 6; i++){
+      Thread.sleep(1);
       ClusterConfigEntity entity = new ClusterConfigEntity();
       entity.setClusterEntity(clusterEntity);
       entity.setClusterId(clusterEntity.getClusterId());
@@ -613,6 +630,7 @@ public class ServiceConfigDAOTest {
       clusterEntity.setConfigMappingEntities(entities);
     }
 
+    Thread.sleep(1);
     ClusterConfigMappingEntity e1 = new ClusterConfigMappingEntity();
     e1.setClusterEntity(clusterEntity);
     e1.setClusterId(clusterEntity.getClusterId());
@@ -624,6 +642,7 @@ public class ServiceConfigDAOTest {
     entities.add(e1);
     clusterDAO.merge(clusterEntity);
 
+    Thread.sleep(1);
     ClusterConfigMappingEntity e2 = new ClusterConfigMappingEntity();
     e2.setClusterEntity(clusterEntity);
     e2.setClusterId(clusterEntity.getClusterId());
@@ -635,6 +654,7 @@ public class ServiceConfigDAOTest {
     entities.add(e2);
     clusterDAO.merge(clusterEntity);
 
+    Thread.sleep(1);
     ClusterConfigMappingEntity e3 = new ClusterConfigMappingEntity();
     e3.setClusterEntity(clusterEntity);
     e3.setClusterId(clusterEntity.getClusterId());
@@ -666,6 +686,7 @@ public class ServiceConfigDAOTest {
 
     int count = 3;
     for (int i = 1; i < count; i++){
+      Thread.sleep(1);
       ClusterConfigEntity entity = new ClusterConfigEntity();
       entity.setClusterEntity(clusterEntity);
       entity.setClusterId(clusterEntity.getClusterId());
@@ -686,6 +707,7 @@ public class ServiceConfigDAOTest {
       clusterEntity.setConfigMappingEntities(entities);
     }
 
+    Thread.sleep(1);
     ClusterConfigMappingEntity e1 = new ClusterConfigMappingEntity();
     e1.setClusterEntity(clusterEntity);
     e1.setClusterId(clusterEntity.getClusterId());
@@ -697,6 +719,7 @@ public class ServiceConfigDAOTest {
     entities.add(e1);
     clusterDAO.merge(clusterEntity);
 
+    Thread.sleep(1);
     ClusterConfigMappingEntity e2 = new ClusterConfigMappingEntity();
     e2.setClusterEntity(clusterEntity);
     e2.setClusterId(clusterEntity.getClusterId());
@@ -749,6 +772,7 @@ public class ServiceConfigDAOTest {
         config.setClusterId(clusterEntity.getClusterId());
         clusterDAO.createConfig(config);
 
+        Thread.sleep(1);
         ConfigGroupConfigMappingEntity configMappingEntity = new
           ConfigGroupConfigMappingEntity();
         configMappingEntity.setClusterId(clusterEntity.getClusterId());
@@ -766,4 +790,4 @@ public class ServiceConfigDAOTest {
       configGroupDAO.merge(configGroupEntity);
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/SettingDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/SettingDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/SettingDAOTest.java
index 4029bae..b96a7b2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/SettingDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/SettingDAOTest.java
@@ -24,10 +24,12 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
 import org.apache.ambari.server.orm.entities.SettingEntity;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -46,6 +48,11 @@ public class SettingDAOTest {
     injector.getInstance(OrmTestHelper.class).createCluster();
   }
 
+  @After
+  public void teardown() throws Exception {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   @Test
   public void testCRUD() {
     Map<String, SettingEntity> entities = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/StageDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/StageDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/StageDAOTest.java
index 0215a0e..1f71af2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/StageDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/StageDAOTest.java
@@ -21,11 +21,14 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.internal.SortRequestImpl;
 import org.apache.ambari.server.controller.internal.StageResourceProvider;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -45,7 +48,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * StageDAO tests.
@@ -90,8 +92,8 @@ public class StageDAOTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 
@@ -174,4 +176,4 @@ public class StageDAOTest {
       lastInfo = currentInfo;
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyLogicalRequestDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyLogicalRequestDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyLogicalRequestDAOTest.java
index 3e7ba68..fef76c8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyLogicalRequestDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyLogicalRequestDAOTest.java
@@ -17,11 +17,13 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -39,7 +41,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -63,8 +64,8 @@ public class TopologyLogicalRequestDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private void create() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
index c85dceb..5f1490c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
@@ -17,11 +17,13 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -34,7 +36,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -54,8 +55,8 @@ public class TopologyRequestDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private void create() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
index ae85241..3c5970d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
@@ -22,10 +22,13 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -46,7 +49,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Tests {@link AlertDefinitionDAO} for interacting with
@@ -68,6 +70,7 @@ public class UpgradeDAOTest {
   @Before
   public void setup() throws Exception {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
 
     dao = injector.getInstance(UpgradeDAO.class);
@@ -107,8 +110,8 @@ public class UpgradeDAOTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetDAOTest.java
index 8be805a..1f03f8f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetDAOTest.java
@@ -18,9 +18,12 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -34,7 +37,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * WidgetDAO unit tests.
@@ -121,8 +123,8 @@ public class WidgetDAOTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetLayoutDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetLayoutDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetLayoutDAOTest.java
index f50ae44..dc79b6f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetLayoutDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/WidgetLayoutDAOTest.java
@@ -18,9 +18,12 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -34,7 +37,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * WidgetLayoutDAO unit tests.
@@ -130,8 +132,8 @@ public class WidgetLayoutDAOTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
index aa6ab1c..726972b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
@@ -38,6 +38,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionDBAccessor;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -82,7 +83,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 import com.google.inject.util.Modules;
 
@@ -131,7 +131,7 @@ public class ExecutionScheduleManagerTest {
   @AfterClass
   public static void teardown() throws Exception {
     executionScheduleManager.stop();
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   public static class TestExecutionScheduler extends ExecutionSchedulerImpl {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/AmbariLdapUtilsTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/AmbariLdapUtilsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/AmbariLdapUtilsTest.java
index 46f9689..1f2010d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/AmbariLdapUtilsTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/AmbariLdapUtilsTest.java
@@ -29,7 +29,6 @@ import static org.easymock.EasyMock.verify;
 import javax.naming.Name;
 import javax.naming.NamingException;
 
-
 import org.apache.ambari.server.security.authorization.AmbariLdapUtils;
 import org.junit.Assert;
 import org.junit.Test;

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
index 1e1c72f..18c4cce 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
@@ -41,6 +41,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.crypto.codec.Base64;
 
 public class AmbariBasicAuthenticationFilterTest extends EasyMockSupport {
@@ -63,13 +64,14 @@ public class AmbariBasicAuthenticationFilterTest extends EasyMockSupport {
 
   @Test
   public void testDoFilter() throws IOException, ServletException {
+    SecurityContextHolder.getContext().setAuthentication(null);
     // GIVEN
     HttpServletRequest request = createMock(HttpServletRequest.class);
     HttpServletResponse response = createMock(HttpServletResponse.class);
     FilterChain filterChain = createMock(FilterChain.class);
     expect(request.getHeader("Authorization")).andReturn("Basic ").andReturn(null);
-    expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4");
-    expect(mockedAuditLogger.isEnabled()).andReturn(true);
+    expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4").anyTimes();
+    expect(mockedAuditLogger.isEnabled()).andReturn(true).anyTimes();
     mockedAuditLogger.log(anyObject(AuditEvent.class));
     expectLastCall().times(1);
     filterChain.doFilter(request, response);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderForDNWithSpaceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderForDNWithSpaceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderForDNWithSpaceTest.java
index c18eef5..819668a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderForDNWithSpaceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderForDNWithSpaceTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.Properties;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.audit.AuditLoggerModule;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.ControllerModule;
@@ -45,7 +46,6 @@ import org.springframework.security.core.Authentication;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 @RunWith(FrameworkRunner.class)
 @CreateDS(allowAnonAccess = true,
@@ -93,7 +93,7 @@ public class AmbariLdapAuthenticationProviderForDNWithSpaceTest extends AmbariLd
 
   @After
   public void tearDown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test(expected = InvalidUsernamePasswordCombinationException.class)

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderTest.java
index 2a2e2a3..37c6cb3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProviderTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.audit.AuditLoggerModule;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -51,7 +52,6 @@ import org.springframework.security.core.Authentication;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -101,7 +101,7 @@ public class AmbariLdapAuthenticationProviderTest extends AmbariLdapAuthenticati
 
   @After
   public void tearDown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test(expected = InvalidUsernamePasswordCombinationException.class)

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLocalUserProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLocalUserProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLocalUserProviderTest.java
index 4ab7a5a..9ff381f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLocalUserProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLocalUserProviderTest.java
@@ -25,12 +25,14 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.audit.AuditLoggerModule;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.OrmTestHelper;
 import org.apache.ambari.server.orm.dao.UserDAO;
 import org.apache.ambari.server.orm.entities.PrincipalEntity;
 import org.apache.ambari.server.orm.entities.UserEntity;
+import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -65,6 +67,11 @@ public class AmbariLocalUserProviderTest {
     SecurityContextHolder.getContext().setAuthentication(null);
   }
 
+  @AfterClass
+  public static void tearDown() throws Exception {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   @Test
   public void testSuccessfulAuth() {
     Users users = createMock(Users.class);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariPamAuthenticationProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariPamAuthenticationProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariPamAuthenticationProviderTest.java
index 2a6c754..99d0055 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariPamAuthenticationProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariPamAuthenticationProviderTest.java
@@ -24,6 +24,7 @@ import static org.easymock.EasyMock.expect;
 import java.util.Arrays;
 import java.util.HashSet;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.audit.AuditLoggerModule;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -41,7 +42,6 @@ import org.springframework.security.core.AuthenticationException;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -65,7 +65,7 @@ public class AmbariPamAuthenticationProviderTest {
 
   @After
   public void tearDown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test(expected = AuthenticationException.class)

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
index e15c648..2ca5396 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/TestUsers.java
@@ -23,9 +23,11 @@ import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.dao.GroupDAO;
@@ -54,7 +56,6 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -117,8 +118,8 @@ public class TestUsers {
   }
 
   @After
-  public void tearDown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/LdapPerformanceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/LdapPerformanceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/LdapPerformanceTest.java
index f770f4c..02e67f5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/LdapPerformanceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/LdapPerformanceTest.java
@@ -18,15 +18,18 @@
 
 package org.apache.ambari.server.security.ldap;
 
+import java.sql.SQLException;
 import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.security.ClientSecurityType;
 import org.apache.ambari.server.security.authorization.AuthorizationTestModule;
 import org.apache.ambari.server.security.authorization.Users;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -74,6 +77,11 @@ public class LdapPerformanceTest {
     configuration.setProperty(Configuration.LDAP_MANAGER_PASSWORD.getKey(), "hdfs");
   }
 
+  @After
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   @Test
   public void testLdapSync() throws AmbariException, InterruptedException {
     long time = System.currentTimeMillis();

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/serveraction/ServerActionExecutorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/ServerActionExecutorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/ServerActionExecutorTest.java
index c3ada2b..44d5b63 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/ServerActionExecutorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/ServerActionExecutorTest.java
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -38,6 +39,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionDBAccessor;
@@ -53,6 +56,7 @@ import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent;
 import org.apache.ambari.server.utils.StageUtils;
 import org.easymock.IAnswer;
+import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -83,6 +87,11 @@ public class ServerActionExecutorTest {
     injector = Guice.createInjector(new MockModule());
   }
 
+  @After
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
     /**
      * Test a normal server action
      */
@@ -339,4 +348,4 @@ public class ServerActionExecutorTest {
       bind(Clusters.class).toInstance(mock(Clusters.class));
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java
index 140277e..863e4f5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java
@@ -227,4 +227,4 @@ public class KerberosServerActionTest {
 
     verify(kerberosHelper);
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
index 8dc4c1b..9f27257 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/AutoSkipFailedSummaryActionTest.java
@@ -32,6 +32,9 @@ import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
@@ -66,7 +69,6 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 import com.google.inject.util.Modules;
 
@@ -120,7 +122,7 @@ public class AutoSkipFailedSummaryActionTest {
   @After
   public void teardown() throws Exception {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
index 80a3bc5..ffbb6f7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
@@ -26,7 +26,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.persistence.EntityManager;
+
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
@@ -69,7 +72,6 @@ import org.junit.Test;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 /**
@@ -126,7 +128,7 @@ public class ComponentVersionCheckActionTest {
   @After
   public void teardown() throws Exception {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
   private void makeUpgradeCluster(StackId sourceStack, String sourceRepo, StackId targetStack, String targetRepo) throws Exception {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
index cd8327b..976dea4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
@@ -28,7 +28,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.persistence.EntityManager;
+
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
@@ -72,7 +75,6 @@ import com.google.gson.Gson;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Tests upgrade-related server side actions
@@ -118,7 +120,7 @@ public class ConfigureActionTest {
 
   @After
   public void teardown() throws Exception {
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 72d0f13..42a4ac5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -29,7 +29,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.persistence.EntityManager;
+
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
@@ -94,7 +97,6 @@ import com.google.gson.JsonObject;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 /**
@@ -174,7 +176,7 @@ public class UpgradeActionTest {
   @After
   public void teardown() throws Exception {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
   private void makeDowngradeCluster(StackId sourceStack, String sourceRepo, StackId targetStack, String targetRepo) throws Exception {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
index 7a37224..7063147 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java
@@ -21,9 +21,11 @@ import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.sql.SQLException;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.CommandExecutionType;
@@ -45,7 +47,6 @@ import org.junit.Test;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class TestStagePlanner {
 
@@ -68,8 +69,8 @@ public class TestStagePlanner {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
index f55bf62..c70dcc6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
@@ -17,11 +17,13 @@
  */
 package org.apache.ambari.server.state;
 
+import java.sql.SQLException;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.dao.ConfigGroupDAO;
@@ -37,7 +39,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 
 import junit.framework.Assert;
@@ -75,8 +76,8 @@ public class ConfigGroupTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Transactional
@@ -97,7 +98,7 @@ public class ConfigGroupTest {
     Map<Long, Host> hosts = new HashMap<Long, Host>();
 
     configs.put(config.getType(), config);
-    hosts.put(1L, host);
+    hosts.put(host.getHostId(), host);
 
     ConfigGroup configGroup = configGroupFactory.createNew(cluster, "cg-test",
       "HDFS", "New HDFS configs for h1", configs, hosts);
@@ -213,13 +214,15 @@ public class ConfigGroupTest {
     configGroup = cluster.getConfigGroups().get(id);
     Assert.assertNotNull(configGroup);
 
+    long hostId = clusters.getHost("h1").getHostId();
+
     clusters.unmapHostFromCluster("h1", clusterName);
 
     Assert.assertNull(clusters.getHostsForCluster(clusterName).get("h1"));
     // Assumes that 1L is the id of host h1, as specified in createConfigGroup
-    Assert.assertNotNull(configGroupHostMappingDAO.findByHostId(1L));
-    Assert.assertTrue(configGroupHostMappingDAO.findByHostId(1L).isEmpty());
-    Assert.assertFalse(configGroup.getHosts().containsKey(1L));
+    Assert.assertNotNull(configGroupHostMappingDAO.findByHostId(hostId));
+    Assert.assertTrue(configGroupHostMappingDAO.findByHostId(hostId).isEmpty());
+    Assert.assertFalse(configGroup.getHosts().containsKey(hostId));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index 1e65fc2..5d849c9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -23,6 +23,7 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -36,6 +37,7 @@ import java.util.Set;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariCustomCommandExecutionHelper;
@@ -69,7 +71,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 
 import junit.framework.Assert;
@@ -222,8 +223,8 @@ public class ConfigHelperTest {
     }
 
     @AfterClass
-    public static void tearDown() {
-      injector.getInstance(PersistService.class).stop();
+    public static void tearDown() throws AmbariException, SQLException {
+      H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
 
       // Clear the authenticated user
       SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigMergeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigMergeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigMergeHelperTest.java
index 112d3c5..b821976 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigMergeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigMergeHelperTest.java
@@ -26,11 +26,14 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -42,7 +45,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -76,8 +78,8 @@ public class ConfigMergeHelperTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
index 31d3028..55aefb4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.RequestScheduleResponse;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -41,7 +42,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 
 import junit.framework.Assert;
@@ -78,7 +78,7 @@ public class RequestExecutionTest {
 
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Transactional

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index 0f615ee..e7572f4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -22,11 +22,13 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.ServiceComponentResponse;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -54,7 +56,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -107,8 +108,8 @@ public class ServiceComponentTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
index ff6dfc9..7cb9a74 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
@@ -21,10 +21,12 @@ package org.apache.ambari.server.state;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.ServiceResponse;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -37,7 +39,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -70,8 +71,8 @@ public class ServiceTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 7be9419..8e5ad0a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Field;
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -38,6 +39,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ClusterRequest;
@@ -86,7 +88,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.assistedinject.FactoryModuleBuilder;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -140,7 +141,9 @@ public class UpgradeHelperTest {
 
     // create an injector which will inject the mocks
     injector = Guice.createInjector(Modules.override(injectorModule).with(mockModule));
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
+
     EventBusSynchronizer.synchronizeAmbariEventPublisher(injector);
     EventBusSynchronizer.synchronizeAlertEventPublisher(injector);
 
@@ -158,8 +161,8 @@ public class UpgradeHelperTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
 
     // Clear the authenticated user
     SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AggregateAlertListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AggregateAlertListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AggregateAlertListenerTest.java
index 4c49ab3..c4c97d1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AggregateAlertListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AggregateAlertListenerTest.java
@@ -17,6 +17,9 @@
  */
 package org.apache.ambari.server.state.alerts;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.AlertReceivedEvent;
 import org.apache.ambari.server.events.AlertStateChangeEvent;
 import org.apache.ambari.server.events.MockEventListener;
@@ -45,7 +48,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 import junit.framework.Assert;
@@ -84,7 +86,7 @@ public class AggregateAlertListenerTest {
    */
   @After
   public void teardown() throws Exception {
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
     m_injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
index 015660c..e50dba5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.state.alerts;
 
 import java.util.UUID;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.AlertDefinitionChangedEvent;
 import org.apache.ambari.server.events.AlertDefinitionDeleteEvent;
 import org.apache.ambari.server.events.AmbariEvent;
@@ -54,7 +55,6 @@ import org.junit.experimental.categories.Category;
 import com.google.gson.Gson;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -105,7 +105,7 @@ public class AlertEventPublisherTest {
    */
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 
@@ -161,7 +161,7 @@ public class AlertEventPublisherTest {
     installHdfsService();
 
     int definitionCount = definitionDao.findAll().size();
-    AlertDefinitionEntity definition = ormHelper.createAlertDefinition(1L);
+    AlertDefinitionEntity definition = ormHelper.createAlertDefinition(cluster.getClusterId());
     Assert.assertEquals(definitionCount + 1, definitionDao.findAll().size());
 
     AggregateSource source = new AggregateSource();
@@ -175,7 +175,7 @@ public class AlertEventPublisherTest {
     source.setType(SourceType.AGGREGATE);
 
     AlertDefinitionEntity aggregateEntity = new AlertDefinitionEntity();
-    aggregateEntity.setClusterId(1L);
+    aggregateEntity.setClusterId(cluster.getClusterId());
     aggregateEntity.setComponentName("DATANODE");
     aggregateEntity.setEnabled(true);
     aggregateEntity.setDefinitionName("datanode_aggregate");
@@ -190,7 +190,7 @@ public class AlertEventPublisherTest {
     definitionDao.create(aggregateEntity);
 
     // pull it out of the mapping and compare fields
-    AlertDefinition aggregate = aggregateMapping.getAggregateDefinition(1L,
+    AlertDefinition aggregate = aggregateMapping.getAggregateDefinition(cluster.getClusterId(),
         source.getAlertName());
 
     Assert.assertNotNull(aggregate);
@@ -207,7 +207,7 @@ public class AlertEventPublisherTest {
     definitionDao.merge(aggregateEntity);
 
     // check the aggregate mapping for the new value
-    aggregate = aggregateMapping.getAggregateDefinition(1L,
+    aggregate = aggregateMapping.getAggregateDefinition(cluster.getClusterId(),
         source.getAlertName());
 
     Assert.assertNotNull(aggregate);
@@ -272,14 +272,14 @@ public class AlertEventPublisherTest {
   @Test
   public void testAlertDefinitionRemoval() throws Exception {
     Assert.assertEquals(0, definitionDao.findAll().size());
-    AlertDefinitionEntity definition = ormHelper.createAlertDefinition(1L);
+    AlertDefinitionEntity definition = ormHelper.createAlertDefinition(cluster.getClusterId());
     Assert.assertEquals(1, definitionDao.findAll().size());
 
     AggregateSource source = new AggregateSource();
     source.setAlertName(definition.getDefinitionName());
 
     AlertDefinition aggregate = new AlertDefinition();
-    aggregate.setClusterId(1L);
+    aggregate.setClusterId(cluster.getClusterId());
     aggregate.setComponentName("DATANODE");
     aggregate.setEnabled(true);
     aggregate.setInterval(1);
@@ -290,13 +290,13 @@ public class AlertEventPublisherTest {
     aggregate.setSource(source);
     aggregate.setUuid("uuid");
 
-    aggregateMapping.registerAggregate(1L, aggregate);
-    Assert.assertNotNull(aggregateMapping.getAggregateDefinition(1L,
+    aggregateMapping.registerAggregate(cluster.getClusterId(), aggregate);
+    Assert.assertNotNull(aggregateMapping.getAggregateDefinition(cluster.getClusterId(),
         source.getAlertName()));
 
     definitionDao.remove(definition);
 
-    Assert.assertNull(aggregateMapping.getAggregateDefinition(1L,
+    Assert.assertNull(aggregateMapping.getAggregateDefinition(cluster.getClusterId(),
         source.getAlertName()));
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertReceivedListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertReceivedListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertReceivedListenerTest.java
index ede94dc..68395b5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertReceivedListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertReceivedListenerTest.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.state.alerts;
 
 import static org.junit.Assert.assertEquals;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -26,6 +27,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.RootServiceResponseFactory.Components;
 import org.apache.ambari.server.controller.RootServiceResponseFactory.Services;
 import org.apache.ambari.server.events.AlertReceivedEvent;
@@ -60,7 +65,6 @@ import org.junit.experimental.categories.Category;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 /**
@@ -131,9 +135,9 @@ public class AlertReceivedListenerTest {
   }
 
   @After
-  public void teardown() {
+  public void teardown() throws AmbariException, SQLException {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
     m_injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertStateChangedEventTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertStateChangedEventTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertStateChangedEventTest.java
index 5dd04d7..c21ed6b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertStateChangedEventTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertStateChangedEventTest.java
@@ -23,6 +23,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.RootServiceResponseFactory.Services;
 import org.apache.ambari.server.events.AggregateAlertRecalculateEvent;
 import org.apache.ambari.server.events.AlertEvent;
@@ -58,7 +59,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 import junit.framework.Assert;
@@ -101,7 +101,7 @@ public class AlertStateChangedEventTest extends EasyMockSupport {
    */
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
index 85d13a6..483aac5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
@@ -19,6 +19,9 @@ package org.apache.ambari.server.state.alerts;
 
 import java.util.List;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.AlertReceivedEvent;
 import org.apache.ambari.server.events.InitialAlertEvent;
 import org.apache.ambari.server.events.MockEventListener;
@@ -48,7 +51,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 import junit.framework.Assert;
@@ -112,7 +114,7 @@ public class InitialAlertEventTest {
    */
   @After
   public void teardown() throws Exception {
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
     m_injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/AlertDataManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/AlertDataManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/AlertDataManagerTest.java
index 4f56d77..05aeddb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/AlertDataManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/AlertDataManagerTest.java
@@ -23,12 +23,17 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Field;
+import java.sql.SQLException;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicReference;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.AlertEvent;
 import org.apache.ambari.server.events.AlertReceivedEvent;
 import org.apache.ambari.server.events.AlertStateChangeEvent;
@@ -75,7 +80,6 @@ import com.google.common.eventbus.Subscribe;
 import com.google.gson.Gson;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 import junit.framework.Assert;
@@ -146,9 +150,9 @@ public class AlertDataManagerTest {
   }
 
   @After
-  public void teardown() {
+  public void teardown() throws AmbariException, SQLException {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
     m_injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
index 9dc405e..76146b5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.state.cluster;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -27,6 +28,7 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.events.listeners.upgrade.HostVersionOutOfSyncListener;
@@ -60,7 +62,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -147,8 +148,8 @@ public class ClusterDeadlockTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
index 401527a..3172571 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterImplTest.java
@@ -29,10 +29,13 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.HostNotFoundException;
 import org.apache.ambari.server.controller.AmbariSessionManager;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -44,6 +47,7 @@ import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentHost;
 import org.apache.ambari.server.state.StackId;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -59,11 +63,16 @@ public class ClusterImplTest {
 
   @BeforeClass
   public static void setUpClass() throws Exception {
-    Injector injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    injector = Guice.createInjector(new InMemoryDefaultTestModule());
     injector.getInstance(GuiceJpaInitializer.class);
     clusters = injector.getInstance(Clusters.class);
   }
 
+  @AfterClass
+  public static void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   @Test
   public void testAddSessionAttributes() throws Exception {
     Map<String, Object> attributes = new HashMap<String, Object>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index 44c5f29..6cdfbad 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.lang.reflect.Field;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -48,6 +49,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.RollbackException;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.agent.AgentEnv;
 import org.apache.ambari.server.agent.AgentEnv.Directory;
 import org.apache.ambari.server.agent.DiskInfo;
@@ -123,7 +125,6 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Singleton;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 import com.google.inject.persist.UnitOfWork;
 import com.google.inject.util.Modules;
@@ -214,9 +215,9 @@ public class ClusterTest {
   }
 
   @After
-  public void teardown() {
+  public void teardown() throws AmbariException, SQLException {
     injector.getInstance(UnitOfWork.class).end();
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private void createDefaultCluster() throws Exception {
@@ -354,7 +355,7 @@ public class ClusterTest {
     clusters.addCluster(clusterName, stackId);
     Cluster cluster = clusters.getCluster(clusterName);
     Assert.assertEquals(clusterName, cluster.getClusterName());
-    Assert.assertEquals(1, cluster.getClusterId());
+    //Assert.assertEquals(1, cluster.getClusterId());
 
     // Add Hosts
     List<String> hostNames = new ArrayList<String>() {{ add("h-1"); add("h-2"); add("h-3"); }};
@@ -981,6 +982,7 @@ public class ClusterTest {
     res = c1.getDesiredConfigByType("core-site");
     Assert.assertNull("Expected null config", res);
 
+    Thread.sleep(1);
     c1.addDesiredConfig("_test", Collections.singleton(config2));
     res = c1.getDesiredConfigByType("global");
     Assert.assertEquals("Expected version tag to be 'version2'", "version2", res.getTag());
@@ -1009,6 +1011,7 @@ public class ClusterTest {
     }
 
     c1.addDesiredConfig("_test1", Collections.singleton(config1));
+    Thread.sleep(1);
     c1.addDesiredConfig("_test3", Collections.singleton(config3));
 
     Map<String, DesiredConfig> desiredConfigs = c1.getDesiredConfigs();
@@ -1023,9 +1026,11 @@ public class ClusterTest {
     Assert.assertTrue("Expect no host-level overrides",
       (null == dc.getHostOverrides() || dc.getHostOverrides().size() == 0));
 
+    Thread.sleep(1);
     c1.addDesiredConfig("_test2", Collections.singleton(config2));
     Assert.assertEquals("_test2", c1.getDesiredConfigs().get(config2.getType()).getUser());
 
+    Thread.sleep(1);
     c1.addDesiredConfig("_test1", Collections.singleton(config1));
 
     // setup a host that also has a config override
@@ -2165,7 +2170,6 @@ public class ClusterTest {
     clusters.addCluster(clusterName, stackId);
     Cluster c1 = clusters.getCluster(clusterName);
     Assert.assertEquals(clusterName, c1.getClusterName());
-    Assert.assertEquals(1, c1.getClusterId());
 
     clusters.addHost("h-1");
     clusters.addHost("h-2");
@@ -2234,7 +2238,6 @@ public class ClusterTest {
     clusters.addCluster(clusterName, stackId);
     final Cluster c1 = clusters.getCluster(clusterName);
     Assert.assertEquals(clusterName, c1.getClusterName());
-    Assert.assertEquals(1, c1.getClusterId());
 
     clusters.addHost("h-1");
     clusters.addHost("h-2");

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
index 27e6e13..2f289bb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.state.cluster;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -26,6 +27,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.events.listeners.upgrade.HostVersionOutOfSyncListener;
@@ -55,7 +57,6 @@ import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 import junit.framework.Assert;
@@ -120,8 +121,8 @@ public class ClustersDeadlockTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**


[03/50] [abbrv] ambari git commit: AMBARI-19780. Hive View : Logs are not complete for hive view. (gauravn7)

Posted by nc...@apache.org.
AMBARI-19780. Hive View : Logs are not complete for hive view. (gauravn7)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 0dfe8b6c9792aa2d40d8ecaa75f0256e9820eb89
Parents: 01f4a69
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Wed Feb 1 12:37:21 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Wed Feb 1 12:37:21 2017 +0530

----------------------------------------------------------------------
 .../ambari/view/hive2/actor/LogAggregator.java    | 18 ++++++++++++------
 .../view/hive2/actor/StatementExecutor.java       |  9 ++++++---
 .../hive2/actor/message/StartLogAggregation.java  | 10 +++++++++-
 .../ambari/view/hive20/actor/LogAggregator.java   | 18 ++++++++++++------
 .../view/hive20/actor/StatementExecutor.java      | 10 +++++++---
 .../hive20/actor/message/StartLogAggregation.java | 10 +++++++++-
 6 files changed, 55 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0dfe8b6c/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/LogAggregator.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/LogAggregator.java b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/LogAggregator.java
index 9412f81..69b4a56 100644
--- a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/LogAggregator.java
+++ b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/LogAggregator.java
@@ -29,6 +29,7 @@ import org.apache.ambari.view.hive2.actor.message.StartLogAggregation;
 import org.apache.ambari.view.utils.hdfs.HdfsApi;
 import org.apache.ambari.view.utils.hdfs.HdfsApiException;
 import org.apache.ambari.view.utils.hdfs.HdfsUtil;
+import org.apache.commons.lang.StringUtils;
 import org.apache.hive.jdbc.HiveStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,17 +48,17 @@ public class LogAggregator extends HiveActor {
 
   public static final int AGGREGATION_INTERVAL = 5 * 1000;
   private final HdfsApi hdfsApi;
-  private final HiveStatement statement;
+  private HiveStatement statement;
   private final String logFile;
 
   private Cancellable moreLogsScheduler;
   private ActorRef parent;
   private boolean hasStartedFetching = false;
   private boolean shouldFetchMore = true;
+  private String allLogs = "";
 
-  public LogAggregator(HdfsApi hdfsApi, HiveStatement statement, String logFile) {
+  public LogAggregator(HdfsApi hdfsApi, String logFile) {
     this.hdfsApi = hdfsApi;
-    this.statement = statement;
     this.logFile = logFile;
   }
 
@@ -65,7 +66,7 @@ public class LogAggregator extends HiveActor {
   public void handleMessage(HiveMessage hiveMessage) {
     Object message = hiveMessage.getMessage();
     if (message instanceof StartLogAggregation) {
-      start();
+      start((StartLogAggregation) message);
     }
 
     if (message instanceof GetMoreLogs) {
@@ -79,10 +80,15 @@ public class LogAggregator extends HiveActor {
     }
   }
 
-  private void start() {
+  private void start(StartLogAggregation message) {
+    this.statement = message.getHiveStatement();
     parent = this.getSender();
     hasStartedFetching = false;
     shouldFetchMore = true;
+    String logTitle = "Logs for Query '" + message.getStatement() + "'";
+    String repeatSeperator = StringUtils.repeat("=", logTitle.length());
+    allLogs += String.format("\n\n%s\n%s\n%s\n", repeatSeperator, logTitle, repeatSeperator);
+
     if (!(moreLogsScheduler == null || moreLogsScheduler.isCancelled())) {
       moreLogsScheduler.cancel();
     }
@@ -94,7 +100,7 @@ public class LogAggregator extends HiveActor {
   private void getMoreLogs() throws SQLException, HdfsApiException {
     List<String> logs = statement.getQueryLog();
     if (logs.size() > 0 && shouldFetchMore) {
-      String allLogs = Joiner.on("\n").skipNulls().join(logs);
+      allLogs = allLogs + "\n" + Joiner.on("\n").skipNulls().join(logs);
       HdfsUtil.putStringToFile(hdfsApi, logFile, allLogs);
       if(!statement.hasMoreLogs()) {
         shouldFetchMore = false;

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dfe8b6c/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/StatementExecutor.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/StatementExecutor.java b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/StatementExecutor.java
index d7b4f54..6cdee81 100644
--- a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/StatementExecutor.java
+++ b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/StatementExecutor.java
@@ -96,7 +96,6 @@ public class StatementExecutor extends HiveActor {
       LOG.error("Failed to execute statement: {}. {}", message.getStatement(), e);
       sender().tell(new ResultInformation(message.getId(), new Failure("Failed to execute statement: " + message.getStatement(), e)), self());
     } finally {
-      stopLogAggregation();
       stopGUIDFetch();
     }
   }
@@ -120,11 +119,11 @@ public class StatementExecutor extends HiveActor {
   private void startLogAggregation(HiveStatement statement, String sqlStatement, String logFile) {
     if (logAggregator == null) {
       logAggregator = getContext().actorOf(
-        Props.create(LogAggregator.class, hdfsApi, statement, logFile)
+        Props.create(LogAggregator.class, hdfsApi, logFile)
           .withDispatcher("akka.actor.misc-dispatcher"), "LogAggregator:" + UUID.randomUUID().toString());
     }
     LOG.info("Fetching query logs for statement: {}", sqlStatement);
-    logAggregator.tell(new StartLogAggregation(sqlStatement), getSelf());
+    logAggregator.tell(new StartLogAggregation(sqlStatement, statement), getSelf());
   }
 
   private void stopLogAggregation() {
@@ -134,6 +133,10 @@ public class StatementExecutor extends HiveActor {
     logAggregator = null;
   }
 
+  @Override
+  public void postStop() throws Exception {
+    stopLogAggregation();
+  }
 
   private void getColumnMetaData(GetColumnMetadataJob message) {
     try {

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dfe8b6c/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/message/StartLogAggregation.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/message/StartLogAggregation.java b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/message/StartLogAggregation.java
index b56da08..48fbced 100644
--- a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/message/StartLogAggregation.java
+++ b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/actor/message/StartLogAggregation.java
@@ -18,14 +18,22 @@
 
 package org.apache.ambari.view.hive2.actor.message;
 
+import org.apache.hive.jdbc.HiveStatement;
+
 public class StartLogAggregation {
   private String statement;
+  private HiveStatement hiveStatement;
 
   public StartLogAggregation() {
   }
 
-  public StartLogAggregation(String statement) {
+  public StartLogAggregation(String statement, HiveStatement hiveStatement) {
     this.statement = statement;
+    this.hiveStatement = hiveStatement;
+  }
+
+  public HiveStatement getHiveStatement() {
+    return hiveStatement;
   }
 
   public String getStatement() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dfe8b6c/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/LogAggregator.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/LogAggregator.java b/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/LogAggregator.java
index f9c21b4..600ea64 100644
--- a/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/LogAggregator.java
+++ b/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/LogAggregator.java
@@ -28,6 +28,7 @@ import org.apache.ambari.view.hive20.actor.message.StartLogAggregation;
 import org.apache.ambari.view.utils.hdfs.HdfsApi;
 import org.apache.ambari.view.utils.hdfs.HdfsApiException;
 import org.apache.ambari.view.utils.hdfs.HdfsUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hive.jdbc.HiveStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,17 +47,17 @@ public class LogAggregator extends HiveActor {
 
   public static final int AGGREGATION_INTERVAL = 5 * 1000;
   private final HdfsApi hdfsApi;
-  private final HiveStatement statement;
+  private HiveStatement statement;
   private final String logFile;
 
   private Cancellable moreLogsScheduler;
   private ActorRef parent;
   private boolean hasStartedFetching = false;
   private boolean shouldFetchMore = true;
+  private String allLogs = "";
 
-  public LogAggregator(HdfsApi hdfsApi, HiveStatement statement, String logFile) {
+  public LogAggregator(HdfsApi hdfsApi, String logFile) {
     this.hdfsApi = hdfsApi;
-    this.statement = statement;
     this.logFile = logFile;
   }
 
@@ -64,7 +65,7 @@ public class LogAggregator extends HiveActor {
   public void handleMessage(HiveMessage hiveMessage) {
     Object message = hiveMessage.getMessage();
     if (message instanceof StartLogAggregation) {
-      start();
+      start((StartLogAggregation) message);
     }
 
     if (message instanceof GetMoreLogs) {
@@ -79,10 +80,15 @@ public class LogAggregator extends HiveActor {
     }
   }
 
-  private void start() {
+  private void start(StartLogAggregation message) {
+    this.statement = message.getHiveStatement();
     parent = this.getSender();
     hasStartedFetching = false;
     shouldFetchMore = true;
+    String logTitle = "Logs for Query '" + message.getStatement() + "'";
+    String repeatSeperator = StringUtils.repeat("=", logTitle.length());
+    allLogs += String.format("\n\n%s\n%s\n%s\n", repeatSeperator, logTitle, repeatSeperator);
+
     if (!(moreLogsScheduler == null || moreLogsScheduler.isCancelled())) {
       moreLogsScheduler.cancel();
     }
@@ -94,7 +100,7 @@ public class LogAggregator extends HiveActor {
   private void getMoreLogs() throws SQLException, HdfsApiException {
     List<String> logs = statement.getQueryLog();
     if (logs.size() > 0 && shouldFetchMore) {
-      String allLogs = Joiner.on("\n").skipNulls().join(logs);
+      allLogs = allLogs + "\n" + Joiner.on("\n").skipNulls().join(logs);
       HdfsUtil.putStringToFile(hdfsApi, logFile, allLogs);
       if(!statement.hasMoreLogs()) {
         shouldFetchMore = false;

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dfe8b6c/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/StatementExecutor.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/StatementExecutor.java b/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/StatementExecutor.java
index 03332d9..c3ed14b 100644
--- a/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/StatementExecutor.java
+++ b/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/StatementExecutor.java
@@ -96,7 +96,6 @@ public class StatementExecutor extends HiveActor {
       LOG.error("Failed to execute statement: {}. {}", message.getStatement(), e);
       sender().tell(new ResultInformation(message.getId(), new Failure("Failed to execute statement: " + message.getStatement(), e)), self());
     } finally {
-      stopLogAggregation();
       stopGUIDFetch();
     }
   }
@@ -120,11 +119,11 @@ public class StatementExecutor extends HiveActor {
   private void startLogAggregation(HiveStatement statement, String sqlStatement, String logFile) {
     if (logAggregator == null) {
       logAggregator = getContext().actorOf(
-        Props.create(LogAggregator.class, hdfsApi, statement, logFile)
+        Props.create(LogAggregator.class, hdfsApi, logFile)
           .withDispatcher("akka.actor.misc-dispatcher"), "LogAggregator:" + UUID.randomUUID().toString());
     }
     LOG.info("Fetching query logs for statement: {}", sqlStatement);
-    logAggregator.tell(new StartLogAggregation(sqlStatement), getSelf());
+    logAggregator.tell(new StartLogAggregation(sqlStatement, statement), getSelf());
   }
 
   private void stopLogAggregation() {
@@ -134,6 +133,11 @@ public class StatementExecutor extends HiveActor {
     logAggregator = null;
   }
 
+  @Override
+  public void postStop() throws Exception {
+    stopLogAggregation();
+  }
+
 
   private void getColumnMetaData(GetColumnMetadataJob message) {
     try {

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dfe8b6c/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/message/StartLogAggregation.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/message/StartLogAggregation.java b/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/message/StartLogAggregation.java
index 922ad1d..8aab04f 100644
--- a/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/message/StartLogAggregation.java
+++ b/contrib/views/hive20/src/main/java/org/apache/ambari/view/hive20/actor/message/StartLogAggregation.java
@@ -18,14 +18,22 @@
 
 package org.apache.ambari.view.hive20.actor.message;
 
+import org.apache.hive.jdbc.HiveStatement;
+
 public class StartLogAggregation {
   private String statement;
+  private HiveStatement hiveStatement;
 
   public StartLogAggregation() {
   }
 
-  public StartLogAggregation(String statement) {
+  public StartLogAggregation(String statement, HiveStatement hiveStatement) {
     this.statement = statement;
+    this.hiveStatement = hiveStatement;
+  }
+
+  public HiveStatement getHiveStatement() {
+    return hiveStatement;
   }
 
   public String getStatement() {


[02/50] [abbrv] ambari git commit: AMBARI-19755. Test Fix. Perf: start/stop all actions works much slower after few days of testing.(vbrodetskyi)

Posted by nc...@apache.org.
AMBARI-19755. Test Fix. Perf: start/stop all actions works much slower after few days of testing.(vbrodetskyi)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 01f4a69e2ecc266d839713a53e428350cddcbc69
Parents: cc42c95
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Wed Feb 1 01:39:36 2017 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Wed Feb 1 01:39:36 2017 +0200

----------------------------------------------------------------------
 .../org/apache/ambari/server/state/cluster/ClusterImpl.java    | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/01f4a69e/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index e124576..2a66795 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -2894,13 +2894,13 @@ public class ClusterImpl implements Cluster {
 
     Service service = clusterServices.get(serviceName);
     Map<String, ServiceComponent> components = service.getServiceComponents();
-    Map<String, ServiceComponentHost> serviceComponentHosts = components.get(componentName).getServiceComponentHosts();
 
-    if (!components.containsKey(componentName) || serviceComponentHosts.size() == 0) {
+    if (!components.containsKey(componentName) ||
+            components.get(componentName).getServiceComponentHosts().size() == 0) {
       return Collections.emptySet();
     }
 
-    return serviceComponentHosts.keySet();
+    return components.get(componentName).getServiceComponentHosts().keySet();
   }
 
   @Override


[23/50] [abbrv] ambari git commit: AMBARI-19809. HDP 3.0 TP - failed to deploy YARN configs because yarn-site creates conflicts since should not belong to MAPREDUCE2 (alejandro)

Posted by nc...@apache.org.
AMBARI-19809. HDP 3.0 TP - failed to deploy YARN configs because yarn-site creates conflicts since should not belong to MAPREDUCE2 (alejandro)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: c744cac60ebe0ae4046278f7ef78fe20d0872b0e
Parents: e406234
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Tue Jan 31 15:49:52 2017 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Wed Feb 1 17:12:53 2017 -0800

----------------------------------------------------------------------
 .../main/resources/common-services/YARN/3.0.0.3.0/metainfo.xml  | 1 -
 .../resources/common-services/YARN/3.0.0.3.0/service_advisor.py | 5 +++--
 .../main/resources/stacks/HDP/3.0/services/YARN/metainfo.xml    | 2 ++
 3 files changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c744cac6/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/metainfo.xml b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/metainfo.xml
index a094cba..14eae07 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/metainfo.xml
@@ -381,7 +381,6 @@
         <config-type>hdfs-site</config-type>
         <config-type>hadoop-env</config-type>
         <config-type>core-site</config-type>
-        <config-type>yarn-site</config-type>
         <config-type>mapred-site</config-type>
         <config-type>mapred-env</config-type>
         <config-type>ssl-client</config-type>

http://git-wip-us.apache.org/repos/asf/ambari/blob/c744cac6/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
index cd35b68..44bdf80 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
@@ -454,7 +454,7 @@ class YARNRecommender(service_advisor.ServiceAdvisor):
 
       Note: All memory calculations are in MB, unless specified otherwise.
     """
-    Logger.info("DBG: Entered updateLlapConfigs");
+    Logger.info("DBG: Entered updateLlapConfigs")
     putHiveInteractiveSiteProperty = self.putProperty(configurations, YARNRecommender.HIVE_INTERACTIVE_SITE, services)
     putHiveInteractiveSitePropertyAttribute = self.putPropertyAttribute(configurations, YARNRecommender.HIVE_INTERACTIVE_SITE)
     putHiveInteractiveEnvProperty = self.putProperty(configurations, "hive-interactive-env", services)
@@ -1530,7 +1530,8 @@ class MAPREDUCE2Recommender(YARNRecommender):
 
   def recommendMapReduce2ConfigurationsFromHDP22(self, configurations, clusterData, services, hosts):
     # Needs to be able to access yarn-site
-    # TODO, this is a hack that was introduced in 2015. =
+    # TODO, this is a hack that was introduced in 2015. The yarn-site configs will not actually be saved
+    # as part of MAPREDUCE2 because yarn-site doesn't belong to it according to its metainfo.xml
     # MAPREDUCE2 Recommender first needs to call all methods from YARN Recommender
     self.recommendYARNConfigurationsFromHDP206(configurations, clusterData, services, hosts)
     self.recommendYARNConfigurationsFromHDP22(configurations, clusterData, services, hosts)

http://git-wip-us.apache.org/repos/asf/ambari/blob/c744cac6/ambari-server/src/main/resources/stacks/HDP/3.0/services/YARN/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/3.0/services/YARN/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/3.0/services/YARN/metainfo.xml
index 41fe13d..2a5121a 100644
--- a/ambari-server/src/main/resources/stacks/HDP/3.0/services/YARN/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/3.0/services/YARN/metainfo.xml
@@ -57,6 +57,8 @@
       <displayName>MapReduce2</displayName>
       <version>3.0.0.3.0</version>
       <extends>common-services/MAPREDUCE2/3.0.0.3.0</extends>
+      
+      <configuration-dir>configuration-mapred</configuration-dir>
 
       <osSpecifics>
         <osSpecific>


[47/50] [abbrv] ambari git commit: AMBARI-19824. Add consistency checker for blueprint tables (magyari_sandor)

Posted by nc...@apache.org.
AMBARI-19824. Add consistency checker for blueprint tables (magyari_sandor)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 4ad3a2b3611a38aeea3d64411feec8776a6af554
Parents: 779995d
Author: Sandor Magyari <sm...@hortonworks.com>
Authored: Thu Feb 2 00:11:15 2017 +0100
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Fri Feb 3 13:47:01 2017 +0200

----------------------------------------------------------------------
 .../checks/DatabaseConsistencyCheckHelper.java  | 78 ++++++++++++++++++++
 .../DatabaseConsistencyCheckHelperTest.java     | 58 +++++++++++++++
 2 files changed, 136 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4ad3a2b3/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
index ea5fa15..7aa8652 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
@@ -137,6 +137,7 @@ public class DatabaseConsistencyCheckHelper {
     checkForHostsWithoutState();
     checkHostComponentStates();
     checkServiceConfigs();
+    checkTopologyTables();
     LOG.info("******************************* Check database completed *******************************");
   }
 
@@ -342,6 +343,83 @@ public class DatabaseConsistencyCheckHelper {
     }
   }
 
+
+  /**
+   * This method checks that for each row in topology_request there is at least one row in topology_logical_request,
+   * topology_host_request, topology_host_task, topology_logical_task.
+   * */
+  public static void checkTopologyTables() {
+    LOG.info("Checking Topology tables");
+
+    String SELECT_REQUEST_COUNT_QUERY = "select count(tpr.id) from topology_request tpr";
+
+    String SELECT_JOINED_COUNT_QUERY = "select count(DISTINCT tpr.id) from topology_request tpr join " +
+      "topology_logical_request tlr on tpr.id = tlr.request_id join topology_host_request thr on tlr.id = " +
+      "thr.logical_request_id join topology_host_task tht on thr.id = tht.host_request_id join topology_logical_task " +
+      "tlt on tht.id = tlt.host_task_id";
+
+    int topologyRequestCount = 0;
+    int topologyRequestTablesJoinedCount = 0;
+
+    ResultSet rs = null;
+    Statement statement = null;
+
+    if (connection == null) {
+      if (dbAccessor == null) {
+        dbAccessor = injector.getInstance(DBAccessor.class);
+      }
+      connection = dbAccessor.getConnection();
+    }
+
+    try {
+      statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
+
+      rs = statement.executeQuery(SELECT_REQUEST_COUNT_QUERY);
+      if (rs != null) {
+        while (rs.next()) {
+          topologyRequestCount = rs.getInt(1);
+        }
+      }
+
+      rs = statement.executeQuery(SELECT_JOINED_COUNT_QUERY);
+      if (rs != null) {
+        while (rs.next()) {
+          topologyRequestTablesJoinedCount = rs.getInt(1);
+        }
+      }
+
+      if (topologyRequestCount != topologyRequestTablesJoinedCount) {
+        LOG.error("Your topology request hierarchy is not complete for each row in topology_request should exist " +
+          "at least one raw in topology_logical_request, topology_host_request, topology_host_task, " +
+          "topology_logical_task.");
+        errorsFound = true;
+      }
+
+
+    } catch (SQLException e) {
+      LOG.error("Exception occurred during topology request tables check: ", e);
+    } finally {
+      if (rs != null) {
+        try {
+          rs.close();
+        } catch (SQLException e) {
+          LOG.error("Exception occurred during result set closing procedure: ", e);
+        }
+      }
+
+      if (statement != null) {
+        try {
+          statement.close();
+        } catch (SQLException e) {
+          LOG.error("Exception occurred during statement closing procedure: ", e);
+        }
+      }
+    }
+
+  }
+
+
+
   /**
   * This method checks if count of host component states equals count
   * of desired host component states. According to ambari logic these

http://git-wip-us.apache.org/repos/asf/ambari/blob/4ad3a2b3/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
index cf0854d..f73562d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
@@ -172,6 +172,64 @@ public class DatabaseConsistencyCheckHelperTest {
   }
 
   @Test
+  public void testCheckTopologyTablesAreConsistent() throws Exception {
+    testCheckTopologyTablesConsistent(2);
+    Assert.assertTrue(!DatabaseConsistencyCheckHelper.ifErrorsFound());
+  }
+
+  @Test
+  public void testCheckTopologyTablesAreNotConsistent() throws Exception {
+    testCheckTopologyTablesConsistent(1);
+    Assert.assertTrue(DatabaseConsistencyCheckHelper.ifErrorsFound());
+  }
+
+  private void testCheckTopologyTablesConsistent(int resultCount) throws Exception {
+    EasyMockSupport easyMockSupport = new EasyMockSupport();
+
+    final DBAccessor mockDBDbAccessor = easyMockSupport.createNiceMock(DBAccessor.class);
+    final Connection mockConnection = easyMockSupport.createNiceMock(Connection.class);
+    final ResultSet mockCountResultSet = easyMockSupport.createNiceMock(ResultSet.class);
+    final ResultSet mockJoinResultSet = easyMockSupport.createNiceMock(ResultSet.class);
+    final Statement mockStatement = easyMockSupport.createNiceMock(Statement.class);
+
+    final StackManagerFactory mockStackManagerFactory = easyMockSupport.createNiceMock(StackManagerFactory.class);
+    final EntityManager mockEntityManager = easyMockSupport.createNiceMock(EntityManager.class);
+    final Clusters mockClusters = easyMockSupport.createNiceMock(Clusters.class);
+    final OsFamily mockOSFamily = easyMockSupport.createNiceMock(OsFamily.class);
+    final Injector mockInjector = Guice.createInjector(new AbstractModule() {
+      @Override
+      protected void configure() {
+
+        bind(StackManagerFactory.class).toInstance(mockStackManagerFactory);
+        bind(EntityManager.class).toInstance(mockEntityManager);
+        bind(DBAccessor.class).toInstance(mockDBDbAccessor);
+        bind(Clusters.class).toInstance(mockClusters);
+        bind(OsFamily.class).toInstance(mockOSFamily);
+      }
+    });
+
+    expect(mockConnection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)).andReturn(mockStatement);
+    expect(mockCountResultSet.next()).andReturn(true).once();
+    expect(mockCountResultSet.getInt(1)).andReturn(2);
+    expect(mockJoinResultSet.next()).andReturn(true).once();
+    expect(mockJoinResultSet.getInt(1)).andReturn(resultCount);
+    expect(mockStatement.executeQuery("select count(tpr.id) from topology_request tpr")).andReturn(mockCountResultSet);
+    expect(mockStatement.executeQuery("select count(DISTINCT tpr.id) from topology_request tpr join " +
+      "topology_logical_request tlr on tpr.id = tlr.request_id join topology_host_request thr on tlr.id = thr.logical_request_id join topology_host_task tht on thr.id = tht.host_request_id join topology_logical_task tlt on tht.id = tlt.host_task_id")).andReturn(mockJoinResultSet);
+
+    DatabaseConsistencyCheckHelper.setInjector(mockInjector);
+    DatabaseConsistencyCheckHelper.setConnection(mockConnection);
+
+    easyMockSupport.replayAll();
+
+
+    DatabaseConsistencyCheckHelper.checkTopologyTables();
+
+    easyMockSupport.verifyAll();
+
+  }
+
+  @Test
   public void testCheckHostComponentStatesCountEqualsHostComponentsDesiredStates() throws Exception {
     EasyMockSupport easyMockSupport = new EasyMockSupport();
 


[22/50] [abbrv] ambari git commit: ADDENDUM. AMBARI-19814. Backend path for 'num_llap_nodes' should show up as non-editable property when non-ambari managed queue is selected.

Posted by nc...@apache.org.
ADDENDUM. AMBARI-19814. Backend path for 'num_llap_nodes' should show up as non-editable property when non-ambari managed queue is selected.


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: e406234a7dcc1f11f9f13c8e40fd64187e20eaf8
Parents: c10fcc8
Author: Swapan Shridhar <ss...@hortonworks.com>
Authored: Wed Feb 1 17:08:41 2017 -0800
Committer: Swapan Shridhar <ss...@hortonworks.com>
Committed: Wed Feb 1 17:08:41 2017 -0800

----------------------------------------------------------------------
 .../stacks/HDP/2.5/services/stack_advisor.py    | 12 ++++-----
 .../stacks/2.5/common/test_stack_advisor.py     | 28 ++++++++++----------
 2 files changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e406234a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
index bf86cd5..aa47493 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
@@ -710,9 +710,9 @@ class HDP25StackAdvisor(HDP24StackAdvisor):
             putHiveInteractiveSiteProperty("hive.server2.tez.default.queues", hive_tez_default_queue)
             Logger.debug("Updated 'hive.server2.tez.default.queues' config : '{0}'".format(hive_tez_default_queue))
     else:
-      Logger.info("DBG: Setting visibility for num_llap_nodes to false")
+      Logger.info("DBG: Setting 'num_llap_nodes' config's  READ ONLY attribute as 'True'.")
       putHiveInteractiveEnvProperty('enable_hive_interactive', 'false')
-      putHiveInteractiveEnvPropertyAttribute("num_llap_nodes", "visible", "false")
+      putHiveInteractiveEnvPropertyAttribute("num_llap_nodes", "read_only", "true")
 
     if hsi_properties and "hive.llap.zk.sm.connectionString" in hsi_properties:
       zookeeper_host_port = self.getZKHostPortString(services)
@@ -831,14 +831,14 @@ class HDP25StackAdvisor(HDP24StackAdvisor):
       if (len(leafQueueNames) == 2 and (llap_daemon_selected_queue_name and llap_daemon_selected_queue_name == llap_queue_name) or
         llap_named_queue_selected_in_curr_invocation) or \
         (len(leafQueueNames) == 1 and llap_daemon_selected_queue_name == 'default' and llap_named_queue_selected_in_curr_invocation):
-          Logger.info("Setting visibility of num_llap_nodes to true.")
-          putHiveInteractiveEnvPropertyAttribute("num_llap_nodes", "visible", "true")
+          Logger.info("DBG: Setting 'num_llap_nodes' config's  READ ONLY attribute as 'False'.")
+          putHiveInteractiveEnvPropertyAttribute("num_llap_nodes", "read_only", "false")
           selected_queue_is_ambari_managed_llap = True
           Logger.info("DBG: Selected YARN queue for LLAP is : '{0}'. Current YARN queues : {1}. Setting 'Number of LLAP nodes' "
                         "slider visibility to 'True'".format(llap_queue_name, list(leafQueueNames)))
       else:
-        Logger.info("Setting visibility of num_llap_nodes to false.")
-        putHiveInteractiveEnvPropertyAttribute("num_llap_nodes", "visible", "false")
+        Logger.info("DBG: Setting 'num_llap_nodes' config's  READ ONLY attribute as 'True'.")
+        putHiveInteractiveEnvPropertyAttribute("num_llap_nodes", "read_only", "true")
         Logger.info("Selected YARN queue for LLAP is : '{0}'. Current YARN queues : {1}. Setting 'Number of LLAP nodes' "
                      "visibility to 'False'.".format(llap_daemon_selected_queue_name, list(leafQueueNames)))
         selected_queue_is_ambari_managed_llap = False

http://git-wip-us.apache.org/repos/asf/ambari/blob/e406234a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
index fe58217..9029dbb 100644
--- a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
@@ -1182,7 +1182,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '819')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'visible': 'true', 'minimum': '1', 'maximum': '1'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'read_only': 'false', 'minimum': '1', 'maximum': '1'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '512')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -1379,7 +1379,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '819')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'visible': 'false', 'minimum': '1', 'maximum': '1'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'read_only': 'true', 'minimum': '1', 'maximum': '1'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '341')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.auto.convert.join.noconditionaltask.size'], '286261248')
@@ -1572,7 +1572,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '1638')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'visible': 'true', 'minimum': '1', 'maximum': '1'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'read_only': 'false', 'minimum': '1', 'maximum': '1'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '1024')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -1773,7 +1773,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '6553')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '3', 'minimum': '1', 'visible': 'true'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '3', 'minimum': '1', 'read_only': 'false'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -1971,7 +1971,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '4915')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '3', 'minimum': '1', 'visible': 'true'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '3', 'minimum': '1', 'read_only': 'false'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '341')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -2167,7 +2167,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '4915')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '3', 'minimum': '1', 'visible': 'true'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '3', 'minimum': '1', 'read_only': 'false'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -2370,7 +2370,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '6553')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'visible': 'true'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'read_only': 'false'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '3072')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -2567,7 +2567,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '16384')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'visible': 'true'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'read_only': 'false'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '341')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -2760,7 +2760,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '4915')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'visible': 'true'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'read_only': 'false'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
@@ -2951,7 +2951,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '4915')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'visible': 'false'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'read_only': 'true'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.auto.convert.join.noconditionaltask.size'], '572522496')
@@ -3173,7 +3173,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '4915')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'visible': 'false'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '5', 'minimum': '1', 'read_only': 'true'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '512')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.auto.convert.join.noconditionaltask.size'], '572522496')
@@ -3396,7 +3396,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '1024')
     self.assertEquals(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'],
-                      {'maximum': '5', 'minimum': '1', 'visible': 'false'})
+                      {'maximum': '5', 'minimum': '1', 'read_only': 'true'})
 
     self.assertTrue('tez.am.resource.memory.mb' not in configurations['tez-interactive-site']['properties'])
 
@@ -3580,7 +3580,7 @@ class TestHDP25StackAdvisor(TestCase):
                       self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'])
     self.assertEquals(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap')
     self.assertEquals(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'],
-                      {'maximum': '1', 'minimum': '1', 'visible': 'true'})
+                      {'maximum': '1', 'minimum': '1', 'read_only': 'false'})
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '0')
 
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '0')
@@ -3773,7 +3773,7 @@ class TestHDP25StackAdvisor(TestCase):
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '4915')
     self.assertEqual(configurations['hive-interactive-env']['properties']['hive_heapsize'], '2048')
-    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '1', 'minimum': '1', 'visible': 'false'})
+    self.assertEqual(configurations['hive-interactive-env']['property_attributes']['num_llap_nodes'], {'maximum': '1', 'minimum': '1', 'read_only': 'true'})
 
     self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048')
     self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'default')


[12/50] [abbrv] ambari git commit: AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. (mpapirkovskyy)

Posted by nc...@apache.org.
AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. (mpapirkovskyy)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 3a7906c84737511475e718a0da50397b31ef7b52
Parents: 727a318
Author: Myroslav Papirkovskyi <mp...@hortonworks.com>
Authored: Tue Jan 31 17:54:23 2017 +0200
Committer: Myroslav Papirkovskyi <mp...@hortonworks.com>
Committed: Wed Feb 1 16:44:47 2017 +0200

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 ambari-project/pom.xml                          |   2 +-
 ambari-server/pom.xml                           |  12 +-
 .../ambari/server/agent/HeartBeatHandler.java   |   4 +
 .../server/configuration/Configuration.java     |  40 +++-
 .../server/controller/ControllerModule.java     |   5 +-
 .../apache/ambari/server/orm/DBAccessor.java    |   1 +
 .../ambari/server/orm/DBAccessorImpl.java       |   5 +
 .../server/orm/entities/UpgradeEntity.java      |   2 +-
 .../server/orm/helpers/dbms/H2Helper.java       |  74 +++++++
 .../src/main/resources/META-INF/persistence.xml |  12 +-
 .../apache/ambari/annotations/LockAreaTest.java |   7 +-
 .../TransactionalLockInterceptorTest.java       |   7 +-
 .../apache/ambari/server/H2DatabaseCleaner.java | 124 +++++++++++
 .../ambari/server/StateRecoveryManagerTest.java |   6 +-
 .../ExecutionCommandWrapperTest.java            |   8 +
 .../ambari/server/actionmanager/StageTest.java  |  11 +-
 .../actionmanager/TestActionDBAccessorImpl.java |   8 +-
 .../server/actionmanager/TestActionManager.java |   9 +-
 .../actionmanager/TestActionScheduler.java      |   7 +-
 .../TestActionSchedulerThreading.java           |   8 +-
 .../ambari/server/actionmanager/TestStage.java  |   9 +
 .../server/agent/HeartbeatProcessorTest.java    |  10 +-
 .../server/agent/TestHeartbeatHandler.java      |   5 +-
 .../server/agent/TestHeartbeatMonitor.java      |   7 +-
 .../server/api/query/JpaSortBuilderTest.java    |   7 +
 .../server/api/services/AmbariMetaInfoTest.java |  12 +-
 .../api/services/PersistKeyValueImplTest.java   |   4 +-
 .../server/api/services/PersistServiceTest.java |   4 +-
 .../configuration/RecoveryConfigHelperTest.java |   4 +-
 .../AmbariCustomCommandExecutionHelperTest.java |   7 +-
 .../AmbariManagementControllerTest.java         |   7 +-
 .../server/controller/AmbariServerTest.java     |   5 +-
 .../BackgroundCustomCommandExecutionTest.java   |   7 +-
 ...hYarnCapacitySchedulerReleaseConfigTest.java |   7 +-
 .../RootServiceResponseFactoryTest.java         |   9 +
 .../internal/ActionResourceProviderTest.java    |   7 +-
 .../internal/AlertResourceProviderTest.java     |   4 +-
 .../internal/CalculatedStatusTest.java          |   8 +
 ...ClusterStackVersionResourceProviderTest.java | 214 ++++++++++---------
 ...leRepositoryVersionResourceProviderTest.java |   8 +-
 .../internal/ComponentResourceProviderTest.java |   2 +
 .../HostStackVersionResourceProviderTest.java   |   8 +-
 .../internal/JMXHostProviderTest.java           |   8 +-
 .../RepositoryVersionResourceProviderTest.java  |   8 +-
 .../StackArtifactResourceProviderTest.java      |   8 +-
 .../StackDefinedPropertyProviderTest.java       |   4 +-
 .../UpgradeResourceProviderHDP22Test.java       |   8 +-
 .../internal/UpgradeResourceProviderTest.java   |   9 +-
 .../UpgradeSummaryResourceProviderTest.java     |  10 +-
 .../internal/UserResourceProviderDBTest.java    |   7 +-
 .../VersionDefinitionResourceProviderTest.java  |   4 +-
 .../LogSearchDataRetrievalServiceTest.java      |   1 -
 .../RestMetricsPropertyProviderTest.java        |   9 +
 .../utilities/DatabaseCheckerTest.java          |   6 +-
 .../GeneralServiceCalculatedStateTest.java      |  10 +-
 .../apache/ambari/server/events/EventsTest.java |   6 +-
 .../HostVersionOutOfSyncListenerTest.java       |   7 +-
 .../metadata/AgentAlertDefinitionsTest.java     |  11 +
 .../server/metadata/RoleCommandOrderTest.java   |   7 +-
 .../ambari/server/metadata/RoleGraphTest.java   |   7 +-
 .../ambari/server/orm/DBAccessorImplTest.java   |  20 +-
 .../ambari/server/orm/JdbcPropertyTest.java     |   4 +-
 .../apache/ambari/server/orm/OrmTestHelper.java |  12 +-
 .../apache/ambari/server/orm/TestOrmImpl.java   |   8 +-
 .../server/orm/dao/AlertDefinitionDAOTest.java  |   6 +-
 .../server/orm/dao/AlertDispatchDAOTest.java    |   6 +-
 .../ambari/server/orm/dao/AlertsDAOTest.java    |   8 +-
 .../server/orm/dao/ClusterVersionDAOTest.java   |  12 +-
 .../server/orm/dao/ConfigGroupDAOTest.java      |  19 +-
 .../ambari/server/orm/dao/CrudDAOTest.java      |  11 +-
 .../orm/dao/HostConfigMappingDAOTest.java       |   7 +-
 .../server/orm/dao/HostRoleCommandDAOTest.java  |   9 +-
 .../server/orm/dao/HostVersionDAOTest.java      |  11 +-
 .../orm/dao/RepositoryVersionDAOTest.java       |   7 +-
 .../ambari/server/orm/dao/RequestDAOTest.java   |   7 +-
 .../server/orm/dao/RequestScheduleDAOTest.java  |   7 +-
 .../server/orm/dao/ServiceConfigDAOTest.java    |  64 ++++--
 .../ambari/server/orm/dao/SettingDAOTest.java   |   7 +
 .../ambari/server/orm/dao/StageDAOTest.java     |  10 +-
 .../orm/dao/TopologyLogicalRequestDAOTest.java  |   7 +-
 .../server/orm/dao/TopologyRequestDAOTest.java  |   7 +-
 .../ambari/server/orm/dao/UpgradeDAOTest.java   |   9 +-
 .../ambari/server/orm/dao/WidgetDAOTest.java    |   8 +-
 .../server/orm/dao/WidgetLayoutDAOTest.java     |   8 +-
 .../scheduler/ExecutionScheduleManagerTest.java |   4 +-
 .../server/security/AmbariLdapUtilsTest.java    |   1 -
 .../AmbariBasicAuthenticationFilterTest.java    |   6 +-
 ...uthenticationProviderForDNWithSpaceTest.java |   4 +-
 .../AmbariLdapAuthenticationProviderTest.java   |   4 +-
 .../AmbariLocalUserProviderTest.java            |   7 +
 .../AmbariPamAuthenticationProviderTest.java    |   4 +-
 .../security/authorization/TestUsers.java       |   7 +-
 .../security/ldap/LdapPerformanceTest.java      |   8 +
 .../serveraction/ServerActionExecutorTest.java  |  11 +-
 .../kerberos/KerberosServerActionTest.java      |   2 +-
 .../AutoSkipFailedSummaryActionTest.java        |   6 +-
 .../ComponentVersionCheckActionTest.java        |   6 +-
 .../upgrades/ConfigureActionTest.java           |   6 +-
 .../upgrades/UpgradeActionTest.java             |   6 +-
 .../server/stageplanner/TestStagePlanner.java   |   7 +-
 .../ambari/server/state/ConfigGroupTest.java    |  17 +-
 .../ambari/server/state/ConfigHelperTest.java   |   7 +-
 .../server/state/ConfigMergeHelperTest.java     |   8 +-
 .../server/state/RequestExecutionTest.java      |   4 +-
 .../server/state/ServiceComponentTest.java      |   7 +-
 .../apache/ambari/server/state/ServiceTest.java |   7 +-
 .../ambari/server/state/UpgradeHelperTest.java  |   9 +-
 .../alerts/AggregateAlertListenerTest.java      |   6 +-
 .../state/alerts/AlertEventPublisherTest.java   |  22 +-
 .../state/alerts/AlertReceivedListenerTest.java |  10 +-
 .../alerts/AlertStateChangedEventTest.java      |   4 +-
 .../state/alerts/InitialAlertEventTest.java     |   6 +-
 .../state/cluster/AlertDataManagerTest.java     |  10 +-
 .../state/cluster/ClusterDeadlockTest.java      |   7 +-
 .../server/state/cluster/ClusterImplTest.java   |  11 +-
 .../server/state/cluster/ClusterTest.java       |  15 +-
 .../state/cluster/ClustersDeadlockTest.java     |   7 +-
 .../server/state/cluster/ClustersTest.java      |   7 +-
 .../ConcurrentServiceConfigVersionTest.java     |   7 +-
 ...omponentHostConcurrentWriteDeadlockTest.java |   7 +-
 .../ambari/server/state/host/HostTest.java      |   9 +-
 .../services/RetryUpgradeActionServiceTest.java |   8 +
 .../state/stack/ConfigUpgradePackTest.java      |   8 +-
 .../state/stack/ConfigUpgradeValidityTest.java  |   8 +-
 .../ambari/server/state/stack/OSFamilyTest.java |  12 +-
 .../server/state/stack/UpgradePackTest.java     |   8 +-
 .../svccomphost/ServiceComponentHostTest.java   |   7 +-
 .../server/upgrade/StackUpgradeUtilTest.java    |   4 +-
 .../server/upgrade/UpgradeCatalog200Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog210Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog2121Test.java  |   8 +-
 .../server/upgrade/UpgradeCatalog212Test.java   |   7 +-
 .../server/upgrade/UpgradeCatalog220Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog240Test.java   |   8 +-
 .../server/upgrade/UpgradeCatalog242Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalogTest.java      |   6 +-
 pom.xml                                         |   2 +
 138 files changed, 1029 insertions(+), 469 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 43edfd9..a40e61a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@ ambari-metrics/ambari-metrics-host-monitoring/src/main/python/psutil/build/
 rebel.xml
 rebel-remote.xml
 out
+createDDL.jdbc

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-project/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml
index 0eab275..6e8ef0e 100644
--- a/ambari-project/pom.xml
+++ b/ambari-project/pom.xml
@@ -553,7 +553,7 @@
           <redirectTestOutputToFile>true</redirectTestOutputToFile>
           <forkedProcessTimeoutInSeconds>900</forkedProcessTimeoutInSeconds>
           <reuseForks>false</reuseForks>
-          <forkCount>1C</forkCount>
+          <forkCount>1</forkCount>
         </configuration>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index 90c6b61..a9518e1 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -272,7 +272,6 @@
         <configuration>
           <excludes>
             <exclude>pass.txt</exclude>
-            <exclude>derby.log</exclude>
             <exclude>src/test/resources/version</exclude>
             <exclude>src/test/resources/users.ldif</exclude>
             <exclude>src/test/resources/gsInstaller-hosts.txt</exclude>
@@ -1066,14 +1065,9 @@
       <version>3.0</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.derby</groupId>
-      <artifactId>derby</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.derby</groupId>
-      <artifactId>derbytools</artifactId>
-      <version>10.11.1.1</version>
-      <scope>test</scope>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <version>1.4.193</version>
     </dependency>
     <dependency>
       <groupId>org.springframework.security</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
index b7d7476..7c833f6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
@@ -664,4 +664,8 @@ public class HeartBeatHandler {
     }
   }
 
+  public void stop() {
+    heartbeatMonitor.shutdown();
+    heartbeatProcessor.stopAsync();
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index 0c51576..5020790 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -237,17 +237,36 @@ public class Configuration {
   public static final String DEFAULT_DERBY_SCHEMA = "ambari";
 
   /**
-   * The JDBC URL to use when creating a {@link DatabaseType#DERBY} database for
+   * The schema to use when creating a {@link DatabaseType#H2} database for
+   * unit tests.
+   */
+  public static final String DEFAULT_H2_SCHEMA = "ambari";
+
+  /**
+   * The JDBC URL to use when creating a {@link DatabaseType#H2} database for
    * unit tests.
    */
   public static final String JDBC_IN_MEMORY_URL = String.format(
-      "jdbc:derby:memory:myDB/%s;create=true", DEFAULT_DERBY_SCHEMA);
+      "jdbc:h2:mem:%1$s;ALIAS_COLUMN_NAME=TRUE;INIT=CREATE SCHEMA IF NOT EXISTS %1$s\\;SET SCHEMA %1$s;",
+      DEFAULT_DERBY_SCHEMA);
+
+  /**
+   * The H2 driver to use when creating a {@link DatabaseType#H2} database
+   * for unit tests.
+   */
+  public static final String JDBC_IN_MEMORY_DRIVER = "org.h2.Driver";
 
   /**
-   * The Derby driver to use when creating a {@link DatabaseType#DERBY} database
+   * The H2 default user driver to use when creating a {@link DatabaseType#H2} database
    * for unit tests.
    */
-  public static final String JDBC_IN_MEMORY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
+  public static final String JDBC_IN_MEMORY_USER = "sa";
+
+  /**
+   * The H2 default password to use when creating a {@link DatabaseType#H2} database
+   * for unit tests.
+   */
+  public static final String JDBC_IN_MEMORY_PASSWORD = "";
 
   /**
    * The JSSE property which governs the location of the keystore file
@@ -2673,7 +2692,8 @@ public class Configuration {
     MYSQL("mysql"),
     DERBY("derby"),
     SQL_SERVER("sqlserver"),
-    SQL_ANYWHERE("sqlanywhere");
+    SQL_ANYWHERE("sqlanywhere"),
+    H2("h2");
 
     private static final Map<String, DatabaseType> m_mappedTypes =
       new HashMap<String, Configuration.DatabaseType>(5);
@@ -3824,10 +3844,16 @@ public class Configuration {
   }
 
   public String getDatabaseUser() {
+    if (getPersistenceType() == PersistenceType.IN_MEMORY) {
+      return JDBC_IN_MEMORY_USER;
+    }
     return getProperty(SERVER_JDBC_USER_NAME);
   }
 
   public String getDatabasePassword() {
+    if (getPersistenceType() == PersistenceType.IN_MEMORY) {
+      return JDBC_IN_MEMORY_PASSWORD;
+    }
     String passwdProp = properties.getProperty(SERVER_JDBC_USER_PASSWD.getKey());
     String dbpasswd = null;
     boolean isPasswordAlias = false;
@@ -4819,6 +4845,8 @@ public class Configuration {
       databaseType = DatabaseType.SQL_SERVER;
     } else if (dbUrl.contains(DatabaseType.SQL_ANYWHERE.getName())) {
       databaseType = DatabaseType.SQL_ANYWHERE;
+    } else if (dbUrl.contains(DatabaseType.H2.getName())) {
+      databaseType = DatabaseType.H2;
     } else {
       throw new RuntimeException(
         "The database type could be not determined from the JDBC URL "
@@ -4845,6 +4873,8 @@ public class Configuration {
       databaseSchema = getDatabaseUser();
     } else if (databaseType.equals(DatabaseType.DERBY)) {
       databaseSchema = DEFAULT_DERBY_SCHEMA;
+    } else if (databaseType.equals(DatabaseType.H2)) {
+      databaseSchema = DEFAULT_H2_SCHEMA;
     } else {
       databaseSchema = null;
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index b7c9e85..b634a62 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -226,7 +226,10 @@ public class ControllerModule extends AbstractModule {
       case IN_MEMORY:
         properties.setProperty(JDBC_URL, Configuration.JDBC_IN_MEMORY_URL);
         properties.setProperty(JDBC_DRIVER, Configuration.JDBC_IN_MEMORY_DRIVER);
-        properties.setProperty(DDL_GENERATION, DROP_AND_CREATE);
+        properties.setProperty(JDBC_USER, Configuration.JDBC_IN_MEMORY_USER);
+        properties.setProperty(JDBC_PASSWORD, Configuration.JDBC_IN_MEMORY_PASSWORD);
+        properties.setProperty(DDL_GENERATION, CREATE_ONLY);
+        properties.setProperty(DDL_GENERATION_MODE, DDL_BOTH_GENERATION);
         properties.setProperty(THROW_EXCEPTIONS, "true");
         break;
       case REMOTE:

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
index b8a760f..5d9eb6c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java
@@ -623,6 +623,7 @@ public interface DBAccessor {
     MYSQL,
     POSTGRES,
     DERBY,
+    H2,
     UNKNOWN
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
index c645d6d..1c0ab30 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java
@@ -43,6 +43,7 @@ import org.apache.ambari.server.orm.helpers.ScriptRunner;
 import org.apache.ambari.server.orm.helpers.dbms.DbmsHelper;
 import org.apache.ambari.server.orm.helpers.dbms.DerbyHelper;
 import org.apache.ambari.server.orm.helpers.dbms.GenericDbmsHelper;
+import org.apache.ambari.server.orm.helpers.dbms.H2Helper;
 import org.apache.ambari.server.orm.helpers.dbms.MySqlHelper;
 import org.apache.ambari.server.orm.helpers.dbms.OracleHelper;
 import org.apache.ambari.server.orm.helpers.dbms.PostgresHelper;
@@ -55,6 +56,7 @@ import org.eclipse.persistence.logging.AbstractSessionLog;
 import org.eclipse.persistence.logging.SessionLogEntry;
 import org.eclipse.persistence.platform.database.DatabasePlatform;
 import org.eclipse.persistence.platform.database.DerbyPlatform;
+import org.eclipse.persistence.platform.database.H2Platform;
 import org.eclipse.persistence.platform.database.MySQLPlatform;
 import org.eclipse.persistence.platform.database.OraclePlatform;
 import org.eclipse.persistence.platform.database.PostgreSQLPlatform;
@@ -130,6 +132,9 @@ public class DBAccessorImpl implements DBAccessor {
     } else if (databasePlatform instanceof DerbyPlatform) {
       dbType = DbType.DERBY;
       return new DerbyHelper(databasePlatform);
+    } else if (databasePlatform instanceof H2Platform) {
+      dbType = DbType.H2;
+      return new H2Helper(databasePlatform);
     } else {
       dbType = DbType.UNKNOWN;
       return new GenericDbmsHelper(databasePlatform);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
index 2c5cbfb..7421ca1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
@@ -54,7 +54,7 @@ import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
   @NamedQuery(name = "UpgradeEntity.findUpgrade",
       query = "SELECT u FROM UpgradeEntity u WHERE u.upgradeId = :upgradeId"),
   @NamedQuery(name = "UpgradeEntity.findLatestForClusterInDirection",
-      query = "SELECT u FROM UpgradeEntity u JOIN RequestEntity r ON u.requestId = r.requestId WHERE u.clusterId = :clusterId AND u.direction = :direction ORDER BY r.startTime DESC"),
+      query = "SELECT u FROM UpgradeEntity u JOIN RequestEntity r ON u.requestId = r.requestId WHERE u.clusterId = :clusterId AND u.direction = :direction ORDER BY r.startTime DESC, u.upgradeId DESC"),
   @NamedQuery(name = "UpgradeEntity.findLatestForCluster",
       query = "SELECT u FROM UpgradeEntity u JOIN RequestEntity r ON u.requestId = r.requestId WHERE u.clusterId = :clusterId ORDER BY r.startTime DESC"),
 })

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
new file mode 100644
index 0000000..e6cb8ab
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/H2Helper.java
@@ -0,0 +1,74 @@
+/**
+ * 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.
+ */
+
+package org.apache.ambari.server.orm.helpers.dbms;
+
+import org.apache.ambari.server.orm.DBAccessor;
+import org.eclipse.persistence.platform.database.DatabasePlatform;
+
+public class H2Helper extends GenericDbmsHelper {
+  public H2Helper(DatabasePlatform databasePlatform) {
+    super(databasePlatform);
+  }
+
+  @Override
+  public boolean supportsColumnTypeChange() {
+    return false; //type change is dramatically limited to varchar length increase only, almost useless
+  }
+
+  //+
+  @Override
+  public String getRenameColumnStatement(String tableName, String oldName, DBAccessor.DBColumnInfo columnInfo) {
+    StringBuilder builder = new StringBuilder();
+
+    builder.append("ALTER TABLE ").append(tableName).append(" ALTER COLUMN ").append(oldName);
+    builder.append(" RENAME TO ").append(columnInfo.getName());
+
+    return builder.toString();
+  }
+
+  @Override
+  public StringBuilder writeColumnModifyString(StringBuilder builder, DBAccessor.DBColumnInfo columnInfo) {
+    builder.append(" ALTER COLUMN ").append(columnInfo.getName())
+      .append(" SET DATA TYPE ");
+    writeColumnType(builder, columnInfo);
+
+    return builder;
+  }
+
+  //+
+  @Override
+  public StringBuilder writeSetNullableString(StringBuilder builder,
+      String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
+    builder.append(" ALTER COLUMN ").append(columnInfo.getName()).append(" SET");
+    String nullStatement = nullable ? " NULL" : " NOT NULL";
+    builder.append(nullStatement);
+    return builder;
+  }
+
+  @Override
+  public String writeGetTableConstraints(String databaseName, String tableName){
+    StringBuilder statement = new StringBuilder()
+      .append("SELECT")
+        .append(" C.CONSTRAINTNAME AS CONSTRAINT_NAME,")
+        .append(" C.TYPE AS CONSTRAINT_TYPE")
+      .append(" FROM SYS.SYSCONSTRAINTS AS C, SYS.SYSTABLES AS T")
+      .append(" WHERE C.TABLEID = T.TABLEID AND T.TABLENAME = '").append(tableName).append("'");
+    return statement.toString();
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml
index 0375650..3aa7689 100644
--- a/ambari-server/src/main/resources/META-INF/persistence.xml
+++ b/ambari-server/src/main/resources/META-INF/persistence.xml
@@ -106,8 +106,8 @@
       <property name="eclipselink.connection-pool.sequence" value="true" />
       <property name="eclipselink.weaving" value="static" />
       <property name="eclipselink.session.customizer" value="org.apache.ambari.server.orm.EclipseLinkSessionCustomizer"/>
-      <property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>
-      <property name="eclipselink.logging.level" value="INFO"/>
+      <!--<property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>-->
+      <!--<property name="eclipselink.logging.level" value="INFO"/>-->
     </properties>
   </persistence-unit>
 
@@ -119,8 +119,8 @@
       <property name="eclipselink.cache.size.default" value="10000" />
       <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
       <property name="eclipselink.weaving" value="static" />
-      <property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>
-      <property name="eclipselink.logging.level" value="INFO"/>
+      <!--<property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>-->
+      <!--<property name="eclipselink.logging.level" value="INFO"/>-->
     </properties>
   </persistence-unit>
   <persistence-unit name="ambari-view-migration" transaction-type="RESOURCE_LOCAL">
@@ -130,8 +130,8 @@
       <property name="eclipselink.cache.size.default" value="10000" />
       <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
       <property name="eclipselink.weaving" value="static" />
-      <property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>
-      <property name="eclipselink.logging.level" value="INFO"/>
+      <!--<property name="eclipselink.logging.logger" value="org.apache.ambari.server.logging.EclipseLinkLogger"/>-->
+      <!--<property name="eclipselink.logging.level" value="INFO"/>-->
     </properties>
   </persistence-unit>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/annotations/LockAreaTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/annotations/LockAreaTest.java b/ambari-server/src/test/java/org/apache/ambari/annotations/LockAreaTest.java
index 2208ce4..fc5e81a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/annotations/LockAreaTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/annotations/LockAreaTest.java
@@ -17,6 +17,7 @@
  */
 package org.apache.ambari.annotations;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
@@ -26,6 +27,7 @@ import java.util.concurrent.locks.ReadWriteLock;
 
 import org.apache.ambari.annotations.TransactionalLock.LockArea;
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.TransactionalLocks;
@@ -35,7 +37,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -53,8 +54,8 @@ public class LockAreaTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    m_injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(m_injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/annotations/TransactionalLockInterceptorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/annotations/TransactionalLockInterceptorTest.java b/ambari-server/src/test/java/org/apache/ambari/annotations/TransactionalLockInterceptorTest.java
index 7d7f47b..dcd1546 100644
--- a/ambari-server/src/test/java/org/apache/ambari/annotations/TransactionalLockInterceptorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/annotations/TransactionalLockInterceptorTest.java
@@ -17,6 +17,7 @@
  */
 package org.apache.ambari.annotations;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
@@ -24,6 +25,7 @@ import java.util.concurrent.locks.ReadWriteLock;
 import org.apache.ambari.annotations.TransactionalLock.LockArea;
 import org.apache.ambari.annotations.TransactionalLock.LockType;
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.TransactionalLocks;
@@ -38,7 +40,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 import com.google.inject.util.Modules;
 
@@ -58,8 +59,8 @@ public class TransactionalLockInterceptorTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    m_injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(m_injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/H2DatabaseCleaner.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/H2DatabaseCleaner.java b/ambari-server/src/test/java/org/apache/ambari/server/H2DatabaseCleaner.java
new file mode 100644
index 0000000..91477eb
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/H2DatabaseCleaner.java
@@ -0,0 +1,124 @@
+/**
+ * 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.
+ */
+
+package org.apache.ambari.server;
+
+import static org.eclipse.persistence.config.PersistenceUnitProperties.DEFAULT_CREATE_JDBC_FILE_NAME;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.persistence.metamodel.EntityType;
+
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.orm.DBAccessorImpl;
+import org.apache.commons.collections.CollectionUtils;
+
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+
+public class H2DatabaseCleaner {
+  private static final String SEQ_INSERT_PREFIX = "INSERT INTO ambari_sequences";
+  private static List<String> seqInsertStatements;
+
+  public static void clearDatabaseAndStopPersistenceService(Injector injector) throws AmbariException, SQLException {
+    clearDatabase(injector.getProvider(EntityManager.class).get());
+    injector.getInstance(PersistService.class).stop();
+  }
+
+  public static void clearDatabase(EntityManager entityManager) throws AmbariException, SQLException {
+    clearDatabase(entityManager, Configuration.JDBC_IN_MEMORY_URL,
+      Configuration.JDBC_IN_MEMORY_USER, Configuration.JDBC_IN_MEMORY_PASSWORD);
+  }
+
+  private static List<String> collectSequenceInserts() {
+    try {
+      ArrayList<String> statementList = new ArrayList<>();
+      for (String s : Files.readAllLines(Paths.get(DEFAULT_CREATE_JDBC_FILE_NAME), Charset.defaultCharset())) {
+        if (s.startsWith(SEQ_INSERT_PREFIX)) {
+          statementList.add(s);
+        }
+      }
+      return statementList;
+    } catch (IOException e) {
+      return Collections.emptyList();
+    }
+  }
+
+  //TODO all tests this method is used in should be modified to remove hardcoded IDs
+  public static void resetSequences(Injector injector) {
+    DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class);
+    try {
+      if (dbAccessor.tableExists("ambari_sequences")) {
+        if (seqInsertStatements == null) {
+          seqInsertStatements = collectSequenceInserts();
+        }
+        if (!CollectionUtils.isEmpty(seqInsertStatements)) {
+          dbAccessor.truncateTable("ambari_sequences");
+
+          for (String insert : seqInsertStatements) {
+            dbAccessor.executeUpdate(insert);
+          }
+        }
+
+      }
+    } catch (SQLException ignored) {
+    }
+  }
+
+  public static void clearDatabase(EntityManager entityManager, String dbURL, String dbUser, String dbPass) throws SQLException {
+    Connection connection = DriverManager.getConnection(dbURL, dbUser, dbPass);
+    Statement s = connection.createStatement();
+
+    try {
+      // Disable FK
+      s.execute("SET REFERENTIAL_INTEGRITY FALSE");
+
+      entityManager.getTransaction().begin();
+      // Truncate tables for all entities
+      for (EntityType<?> entity : entityManager.getMetamodel().getEntities()) {
+        Query query = entityManager.createQuery("DELETE FROM " + entity.getName() + " em");
+        query.executeUpdate();
+//        final String tableName = entity.getBindableJavaType().getAnnotation(Table.class).name();
+//        s.executeUpdate("TRUNCATE TABLE " + tableName);
+      }
+
+      entityManager.getTransaction().commit();
+
+      // Enable FK
+      s.execute("SET REFERENTIAL_INTEGRITY TRUE");
+
+      //reset shared cache
+      entityManager.getEntityManagerFactory().getCache().evictAll();
+    } finally {
+      s.close();
+      connection.close();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
index a413ce3..c5be8f4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/StateRecoveryManagerTest.java
@@ -26,6 +26,7 @@ import static org.easymock.EasyMock.replay;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -46,7 +47,6 @@ import org.junit.Test;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 public class StateRecoveryManagerTest {
@@ -67,8 +67,8 @@ public class StateRecoveryManagerTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
index 62ce93b..893c3fb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
@@ -19,6 +19,7 @@
 package org.apache.ambari.server.actionmanager;
 
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -28,6 +29,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
@@ -42,6 +44,7 @@ import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
 import org.apache.ambari.server.utils.StageUtils;
 import org.codehaus.jettison.json.JSONException;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -262,4 +265,9 @@ public class ExecutionCommandWrapperTest {
     Assert.assertEquals(SERVICE_SITE_VAL5, mergedConfig.get(SERVICE_SITE_NAME5));
     Assert.assertEquals(SERVICE_SITE_VAL6_H, mergedConfig.get(SERVICE_SITE_NAME6));
   }
+
+  @AfterClass
+  public static void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/StageTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/StageTest.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/StageTest.java
index 331f4fb..89627f7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/StageTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/StageTest.java
@@ -20,9 +20,12 @@ package org.apache.ambari.server.actionmanager;
 
 import static org.junit.Assert.assertEquals;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -31,6 +34,7 @@ import org.apache.ambari.server.serveraction.ServerAction;
 import org.apache.ambari.server.serveraction.upgrades.ConfigureAction;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent;
 import org.apache.ambari.server.utils.StageUtils;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -79,4 +83,9 @@ public class StageTest {
 
     assertEquals("user1", actionUserName);
   }
-}
\ No newline at end of file
+
+  @After
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
index 1ca777d..177ac70 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -30,6 +31,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.NamedQuery;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.CommandReport;
@@ -63,7 +65,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Singleton;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 import junit.framework.Assert;
@@ -103,6 +104,7 @@ public class TestActionDBAccessorImpl {
     injector  = Guice.createInjector(Modules.override(defaultTestModule)
       .with(new TestActionDBAccessorModule()));
 
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
 
     // initialize AmbariMetaInfo so that the stacks are populated into the DB
@@ -124,8 +126,8 @@ public class TestActionDBAccessorImpl {
   }
 
   @After
-  public void tearDown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
index da54789..d5f2475 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
@@ -27,11 +27,13 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.ActionQueue;
@@ -53,7 +55,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 import junit.framework.Assert;
@@ -73,7 +74,9 @@ public class TestActionManager {
   @Before
   public void setup() throws AmbariException {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
+
     clusters = injector.getInstance(Clusters.class);
     stageFactory = injector.getInstance(StageFactory.class);
 
@@ -86,8 +89,8 @@ public class TestActionManager {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
index 6cc511e..ade625a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
@@ -41,6 +41,7 @@ import static org.mockito.Mockito.when;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -57,6 +58,7 @@ import java.util.concurrent.TimeUnit;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.ServiceComponentHostNotFoundException;
@@ -114,7 +116,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 import junit.framework.Assert;
@@ -161,8 +162,8 @@ public class TestActionScheduler {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
index 246c8b3..217f95e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
@@ -20,6 +20,7 @@ package org.apache.ambari.server.actionmanager;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
@@ -27,6 +28,8 @@ import java.util.concurrent.Semaphore;
 
 import javax.persistence.EntityManager;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.publishers.JPAEventPublisher;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -46,7 +49,6 @@ import com.google.common.collect.Sets;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 import junit.framework.Assert;
@@ -78,8 +80,8 @@ public class TestActionSchedulerThreading {
    * Cleanup test methods.
    */
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestStage.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestStage.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestStage.java
index 1047a73..c388d08 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestStage.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestStage.java
@@ -19,15 +19,19 @@ package org.apache.ambari.server.actionmanager;
 
 import static org.junit.Assert.assertEquals;
 
+import java.sql.SQLException;
 import java.util.Map;
 import java.util.TreeMap;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.utils.StageUtils;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -75,4 +79,9 @@ public class TestStage {
     assertEquals("My Context", stage.getRequestContext());
     assertEquals(CLUSTER_HOST_INFO, stage.getClusterHostInfo());
   }
+
+  @After
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
index 4a5cb06..4a888f0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
@@ -36,6 +36,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -43,6 +44,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionDBAccessor;
@@ -92,7 +94,6 @@ import com.google.gson.JsonObject;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 import junit.framework.Assert;
@@ -143,14 +144,15 @@ public class HeartbeatProcessorTest {
 
   @Before
   public void setup() throws Exception {
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
     injector.injectMembers(this);
     EasyMock.replay(injector.getInstance(AuditLogger.class));
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test
@@ -1364,4 +1366,4 @@ public class HeartbeatProcessorTest {
 
 
 
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index e7588c7..ba03ae1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -57,6 +57,7 @@ import java.util.Map;
 import javax.xml.bind.JAXBException;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionDBAccessor;
@@ -107,7 +108,6 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -161,7 +161,7 @@ public class TestHeartbeatHandler {
 
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     EasyMock.reset(auditLogger);
   }
 
@@ -444,6 +444,7 @@ public class TestHeartbeatHandler {
 
     HeartBeatResponse hbr = handler.handleHeartBeat(hb);
     assertNull(hbr.getRecoveryConfig());
+    handler.stop();
   }
 
   //

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
index 4d129a9..1b9c28b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -33,6 +34,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -65,7 +67,6 @@ import org.slf4j.LoggerFactory;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class TestHeartbeatMonitor {
 
@@ -92,8 +93,8 @@ public class TestHeartbeatMonitor {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private void setOsFamily(Host host, String osFamily, String osVersion) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/api/query/JpaSortBuilderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/query/JpaSortBuilderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/query/JpaSortBuilderTest.java
index b9bfc50..adbcd32 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/query/JpaSortBuilderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/query/JpaSortBuilderTest.java
@@ -27,6 +27,7 @@ import javax.persistence.criteria.Order;
 import javax.persistence.criteria.Root;
 import javax.persistence.metamodel.SingularAttribute;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.internal.AlertHistoryResourceProvider;
 import org.apache.ambari.server.controller.internal.SortRequestImpl;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -38,6 +39,7 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.entities.AlertHistoryEntity;
 import org.apache.ambari.server.orm.entities.AlertHistoryEntity_;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -60,6 +62,11 @@ public class JpaSortBuilderTest {
     m_injector.injectMembers(this);
   }
 
+  @After
+  public void teardown() throws Exception {
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
+  }
+
   /**
    * Tests that adding a sort does not create another {@link Root} in the
    * {@link CriteriaQuery}. A duplicate root will cause a cartesian product

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
index d93953c..d3ccf33 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
@@ -46,6 +46,7 @@ import java.util.UUID;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.StackAccessException;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.spi.Resource;
@@ -92,6 +93,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
@@ -131,7 +133,7 @@ public class AmbariMetaInfoTest {
   private static final int PROPERTIES_CNT = 62;
   private static final int OS_CNT = 4;
 
-  private static AmbariMetaInfo metaInfo = null;
+  private static TestAmbariMetaInfo metaInfo = null;
   private final static Logger LOG =
       LoggerFactory.getLogger(AmbariMetaInfoTest.class);
   private static final String FILE_NAME = "hbase-site.xml";
@@ -157,6 +159,11 @@ public class AmbariMetaInfoTest {
     metaInfo = createAmbariMetaInfo(stacks, version);
   }
 
+  @AfterClass
+  public static void tearDown() throws Exception {
+    H2DatabaseCleaner.clearDatabase(metaInfo.injector.getProvider(EntityManager.class).get());
+  }
+
   public class MockModule extends AbstractModule {
     @Override
     protected void configure() {
@@ -2141,11 +2148,12 @@ public class AmbariMetaInfoTest {
     AlertDefinitionDAO alertDefinitionDAO;
     AlertDefinitionFactory alertDefinitionFactory;
     OsFamily osFamily;
+    Injector injector;
 
     public TestAmbariMetaInfo(Configuration configuration) throws Exception {
       super(configuration);
 
-      Injector injector = Guice.createInjector(Modules.override(
+      injector = Guice.createInjector(Modules.override(
           new InMemoryDefaultTestModule()).with(new MockModule()));
 
       injector.getInstance(GuiceJpaInitializer.class);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistKeyValueImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistKeyValueImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistKeyValueImplTest.java
index 63f269d..d6815fd 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistKeyValueImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistKeyValueImplTest.java
@@ -20,6 +20,7 @@ package org.apache.ambari.server.api.services;
 
 import java.util.Map;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.junit.After;
@@ -29,7 +30,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 
 public class PersistKeyValueImplTest extends Assert {
@@ -46,7 +46,7 @@ public class PersistKeyValueImplTest extends Assert {
 
   @After
   public void tearDown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistServiceTest.java
index 7576501..57ccdb9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/PersistServiceTest.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.api.services;
 import java.io.IOException;
 import java.util.Map;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.RandomPortJerseyTest;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -35,7 +36,6 @@ import org.junit.Test;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.UniformInterfaceException;
 import com.sun.jersey.api.client.WebResource;
@@ -80,7 +80,7 @@ public class PersistServiceTest extends RandomPortJerseyTest {
   @After
   public void tearDown() throws Exception {
     super.tearDown();
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
index 6640837..3a93fbf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
@@ -32,6 +32,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.agent.HeartbeatTestHelper;
 import org.apache.ambari.server.agent.RecoveryConfig;
 import org.apache.ambari.server.agent.RecoveryConfigHelper;
@@ -52,7 +53,6 @@ import com.google.common.eventbus.EventBus;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Test RecoveryConfigHelper class
@@ -87,7 +87,7 @@ public class RecoveryConfigHelperTest {
 
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index 8c87f0f..0f5a388 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -17,6 +17,7 @@
  */
 package org.apache.ambari.server.controller;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -27,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionManager;
@@ -73,7 +75,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -137,9 +138,9 @@ public class AmbariCustomCommandExecutionHelperTest {
   }
 
   @After
-  public void teardown() {
+  public void teardown() throws AmbariException, SQLException {
     SecurityContextHolder.getContext().setAuthentication(null);
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 6e2190b..af67f05 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -58,6 +58,7 @@ import javax.persistence.EntityManager;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.ClusterNotFoundException;
 import org.apache.ambari.server.DuplicateResourceException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.HostNotFoundException;
 import org.apache.ambari.server.ObjectNotFoundException;
 import org.apache.ambari.server.ParentObjectNotFoundException;
@@ -171,7 +172,6 @@ import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -241,6 +241,7 @@ public class AmbariManagementControllerTest {
     InMemoryDefaultTestModule module = new InMemoryDefaultTestModule();
     backingProperties = module.getProperties();
     injector = Guice.createInjector(module);
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
     ambariMetaInfo.init();
@@ -257,7 +258,7 @@ public class AmbariManagementControllerTest {
 
   @Before
   public void setup() throws Exception {
-    entityManager = injector.getInstance(EntityManager.class);
+    entityManager = injector.getProvider(EntityManager.class).get();
     actionDB = injector.getInstance(ActionDBAccessor.class);
     serviceFactory = injector.getInstance(ServiceFactory.class);
     serviceComponentFactory = injector.getInstance(
@@ -284,7 +285,7 @@ public class AmbariManagementControllerTest {
 
   @AfterClass
   public static void afterClass() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private static String getUniqueName() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
index ff5d1bf..85c47fc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
@@ -31,6 +31,7 @@ import java.net.InetAddress;
 import java.net.PasswordAuthentication;
 import java.sql.Connection;
 import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.EnumSet;
@@ -41,6 +42,7 @@ import javax.servlet.DispatcherType;
 import javax.servlet.SessionCookieConfig;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.checks.DatabaseConsistencyCheckHelper;
 import org.apache.ambari.server.configuration.Configuration;
@@ -81,7 +83,8 @@ public class AmbariServerTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
index 58f597f..30816a5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.controller;
 
 import static org.mockito.Matchers.any;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -27,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.Request;
@@ -61,7 +63,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -112,8 +113,8 @@ public class BackgroundCustomCommandExecutionTest {
     SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
   }
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     SecurityContextHolder.getContext().setAuthentication(null);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
index a54fb98..0b4c81d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.controller;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -25,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.internal.ComponentResourceProviderTest;
 import org.apache.ambari.server.controller.internal.ServiceResourceProviderTest;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -48,7 +50,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -76,8 +77,8 @@ public class RefreshYarnCapacitySchedulerReleaseConfigTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
 
     // Clear the authenticated user
     SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java
index 9fc51bd..e9b4aa7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java
@@ -21,14 +21,18 @@ package org.apache.ambari.server.controller;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ObjectNotFoundException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.RootServiceResponseFactory.Components;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -52,6 +56,11 @@ public class RootServiceResponseFactoryTest {
     injector.injectMembers(this);
   }
 
+  @After
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   @Test
   public void testGetRootServices() throws Exception {
     // Request a null service name

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ActionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ActionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ActionResourceProviderTest.java
index e29c047..061f06a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ActionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ActionResourceProviderTest.java
@@ -24,12 +24,14 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionType;
 import org.apache.ambari.server.actionmanager.TargetHostType;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -52,7 +54,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class ActionResourceProviderTest {
 
@@ -84,8 +85,8 @@ public class ActionResourceProviderTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertResourceProviderTest.java
index 9f6591c..4b2bb7a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertResourceProviderTest.java
@@ -735,8 +735,8 @@ public class AlertResourceProviderTest {
 
       expect(configuration.getDatabaseUrl()).andReturn(JDBC_IN_MEMORY_URL).anyTimes();
       expect(configuration.getDatabaseDriver()).andReturn(JDBC_IN_MEMORY_DRIVER).anyTimes();
-      expect(configuration.getDatabaseUser()).andReturn("test").anyTimes();
-      expect(configuration.getDatabasePassword()).andReturn("test").anyTimes();
+      expect(configuration.getDatabaseUser()).andReturn("sa").anyTimes();
+      expect(configuration.getDatabasePassword()).andReturn("").anyTimes();
       expect(configuration.getAlertEventPublisherPoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS.getDefaultValue())).anyTimes();
       expect(configuration.getMasterKeyLocation()).andReturn(new File("/test")).anyTimes();
       expect(configuration.getTemporaryKeyStoreRetentionMinutes()).andReturn(2l).anyTimes();

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CalculatedStatusTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CalculatedStatusTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CalculatedStatusTest.java
index a96f395..cd2f99e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CalculatedStatusTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CalculatedStatusTest.java
@@ -34,6 +34,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapperFactory;
@@ -46,6 +49,7 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.dao.HostRoleCommandStatusSummaryDTO;
 import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
 import org.apache.ambari.server.orm.entities.StageEntity;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -82,6 +86,10 @@ public class CalculatedStatusTest {
     s_field.setAccessible(true);
   }
 
+  @After
+  public void after() throws Exception {
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
+  }
 
   @Test
   public void testGetStatus() throws Exception {


[49/50] [abbrv] ambari git commit: AMBARI-19856. Perf: start/stop all actions works much slower after few days of testing.(vbrodetskyi)

Posted by nc...@apache.org.
AMBARI-19856. Perf: start/stop all actions works much slower after few days of testing.(vbrodetskyi)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 132e266521642d90908d3dd69446a701ca94c3db
Parents: f2561c4
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Fri Feb 3 16:04:21 2017 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Fri Feb 3 16:04:21 2017 +0200

----------------------------------------------------------------------
 .../AmbariManagementControllerImpl.java         | 22 +++++++------
 .../ambari/server/state/ConfigHelper.java       | 33 ++++++++++++++------
 .../server/state/ServiceComponentHost.java      |  5 +++
 .../svccomphost/ServiceComponentHostImpl.java   | 21 ++++++++++---
 contrib/utils/perf/deploy-gce-perf-cluster.py   | 11 +++++--
 5 files changed, 67 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/132e2665/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index ce9d7a9..9314c28 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -2194,7 +2194,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
                                 boolean skipFailure,
                                 ClusterVersionEntity effectiveClusterVersion,
                                 boolean isUpgradeSuspended,
-                                DatabaseType databaseType
+                                DatabaseType databaseType,
+                                Map<String, DesiredConfig> clusterDesiredConfigs
                                 )
                                 throws AmbariException {
 
@@ -2398,19 +2399,17 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
     String packageList = gson.toJson(packages);
     hostParams.put(PACKAGE_LIST, packageList);
 
-    Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
-
     Set<PropertyInfo> stackProperties = ambariMetaInfo.getStackProperties(stackInfo.getName(), stackInfo.getVersion());
 
-    Set<String> userSet = configHelper.getPropertyValuesWithPropertyType(PropertyType.USER, cluster, desiredConfigs, servicesMap, stackProperties);
+    Set<String> userSet = configHelper.getPropertyValuesWithPropertyType(PropertyType.USER, cluster, clusterDesiredConfigs, servicesMap, stackProperties);
     String userList = gson.toJson(userSet);
     hostParams.put(USER_LIST, userList);
 
-    Set<String> groupSet = configHelper.getPropertyValuesWithPropertyType(PropertyType.GROUP, cluster, desiredConfigs, servicesMap, stackProperties);
+    Set<String> groupSet = configHelper.getPropertyValuesWithPropertyType(PropertyType.GROUP, cluster, clusterDesiredConfigs, servicesMap, stackProperties);
     String groupList = gson.toJson(groupSet);
     hostParams.put(GROUP_LIST, groupList);
 
-    Set<String> notManagedHdfsPathSet = configHelper.getPropertyValuesWithPropertyType(PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs, servicesMap, stackProperties);
+    Set<String> notManagedHdfsPathSet = configHelper.getPropertyValuesWithPropertyType(PropertyType.NOT_MANAGED_HDFS_PATH, cluster, clusterDesiredConfigs, servicesMap, stackProperties);
     String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet);
     hostParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList);
 
@@ -2900,9 +2899,11 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
                 configurationAttributes =
                 new TreeMap<>();
             Host host = clusters.getHost(scHost.getHostName());
+            Map<String, DesiredConfig> clusterDesiredConfigs = cluster.getDesiredConfigs();
 
             Map<String, Map<String, String>> configTags =
-                findConfigurationTagsWithOverrides(cluster, host.getHostName());
+                    configHelper.getEffectiveDesiredTags(cluster, host.getHostName(), clusterDesiredConfigs);
+
 
             // Skip INSTALL task in case SysPrepped hosts and in case of server components. In case of server component
             // START task should run configuration script.
@@ -2911,7 +2912,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
               scHost.setState(State.INSTALLED);
             } else {
               createHostAction(cluster, stage, scHost, configurations, configurationAttributes, configTags,
-                roleCommand, requestParameters, event, skipFailure, effectiveClusterVersion, isUpgradeSuspended, databaseType);
+                roleCommand, requestParameters, event, skipFailure, effectiveClusterVersion, isUpgradeSuspended,
+                databaseType, clusterDesiredConfigs);
             }
 
           }
@@ -3050,8 +3052,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
     ClusterVersionEntity effectiveClusterVersion = cluster.getEffectiveClusterVersion();
     boolean isUpgradeSuspended = cluster.isUpgradeSuspended();
     DatabaseType databaseType = configs.getDatabaseType();
+    Map<String, DesiredConfig> clusterDesiredConfigs = cluster.getDesiredConfigs();
     createHostAction(cluster, stage, scHost, configurations, configurationAttributes, configTags,
-                     roleCommand, null, null, false, effectiveClusterVersion, isUpgradeSuspended, databaseType);
+                     roleCommand, null, null, false, effectiveClusterVersion, isUpgradeSuspended, databaseType,
+                     clusterDesiredConfigs);
     ExecutionCommand ec = stage.getExecutionCommands().get(scHost.getHostName()).get(0).getExecutionCommand();
 
     // createHostAction does not take a hostLevelParams but creates one

http://git-wip-us.apache.org/repos/asf/ambari/blob/132e2665/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index 82b41b5..0e5b434 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -37,6 +37,7 @@ import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.dao.ClusterDAO;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
+import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
 import org.apache.ambari.server.state.PropertyInfo.PropertyType;
 import org.apache.ambari.server.state.configgroup.ConfigGroup;
 import org.apache.ambari.server.utils.SecretReference;
@@ -435,10 +436,17 @@ public class ConfigHelper {
    */
   public boolean isStaleConfigs(ServiceComponentHost sch, Map<String, DesiredConfig> requestDesiredConfigs)
       throws AmbariException {
-    boolean stale = calculateIsStaleConfigs(sch, requestDesiredConfigs);
+    HostComponentDesiredStateEntity hostComponentDesiredStateEntity = sch.getDesiredStateEntity();
+    return isStaleConfigs(sch, requestDesiredConfigs, hostComponentDesiredStateEntity);
+  }
+
+  public boolean isStaleConfigs(ServiceComponentHost sch, Map<String, DesiredConfig> requestDesiredConfigs,
+                                HostComponentDesiredStateEntity hostComponentDesiredStateEntity)
+          throws AmbariException {
+    boolean stale = calculateIsStaleConfigs(sch, requestDesiredConfigs, hostComponentDesiredStateEntity);
     if (LOG.isDebugEnabled()) {
       LOG.debug("Cache configuration staleness for host {} and component {} as {}",
-          sch.getHostName(), sch.getServiceComponentName(), stale);
+              sch.getHostName(), sch.getServiceComponentName(), stale);
     }
     return stale;
   }
@@ -1010,7 +1018,14 @@ public class ConfigHelper {
   private boolean calculateIsStaleConfigs(ServiceComponentHost sch,
       Map<String, DesiredConfig> desiredConfigs) throws AmbariException {
 
-    if (sch.isRestartRequired()) {
+    HostComponentDesiredStateEntity hostComponentDesiredStateEntity = sch.getDesiredStateEntity();
+    return calculateIsStaleConfigs(sch, desiredConfigs, hostComponentDesiredStateEntity);
+  }
+
+  private boolean calculateIsStaleConfigs(ServiceComponentHost sch, Map<String, DesiredConfig> desiredConfigs,
+                                          HostComponentDesiredStateEntity hostComponentDesiredStateEntity) throws AmbariException {
+
+    if (sch.isRestartRequired(hostComponentDesiredStateEntity)) {
       return true;
     }
 
@@ -1022,16 +1037,16 @@ public class ConfigHelper {
     Cluster cluster = clusters.getClusterById(sch.getClusterId());
 
     Map<String, Map<String, String>> desired = getEffectiveDesiredTags(cluster, sch.getHostName(),
-        desiredConfigs);
+            desiredConfigs);
 
     Boolean stale = null;
     int staleHash = 0;
     if (STALE_CONFIGS_CACHE_ENABLED){
       staleHash = Objects.hashCode(actual.hashCode(),
-          desired.hashCode(),
-          sch.getHostName(),
-          sch.getServiceComponentName(),
-          sch.getServiceName());
+              desired.hashCode(),
+              sch.getHostName(),
+              sch.getServiceComponentName(),
+              sch.getServiceName());
       stale = staleConfigsCache.getIfPresent(staleHash);
       if(stale != null) {
         return stale;
@@ -1043,7 +1058,7 @@ public class ConfigHelper {
     StackId stackId = cluster.getDesiredStackVersion();
 
     ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
-        stackId.getStackVersion(), sch.getServiceName());
+            stackId.getStackVersion(), sch.getServiceName());
 
     ComponentInfo componentInfo = serviceInfo.getComponentByName(sch.getServiceComponentName());
     // Configs are considered stale when:

http://git-wip-us.apache.org/repos/asf/ambari/blob/132e2665/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
index fd92bed..104e456 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.controller.ServiceComponentHostResponse;
+import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
 
@@ -234,6 +235,8 @@ public interface ServiceComponentHost {
    */
   boolean isRestartRequired();
 
+  boolean isRestartRequired(HostComponentDesiredStateEntity hostComponentDesiredStateEntity);
+
   /**
    * @param restartRequired the restartRequired flag
    */
@@ -246,4 +249,6 @@ public interface ServiceComponentHost {
    */
   RepositoryVersionEntity recalculateHostVersionState() throws AmbariException;
 
+  HostComponentDesiredStateEntity getDesiredStateEntity();
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/132e2665/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index 95de4e8..6f01048 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -1214,10 +1214,14 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
   @Override
   public HostComponentAdminState getComponentAdminState() {
     HostComponentDesiredStateEntity desiredStateEntity = getDesiredStateEntity();
+    return getComponentAdminStateFromDesiredStateEntity(desiredStateEntity);
+  }
+
+  private HostComponentAdminState getComponentAdminStateFromDesiredStateEntity(HostComponentDesiredStateEntity desiredStateEntity) {
     if (desiredStateEntity != null) {
       HostComponentAdminState adminState = desiredStateEntity.getAdminState();
       if (adminState == null && !serviceComponent.isClientComponent()
-          && !serviceComponent.isMasterComponent()) {
+              && !serviceComponent.isMasterComponent()) {
         adminState = HostComponentAdminState.INSERVICE;
       }
       return adminState;
@@ -1245,6 +1249,7 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
   @Override
   public ServiceComponentHostResponse convertToResponse(Map<String, DesiredConfig> desiredConfigs) {
     HostComponentStateEntity hostComponentStateEntity = getStateEntity();
+    HostEntity hostEntity = hostComponentStateEntity.getHostEntity();
     if (null == hostComponentStateEntity) {
       LOG.warn(
           "Could not convert ServiceComponentHostResponse to a response. It's possible that Host {} was deleted.",
@@ -1259,12 +1264,12 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
     String serviceName = serviceComponent.getServiceName();
     String serviceComponentName = serviceComponent.getName();
     String hostName = getHostName();
-    String publicHostName = getPublicHostName();
+    String publicHostName = hostEntity.getPublicHostName();
     String state = getState().toString();
     String stackId = stackVersion.getStackId();
     String desiredState = (hostComponentDesiredStateEntity == null) ? null : hostComponentDesiredStateEntity.getDesiredState().toString();
     String desiredStackId = getDesiredStackVersionFromHostComponentDesiredStateEntity(hostComponentDesiredStateEntity).getStackId();
-    HostComponentAdminState componentAdminState = getComponentAdminState();
+    HostComponentAdminState componentAdminState = getComponentAdminStateFromDesiredStateEntity(hostComponentDesiredStateEntity);
     UpgradeState upgradeState = hostComponentStateEntity.getUpgradeState();
 
     String displayName = null;
@@ -1284,7 +1289,7 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
     r.setUpgradeState(upgradeState);
 
     try {
-      r.setStaleConfig(helper.isStaleConfigs(this, desiredConfigs));
+      r.setStaleConfig(helper.isStaleConfigs(this, desiredConfigs, hostComponentDesiredStateEntity));
     } catch (Exception e) {
       LOG.error("Could not determine stale config", e);
     }
@@ -1503,6 +1508,11 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
   }
 
   @Override
+  public boolean isRestartRequired(HostComponentDesiredStateEntity hostComponentDesiredStateEntity) {
+    return hostComponentDesiredStateEntity.isRestartRequired();
+  }
+
+  @Override
   public void setRestartRequired(boolean restartRequired) {
     LOG.debug("Set RestartRequired on serviceName = {} componentName = {} hostName = {} to {}",
         getServiceName(), getServiceComponentName(), getHostName(), restartRequired);
@@ -1588,7 +1598,8 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
    *
    * @return
    */
-  private HostComponentDesiredStateEntity getDesiredStateEntity() {
+  @Override
+  public HostComponentDesiredStateEntity getDesiredStateEntity() {
     return hostComponentDesiredStateDAO.findById(desiredStateEntityId);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/132e2665/contrib/utils/perf/deploy-gce-perf-cluster.py
----------------------------------------------------------------------
diff --git a/contrib/utils/perf/deploy-gce-perf-cluster.py b/contrib/utils/perf/deploy-gce-perf-cluster.py
index 7e84c40..6364122 100644
--- a/contrib/utils/perf/deploy-gce-perf-cluster.py
+++ b/contrib/utils/perf/deploy-gce-perf-cluster.py
@@ -339,8 +339,10 @@ def create_server_script(server_host_name):
   "\n" + \
   "\n" + \
   "yum install mysql-connector-java* -y\n" + \
-  "yum install mysql-server -y\n" + \
-  "sed -i -e 's/mysqld]/mysqld]\\nmax_allowed_packet=16M/1' /etc/my.cnf\n" + \
+  "cd /etc/yum.repos.d/; wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm; rpm -ivh mysql-community-release-el6-5.noarch.rpm;" + \
+  "yum clean all; yum install mysql-server -y\n" + \
+  "sed -i -e 's/mysqld]/mysqld]\\nmax_allowed_packet=1024M\\njoin_buffer_size=512M\\nsort_buffer_size=128M\\nread_rnd_buffer_size=128M\\ninnodb_buffer_pool_size=16G" \
+  "\\ninnodb_file_io_threads=16\\ninnodb_thread_concurrency=32\\nkey_buffer_size=16G\\nquery_cache_limit=16M\\nquery_cache_size=512M\\nthread_cache_size=128\\ninnodb_log_buffer_size=512M/1' /etc/my.cnf\n" + \
   "service mysqld start\n" + \
   "mysql -uroot -e \"CREATE DATABASE ambari;\"\n" + \
   "mysql -uroot -e \"SOURCE /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;\" ambari\n" + \
@@ -359,6 +361,8 @@ def create_server_script(server_host_name):
   "sed -i -e 's/server.persistence.type=local/server.persistence.type=remote/g' /etc/ambari-server/conf/ambari.properties\n" + \
   "sed -i -e 's/local.database.user=postgres//g' /etc/ambari-server/conf/ambari.properties\n" + \
   "sed -i -e 's/server.jdbc.postgres.schema=ambari//g' /etc/ambari-server/conf/ambari.properties\n" + \
+  "sed -i -e 's/agent.threadpool.size.max=25/agent.threadpool.size.max=100/g' /etc/ambari-server/conf/ambari.properties\n" + \
+  "sed -i -e 's/client.threadpool.size.max=25/client.threadpool.size.max=65/g' /etc/ambari-server/conf/ambari.properties\n" + \
   "sed -i -e 's/false/true/g' /var/lib/ambari-server/resources/stacks/PERF/1.0/metainfo.xml\n" + \
   "sed -i -e 's/false/true/g' /var/lib/ambari-server/resources/stacks/PERF/2.0/metainfo.xml\n" + \
   "sed -i -e 's/-Xmx2048m/-Xmx16384m/g' /var/lib/ambari-server/ambari-env.sh\n" + \
@@ -370,6 +374,9 @@ def create_server_script(server_host_name):
   "echo 'server.jdbc.port=3306' >> /etc/ambari-server/conf/ambari.properties\n" + \
   "echo 'server.jdbc.hostname=localhost' >> /etc/ambari-server/conf/ambari.properties\n" + \
   "echo 'server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar' >> /etc/ambari-server/conf/ambari.properties\n" + \
+  "echo 'alerts.cache.enabled=true' >> /etc/ambari-server/conf/ambari.properties\n" + \
+  "echo 'alerts.cache.size=100000' >> /etc/ambari-server/conf/ambari.properties\n" + \
+  "echo 'alerts.execution.scheduler.maxThreads=4' >> /etc/ambari-server/conf/ambari.properties\n" + \
   "echo 'security.temporary.keystore.retention.minutes=180' >> /etc/ambari-server/conf/ambari.properties\n" + \
   "\n" + \
   "ambari-server start --skip-database-check\n" + \


[25/50] [abbrv] ambari git commit: AMBARI-19819. Styling changes and spelling fixes (Madhan Mohan Reddy via pallavkul)

Posted by nc...@apache.org.
AMBARI-19819. Styling changes and spelling fixes (Madhan Mohan Reddy via pallavkul)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: a9ddb2fd2014954cb35821f8ad1f33faa3ae1d95
Parents: b01438c
Author: pallavkul <pa...@gmail.com>
Authored: Thu Feb 2 11:54:17 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Thu Feb 2 11:54:17 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/asset-config.js |   6 +-
 .../ui/app/components/bundle-config.js          |   2 +-
 .../ui/app/components/flow-designer.js          |   2 -
 .../resources/ui/app/components/job-config.js   |   1 -
 .../resources/ui/app/components/job-details.js  |  28 ++--
 .../main/resources/ui/app/components/save-wf.js |   1 -
 .../src/main/resources/ui/app/styles/app.less   | 168 +++++++++++++------
 .../app/templates/components/archive-config.hbs |   4 +-
 .../ui/app/templates/components/arg-config.hbs  |   2 +-
 .../app/templates/components/asset-config.hbs   |   2 +-
 .../ui/app/templates/components/asset-list.hbs  |   2 +-
 .../app/templates/components/asset-manager.hbs  |   2 +-
 .../components/bundle-coord-config.hbs          |   2 +-
 .../templates/components/bundle-job-details.hbs |   6 +-
 .../app/templates/components/coord-config.hbs   |   6 +-
 .../templates/components/coord-job-details.hbs  |  10 +-
 .../app/templates/components/date-with-expr.hbs |   4 +-
 .../templates/components/designer-errors.hbs    |   2 +-
 .../templates/components/designer-workspace.hbs |   2 +-
 .../ui/app/templates/components/file-config.hbs |   6 +-
 .../app/templates/components/global-config.hbs  |   4 +-
 .../ui/app/templates/components/help-icon.hbs   |   3 +
 .../ui/app/templates/components/hive-action.hbs |   2 +-
 .../app/templates/components/hive2-action.hbs   |   2 +-
 .../components/instance-list-config.hbs         |   2 +-
 .../ui/app/templates/components/job-config.hbs  |   8 +-
 .../ui/app/templates/components/job-details.hbs |  13 +-
 .../ui/app/templates/components/job-row.hbs     |   2 +-
 .../templates/components/name-value-config.hbs  |   2 +-
 .../ui/app/templates/components/pig-action.hbs  |   2 +-
 .../templates/components/prepare-config-fs.hbs  |  12 +-
 .../app/templates/components/prepare-config.hbs |   6 +-
 .../ui/app/templates/components/save-wf.hbs     |   2 +-
 .../app/templates/components/shell-action.hbs   |   2 +-
 .../app/templates/components/spark-action.hbs   |   2 +-
 .../app/templates/components/sub-workflow.hbs   |   2 +-
 .../components/workflow-action-editor.hbs       |   2 +-
 .../templates/components/workflow-config.hbs    |   2 +-
 .../components/workflow-job-details.hbs         |  14 +-
 .../ui/app/validators/operand-length.js         |   2 +-
 40 files changed, 207 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/components/asset-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/asset-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/asset-config.js
index 62d3be3..cedb318 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/asset-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/asset-config.js
@@ -52,9 +52,9 @@ export default Ember.Component.extend(Validations, {
           this.sendAction('saveAssetConfig');
         }
       }.bind(this)).catch(function(data){
-        model.set("inProgress", false);
-        return "There is some problem while checking asset name availability. Please try again.";
-      });
+        this.set("inProgress", false);
+        this.set("assetErrorMsg", "There is some problem while checking asset name availability. Please try again.");
+      }.bind(this));
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
index fe6dfd1..7b24d34 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
@@ -31,7 +31,7 @@ const Validations = buildValidations({
       validator('operand-length', {
         min : 1,
         dependentKeys: ['bundle','bundle.coordinators.[]'],
-        message : 'Alteast one coordinator is required',
+        message : 'At least one coordinator is required',
         disabled(model, attribute) {
           return !model.get('bundle');
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
index f897d48..ad5f3f8 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
@@ -719,11 +719,9 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
   showingErrorMsgInDesigner(data){
       var self = this, stackTraceMsg = self.getStackTrace(data.responseText);
       if(stackTraceMsg.length){
-        self.set("isStackTraceVisible", true);
         self.set("stackTrace", stackTraceMsg);
         self.set("isStackTraceAvailable", true);
       } else {
-        self.set("isStackTraceVisible", false);
         self.set("isStackTraceAvailable", false);
       }
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/components/job-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/job-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/job-config.js
index beb15f6..dde012d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/job-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/job-config.js
@@ -224,7 +224,6 @@ export default Ember.Component.extend(Validations, {
       error: function(response) {
         console.log(response);
         this.set("savingInProgress",false);
-        this.set("isStackTraceVisible",true);
         this.showNotification({
           "type": "error",
           "message": "Error occurred while saving "+ this.get('displayName').toLowerCase(),

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/components/job-details.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/job-details.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/job-details.js
index 91e1ce3..d0c5d11 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/job-details.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/job-details.js
@@ -330,18 +330,22 @@ export default Ember.Component.extend({
       },
       doRefresh : function(){
         var tab = this.$(this.get('currentTab')).prop('href');
-        var currentTabHref = tab.substr(tab.indexOf('#')+1);
-        if(currentTabHref === 'jobLog'){
-          this.send('getJobLog', this.get('logParams'));
-        }else if(currentTabHref === 'jobErrorLog'){
-          this.send('getErrorLog');
-        }else if(currentTabHref === 'jobAuditLog'){
-          this.send('getAuditLog');
-        }else if(currentTabHref === 'jobDag'){
-          this.send('getJobDag');
-        }else if(currentTabHref === 'coordActionReruns'){
-          this.send('getCoordActionReruns');
-        }else{
+        if (tab) {
+          var currentTabHref = tab.substr(tab.indexOf('#')+1);
+          if(currentTabHref === 'jobLog'){
+            this.send('getJobLog', this.get('logParams'));
+          }else if(currentTabHref === 'jobErrorLog'){
+            this.send('getErrorLog');
+          }else if(currentTabHref === 'jobAuditLog'){
+            this.send('getAuditLog');
+          }else if(currentTabHref === 'jobDag'){
+            this.send('getJobDag');
+          }else if(currentTabHref === 'coordActionReruns'){
+            this.send('getCoordActionReruns');
+          }else{
+            this.sendAction('doRefresh');
+          }
+        } else {
           this.sendAction('doRefresh');
         }
       },

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
index 54d13ff..a2210a6 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
@@ -103,7 +103,6 @@ export default Ember.Component.extend(Validations, {
     }.bind(this)).catch(function(response){
         console.log(response);
         self.set("savingInProgress",false);
-        self.set("isStackTraceVisible",true);
         self.showNotification({
           "type": "error",
           "message": "Error occurred while saving "+ self.get('displayName').toLowerCase(),

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
index 5080560..3707280 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
@@ -17,13 +17,18 @@
 
 @bgColor: #eee;
 @bgGreenActive: #5bb75b;
-@moduleHeaderBgColor: #fafafa;
+@navBarColor: #fafafa;
+@tabPanelHeadingColor: #fff;
+@moduleHeaderBgColor: #fff;
 @nodeDefaultHeight: 40px;
 @nodeDefaultWidth: 40px;
 @defaultRed: red;
 @defaultBorderRadius: 5px;
 @nodeActionBgColor: #E5E5E5;
 @defaultPropertiesEditorHeight: 350px;
+@actionLinkColor: #49aebf;
+@navTabAnchorColor: #777;
+@navTabAnchorHighlightedColor: #555;
 
 body {
     background: @bgColor;
@@ -33,6 +38,11 @@ body {
 a {
   color: #000;
 }
+
+.navbar-default {
+    background-color: @navBarColor;
+}
+
 .padding0 {
   padding: 0px;
 }
@@ -86,7 +96,7 @@ a {
 }
 
 .container-custom {
-  background-color: @moduleHeaderBgColor;
+  background-color: @moduleHeaderBgColor !important;
 }
 
 .disabled {
@@ -94,7 +104,7 @@ a {
 }
 #header {
     white-space: nowrap;
-    background: @bgGreenActive;
+    background: #101010;
     background-position: 10px;
     color: yellow;
     height: 50px;
@@ -554,6 +564,7 @@ input:invalid {
     top:50px;
     left: 75%;
     z-index: 1;
+    margin: 3px 0;
 }
 
 #action_properties_dialog .modal-body {
@@ -589,7 +600,8 @@ input:invalid {
 #killnode-manager-dialog .modal-dialog,
 #asset_manager_dialog .modal-dialog,
 #asset_config_dialog .modal-dialog,
-#asset_list_dialog .modal-dialog {
+#asset_list_dialog .modal-dialog,
+#actionDetailsModal .modal-dialog {
     width: 800px;
 }
 #configureJob .modal-dialog{
@@ -607,21 +619,20 @@ input:invalid {
 #workflow_sla_dialog .panel-default > .panel-heading,
 #workflow_credentials_dialog .panel-default > .panel-heading,
 #configureWorkfowModal .panel-default > .panel-heading,
+#configureJob .panel-default > .panel-heading,
 #workflow_parameters_dialog .panel-default > .panel-heading,
 #killnode-manager-dialog .panel-default > .panel-heading,
 #asset_manager_dialog .panel-default > .panel-heading,
 #asset_config_dialog .panel-default > .panel-heading,
-#asset_list_dialog .panel-default > .panel-heading,
- .whiteLabel, .whiteLabel:hover, .whiteLabel:focus, .whiteLabel:visited, .whiteLabel:active {
-    background-color: @bgGreenActive;
-    color: #fff;
+#asset_list_dialog .panel-default > .panel-heading {
+  background-color: #f8f8f8;
+  color: @actionLinkColor;
 }
-.btn-primary{
-    background-color: @bgGreenActive !important;
-    border-color: #289028 !important;
+
+.whiteLabel, .whiteLabel:hover, .whiteLabel:focus, .whiteLabel:visited, .whiteLabel:active {
     color: #fff;
 }
-.btn-primary:visited,.btn-primary:focus,.btn-primary:active,.btn-primary.active{
+.btn-primary, .btn-primary:visited, .btn-primary:focus, .btn-primary:active, .btn-primary.active {
     background-color: @bgGreenActive !important;
     border-color: #289028 !important;
     color: #fff;
@@ -631,6 +642,16 @@ input:invalid {
   border-color: #289028 !important;
   color: #fff;
 }
+.btn-secondary, .btn-secondary:visited, .btn-secondary:focus, .btn-secondary:active, .btn-secondary.active {
+    color: #333;
+    background-color: #ddd;
+    border-color: #ccc;
+}
+.btn-secondary:hover {
+    color: #333;
+    background-color: #ccc;
+    border-color: #ccc;
+}
 ._actions_popup {
     padding: 4px;
 }
@@ -712,7 +733,7 @@ input:invalid {
   display: none !important;
 }
 #search-bar .bootstrap-tagsinput {
-    width: 300px;
+    width: 350px;
     border-radius: 0px;
     line-height: 20px;
     vertical-align: top;
@@ -781,13 +802,15 @@ input:invalid {
   border-radius: 0px;
 }
 
-.listing thead {
-    background: #f5f5f5;
-}
+// .listing thead {
+//     background: #f5f5f5;
+// }
 
 .listing th {
-  border-left : 1px solid #ddd;
-  border-bottom: 1px solid #ddd !important;
+  border: 0 !important;
+  padding: 8px 5px !important;
+  font-weight: normal;
+  color: #777;
 }
 
 .listing tr th:first-child {
@@ -882,6 +905,10 @@ input:invalid {
   border-bottom: 1px solid #ddd;
 }
 
+#dashboard {
+  border-top: 0;
+}
+
 #loading {
     position: absolute;
     top: 20%;
@@ -1456,6 +1483,7 @@ input:invalid {
 
 .tab-panel-heading {
   margin-top: 2px;
+  background-color: @tabPanelHeadingColor;
 }
 
 .borderTopNone {
@@ -1528,15 +1556,15 @@ input:invalid {
 .breadcrumb {
   padding: 0px;
   margin: 0px;
+  background-color: @moduleHeaderBgColor;
 }
 
 .breadcrumb-item {
   color: #777;
-  font-size: 11px;
 }
 
 .breadcrumb-item a {
-  color: #777;
+  color: @actionLinkColor;
 }
 
 .action-file-picker {
@@ -1572,16 +1600,20 @@ input:invalid {
   width: 98%;
 }
 .asset-list-panel-header {
-  background-color: #f5f5f5;
+  background-color: #fff;
   border-bottom-left-radius: 0px;
   border-bottom-right-radius: 0px;
+  border-top-right-radius: 0px;
+  border-top-right-radius: 0px;
+  border-left: 0;
+  border-right: 0;
 }
 .asset-list-panel-body {
   max-height: 200px;
   overflow-y: scroll;
   border-top-left-radius: 0px;
   border-top-right-radius: 0px;
-  border-top: 0px;
+  border: 0px;
 }
 #search-table td:first-child {
   width:5%;
@@ -1623,17 +1655,11 @@ input:invalid {
   width: 100%;
   min-height: 100px;
 }
-.displayBlock {
- display : block;
-}
 .no-asset-records {
   text-align: center;
   padding: 3px;
   overflow-y: auto;
 }
-#projectsList .modal-dialog {
-  width:850px;
-}
 .custom-action-xml{
   width: 100%;
   min-height: 175px;
@@ -1642,36 +1668,70 @@ input:invalid {
   width: 650px;
   top: 60px;
 }
-.tab-pane #draftsTable, #projectsList #dashboard, .tab-pane .searchWorkflows {
-  display : none;
+.action-link, .action-link:hover, .action-link:focus {
+  color: @actionLinkColor !important;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+    background-color: #fff;
 }
-#projectDeleteModal .modal-dialog {
-  width:500px;
+.listing thead {
+    background: #fff;
 }
-.projects-list {
-  white-space: nowrap;
-  width: 100%;
-  overflow: hidden;
-  text-overflow: ellipsis;
+.panel-footer {
+  background-color: #fff;
 }
-.proj-menu {
-  width:200px;
+.table-bordered {
+  border: 0;
 }
-.pl10 {
-  padding-left:10px;
+.search-bar {
+  border-bottom: 1px solid #ddd;
 }
-.fixed-col {
-  width:15%;
+.edit-workflow-btn {
+  margin-top: 4px;
+  margin-right: 4px;
 }
-.width100 {
-    white-space: nowrap;
-    width: 100px;
-    overflow: hidden;
-    text-overflow: ellipsis;
+.nav-tabs > li > a {
+  color: @navTabAnchorColor;
 }
-.l-input {
-  height: 30px;
-  width: 60%;
-  margin-bottom: 10px;
-  margin-right: 3px;
-}
\ No newline at end of file
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+  color: @navTabAnchorHighlightedColor;
+}
+.displayBlock {
+  display : block;
+}
+#projectsList .modal-dialog {
+  width:850px;
+}
+.tab-pane #draftsTable, #projectsList #dashboard, .tab-pane .searchWorkflows {
+   display : none;
+ }
+ #projectDeleteModal .modal-dialog {
+   width:500px;
+ }
+ .projects-list {
+   white-space: nowrap;
+   width: 100%;
+   overflow: hidden;
+   text-overflow: ellipsis;
+ }
+ .proj-menu {
+   width:200px;
+ }
+ .pl10 {
+   padding-left:10px;
+ }
+ .fixed-col {
+   width:15%;
+ }
+ .width100 {
+   white-space: nowrap;
+   width: 100px;
+   overflow: hidden;
+   text-overflow: ellipsis;
+ }
+ .l-input {
+   height: 30px;
+   width: 60%;
+   margin-bottom: 10px;
+   margin-right: 3px;
+ }

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/archive-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/archive-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/archive-config.hbs
index 166a202..21524c0 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/archive-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/archive-config.hbs
@@ -33,12 +33,12 @@
       <div class="input-group">
         {{input type="text" class="form-control" value=archive placeholder="Archive"}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser" "archive"}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "archive"}}>Browse</button>
         </span>
       </div>
     </div>
     <div class="col-xs-1">
-      <input class="form-control  btn btn-success" type="button" {{action "addArchive"}} value="+">
+      <input class="form-control  btn btn-secondary" type="button" {{action "addArchive"}} value="+">
     </div>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/arg-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/arg-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/arg-config.hbs
index e11d896..539d9fa 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/arg-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/arg-config.hbs
@@ -38,7 +38,7 @@
       {{input type="text" class="form-control" value=arg placeholder=title}}
     </div>
     <div class="col-xs-1">
-      <input class="form-control btn btn-success" type="button" value="+" {{action "addArg"}}>
+      <input class="form-control btn btn-secondary" type="button" value="+" {{action "addArg"}}>
     </div>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-config.hbs
index 7bc48d7..816b360 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-config.hbs
@@ -51,7 +51,7 @@
         </form>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-secondary" data-dismiss="modal" {{action 'close'}}>Cancel</button>
+        <button type="button" class="btn btn-default" data-dismiss="modal" {{action 'close'}}>Cancel</button>
         <button type="button" class="btn btn-primary" {{action 'save'}}>Save</button>
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-list.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-list.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-list.hbs
index 7fd1236..453642d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-list.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-list.hbs
@@ -63,7 +63,7 @@
         </div>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-secondary" data-dismiss="modal" {{action 'close'}}>Cancel</button>
+        <button type="button" class="btn btn-default" data-dismiss="modal" {{action 'close'}}>Cancel</button>
         <button type="button" class="btn btn-primary" disabled={{assetNotSelected}} {{action 'importAsset'}}>Import</button>
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-manager.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-manager.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-manager.hbs
index 6ca85c6..8a34333 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-manager.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/asset-manager.hbs
@@ -68,7 +68,7 @@
         </div>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-secondary" data-dismiss="modal" {{action 'close'}}>Cancel</button>
+        <button type="button" class="btn btn-default" data-dismiss="modal" {{action 'close'}}>Cancel</button>
       </div>
     </div>
   </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
index 140ff0a..56cacd6 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
@@ -22,7 +22,7 @@
       <div class="input-group">
         {{input type="text" class="form-control" name="appPath" focus-out="showCoordinatorName" value=coordinator.appPath placeholder="Path of the coordinator file"}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser" "coordinator.appPath"}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "coordinator.appPath"}}>Browse</button>
           <button class="btn btn-default" type="button" {{action "openTab" 'coord' coordinator.appPath}} name="button"><i class="fa fa-external-link"></i></button>
         </span>
       </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
index 97eb859..c780943 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
@@ -70,8 +70,8 @@
       </thead>
       <tbody>
         {{#each model.bundleCoordJobs as |coordJob|}}
-        <tr {{action 'showCoord' coordJob.coordJobId}} class="{{if (eq actionInfo model.actionDetails) "active"}}">
-          <td class="pointer">{{coordJob.coordJobName}}</td>
+        <tr class="{{if (eq actionInfo model.actionDetails) "active"}}">
+          <td class="pointer action-link" {{action 'showCoord' coordJob.coordJobId}}>{{coordJob.coordJobName}}</td>
           <td>{{coordJob.status}}</td>
           <td>{{coordJob.user}}</td>
           <td>{{coordJob.group}}</td>
@@ -97,7 +97,7 @@
   <div role="tabpanel" class="tab-pane" id="jobConfig">
     <div class="panel panel-default">
       <div class="panel-body preview">
-        <table class="table table-striped configuration-property-table">
+        <table class="table table-striped configuration-property-table listing">
           <thead>
             <tr>
               <th class="propertyName">Name</th>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
index 1c80312..7b607ca 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
@@ -105,7 +105,7 @@
                 <div class="input-group">
                   {{input type="text" class="form-control" name="appPath" focus-out="showWorkflowName" value=coordinator.workflow.appPath placeholder="Path of the workflow file"}}
                   <span class="input-group-btn">
-                    <button class="btn btn-primary" type="button" {{action "openFileBrowser" "coordinator.workflow.appPath"}}>Browse</button>
+                    <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "coordinator.workflow.appPath"}}>Browse</button>
                     <button class="btn btn-default" type="button" {{action "openTab" 'wf' coordinator.workflow.appPath}} name="button"><i class="fa fa-external-link"></i></button>
                   </span>
                 </div>
@@ -199,10 +199,10 @@
                   <div class="">
                     <label for="" class="control-label col-xs-2">Data Input Type</label>
                     <div class="btn-group">
-                      <button {{action 'toggleDataTnput' 'simple'}} type="button" class="btn btn-default {{if (eq coordinator.dataInputType 'simple') 'btn-primary' ''}} scope-btn">
+                      <button {{action 'toggleDataTnput' 'simple'}} type="button" class="btn btn-default {{if (eq coordinator.dataInputType 'simple') 'btn-secondary' ''}} scope-btn">
                         Simple
                       </button>
-                      <button {{action 'toggleDataTnput' 'logical'}} type="button" class="btn btn-default {{if (eq coordinator.dataInputType 'logical') 'btn-primary' ''}} scope-btn">
+                      <button {{action 'toggleDataTnput' 'logical'}} type="button" class="btn btn-default {{if (eq coordinator.dataInputType 'logical') 'btn-secondary' ''}} scope-btn">
                         Conditional
                       </button>
                     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
index 1418121..b3f1097 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
@@ -96,8 +96,12 @@
       </thead>
       <tbody>
         {{#each model.actions as |actionInfo|}}
-        <tr {{action 'showWorkflow' actionInfo.externalId}} class="{{if (eq actionInfo model.actionDetails) "active"}}">
-          <td class="pointer">{{actionInfo.id}}</td>
+        <tr class="{{if (eq actionInfo model.actionDetails) "active"}}">
+          {{#if actionInfo.externalId}}
+            <td class="pointer action-link" {{action 'showWorkflow' actionInfo.externalId}}>{{actionInfo.id}}</td>
+          {{else}}
+            <td>{{actionInfo.id}}</td>
+          {{/if}}
           <td>{{actionInfo.status}}</td>
           <td>{{actionInfo.externalId}}</td>
           <td>{{actionInfo.errorCode}}</td>
@@ -121,7 +125,7 @@
   <div role="tabpanel" class="tab-pane" id="jobConfig">
     <div class="panel panel-default">
       <div class="panel-body preview">
-        <table class="table table-striped configuration-property-table">
+        <table class="table table-striped configuration-property-table listing">
           <thead>
             <tr>
               <th class="propertyName">Name</th>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/date-with-expr.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/date-with-expr.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/date-with-expr.hbs
index 4c86f3d..beba820 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/date-with-expr.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/date-with-expr.hbs
@@ -24,10 +24,10 @@
   <div class="col-xs-7">
     <div class="input-group">
       <div class="input-group-btn">
-        <button onclick={{action (mut dateField.type) "date"}} type="button" class="btn btn-default {{if (eq dateField.type 'date') 'btn-primary' ''}} scope-btn">
+        <button onclick={{action (mut dateField.type) "date"}} type="button" class="btn btn-default {{if (eq dateField.type 'date') 'btn-secondary' ''}} scope-btn">
           Date
         </button>
-        <button onclick={{action (mut dateField.type) "expr"}} type="button" class="btn btn-default {{if (eq dateField.type 'expr') 'btn-primary' ''}} scope-btn">
+        <button onclick={{action (mut dateField.type) "expr"}} type="button" class="btn btn-default {{if (eq dateField.type 'expr') 'btn-secondary' ''}} scope-btn">
           Expression
         </button>
       </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-errors.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-errors.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-errors.hbs
index 8b2911b..8438255 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-errors.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-errors.hbs
@@ -15,7 +15,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<div id="designer-errors" class="paddingtop10">
+<div id="designer-errors">
   {{#if (or (gt errors.length 0) (gt validationErrors.length 0))}}
     <div id="alert"class="alert alert-danger alert-dismissible fade in workflow-error" role="alert">
       {{#if (gt errors.length 0)}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
index f7a93e0..0bd7195 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
@@ -163,7 +163,7 @@
   {{/if}}
   {{#if showingWarning}}
   {{#confirmation-dialog title="Confirm workflow reset"
-    confirmationMessage="Any unsaved changes may be lost. Do you want to close this tab ?"
+    confirmationMessage="Any unsaved changes will be lost. Do you want to close this tab ?"
     okBtnText="Continue" cancelBtnText="Cancel" onOk="closeTab"}}{{/confirmation-dialog}}
   {{/if}}
   <!--

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/file-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/file-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/file-config.hbs
index 66d3460..11066cb 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/file-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/file-config.hbs
@@ -23,7 +23,7 @@
       <div class="input-group">
         {{input type="text" class="form-control" value=file.value placeholder=title}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser" index}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser" index}}>Browse</button>
         </span>
       </div>
     </div>
@@ -42,12 +42,12 @@
       <div class="input-group">
         {{input type="text" class="form-control" value=file placeholder=title}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser"}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser"}}>Browse</button>
         </span>
       </div>
     </div>
     <div class="col-xs-1">
-      <input class="form-control  btn btn-success" type="button" {{action "addFile"}} value="+">
+      <input class="form-control  btn btn-secondary" type="button" {{action "addFile"}} value="+">
     </div>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/global-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/global-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/global-config.hbs
index 923d89e..e3d49ec 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/global-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/global-config.hbs
@@ -22,7 +22,7 @@
         <button type="button" class="close" data-dismiss="modal" aria-label="Close" {{action 'close'}}>
           <span aria-hidden="true">&times;</span>
         </button>
-        <h4 class="modal-title">Global Configuration</h4>
+        <h4 class="modal-title">Global Configurations</h4>
       </div>
       <div class="modal-body">
           <form class="form-horizontal" id="global_properties">
@@ -57,7 +57,7 @@
         </form>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-secondary" data-dismiss="modal" {{action 'close'}}>Cancel</button>
+        <button type="button" class="btn btn-default" data-dismiss="modal" {{action 'close'}}>Cancel</button>
         <button type="button" class="btn btn-primary" {{action 'save'}}>Save</button>
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/help-icon.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/help-icon.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/help-icon.hbs
index a853955..61893e2 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/help-icon.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/help-icon.hbs
@@ -20,3 +20,6 @@
       <i class="fa fa-question-circle"></i>
   </button>
 </a>
+<a class="action-link hide" href="https://oozie.apache.org/docs/4.2.0/WorkflowFunctionalSpec.html" target="_blank">
+  Oozie docs
+</a>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive-action.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive-action.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive-action.hbs
index eb959c3..3d59e23 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive-action.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive-action.hbs
@@ -33,7 +33,7 @@
         <div class="input-group">
           {{input type="text" class="form-control" name="script" value=actionModel.script placeholder="hive.hql"}}
           <span class="input-group-btn">
-            <button class="btn btn-primary" type="button" {{action "openFileBrowser" "actionModel.script"}}>Browse</button>
+            <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "actionModel.script"}}>Browse</button>
           </span>
         </div>
         {{field-error model=this field='actionModel.script' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive2-action.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive2-action.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive2-action.hbs
index 563cca8..8adf64c 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive2-action.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hive2-action.hbs
@@ -34,7 +34,7 @@
         <div class="input-group">
           {{input type="text" class="form-control" name="script" value=actionModel.script placeholder="hive.hql"}}
           <span class="input-group-btn">
-            <button class="btn btn-primary" type="button" {{action "openFileBrowser" "actionModel.script"}}>Browse</button>
+            <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "actionModel.script"}}>Browse</button>
           </span>
         </div>
         {{field-error model=this field='actionModel.script' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/instance-list-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/instance-list-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/instance-list-config.hbs
index 94f4e39..266c84c 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/instance-list-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/instance-list-config.hbs
@@ -28,7 +28,7 @@
   <div class="form-group">
     {{#date-with-expr inputName="instance" label="Instance" inputPlaceholder="Instance" dateField=instance}}
       <div class="col-xs-1">
-        <input class="form-control btn btn-success" type="button" value="+" {{action "addInstance"}}>
+        <input class="form-control btn btn-secondary" type="button" value="+" {{action "addInstance"}}>
       </div>
     {{/date-with-expr}}
   </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
index 7ffdf5f..bca8dfa 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
@@ -45,7 +45,7 @@
                 <div class="input-group">
                   {{input class="form-control" type="text" name=path.name value=path.value}}
                   <span class="input-group-btn">
-                    <button type="button" class="btn btn-primary" {{action "selectFile" path.name}}>Browse</button>
+                    <button type="button" class="btn btn-secondary" {{action "selectFile" path.name}}>Browse</button>
                   </span>
                 </div>
                 {{field-error model=this field='filePath' showErrorMessage=showErrorMessage}}
@@ -57,7 +57,7 @@
         {{else if (and (eq type 'coord') containsParameteriedPaths)}}
         <div class="col-xs-24">
           <div class="alert alert-warning" role="alert">
-            Workflow path contains variables. Please provide the absolute path to auto detect templatized variables. Skip this step if you have configured all the templatized varibales of the workflow in the coordinator.
+            Workflow path contains variables. Please provide the absolute path to auto detect templatized variables. Skip this step if you have configured all the templatized variables of the workflow in the coordinator.
           </div>
         </div>
         <div class="row form-group">
@@ -68,7 +68,7 @@
             <div class="input-group">
               {{input class="form-control" type="text" name='wfPath' value=parameterizedWorkflowPath}}
               <span class="input-group-btn">
-                <button type="button" class="btn btn-primary" {{action "selectFile" 'wfPath'}}>Browse</button>
+                <button type="button" class="btn btn-secondary" {{action "selectFile" 'wfPath'}}>Browse</button>
               </span>
             </div>
             {{field-error model=this field='filePath' showErrorMessage=showErrorMessage}}
@@ -100,7 +100,7 @@
                 <div class="input-group">
                   {{input class="form-control" name="filePath" type="text" value=filePath}}
                   <span class="input-group-btn">
-                    <button type="button" class="btn btn-primary" {{action "selectFile" "filePath"}}>Browse</button>
+                    <button type="button" class="btn btn-secondary" {{action "selectFile" "filePath"}}>Browse</button>
                   </span>
                 </div>
                 {{field-error model=this field='filePath' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
index c783ad0..044e053 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
@@ -16,8 +16,12 @@
 * limitations under the License.
 }}
 <div id="job-details" class="panel panel-default">
-  <div class="panel-heading">
+  <div class="panel-heading container-custom">
     <div class="pull-right">
+      <button type="button" class="btn btn-default" title="Refresh" {{action 'doRefresh'}}>
+          <i class="fa fa-refresh"></i>
+      </button>
+
       {{#link-to 'design.dashboardtab' class="backto-dashboard"}}
       <button type="button" class="btn btn-default" title="Workflow Dashboard">
           <i class="fa fa-th"></i>
@@ -47,7 +51,6 @@
           </li>
         </ol>
       </div>
-      <span class="fa fa-refresh fa-1 pointer btn btn-default" title="Refresh" {{action 'doRefresh'}} aria-hidden="true"></span>
     </div>
     <div class="clearfix"></div>
   </div>
@@ -67,9 +70,9 @@
             <li role="presentation"><a href="#jobConfig" aria-controls="jobConfig" role="tab" data-toggle="tab">Configuration</a></li>
             <li {{action 'getJobDefinition'}} role="presentation"><a href="#jobDefinition" aria-controls="jobDefinition" role="tab" data-toggle="tab">Definition</a></li>
             <li role="presentation" class="pull-right">
-				<button type="button" class="btn btn-success" title="Edit Workflow" {{action "editWorkflow" model.appPath}}>
-				   Edit Workflow
-				</button>
+              <a class="pointer action-link" href="#" title="Edit Workflow" {{action "editWorkflow" model.appPath}}>
+                Edit Workflow
+              </a>
             </li>
           </ul>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-row.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-row.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-row.hbs
index 25d81dd..be9310e 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-row.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-row.hbs
@@ -26,7 +26,7 @@
   {{/if}}
 
 </td>
-<td {{action 'showJobDetails' job.id}} class="pointer"> {{job.appName}}
+<td {{action 'showJobDetails' job.id}} class="pointer action-link"> {{job.appName}}
 </td>
 <td class="{{job.status}}"> {{job.status}} </td>
 <td> {{job.user}}</td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/name-value-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/name-value-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/name-value-config.hbs
index f69a2d4..f0d2a63 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/name-value-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/name-value-config.hbs
@@ -51,7 +51,7 @@
       {{input class="form-control" type="text" indValidations="required"  name="value" value=propertyValue placeholder="value"}}
     </div>
     <div class="col-xs-1">
-      <input class="form-control btn btn-success" type="button" {{action "addProperty"}} value="+">
+      <input class="form-control btn btn-secondary" type="button" {{action "addProperty"}} value="+">
     </div>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/pig-action.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/pig-action.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/pig-action.hbs
index d0fe490..84ce56c 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/pig-action.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/pig-action.hbs
@@ -23,7 +23,7 @@
         <div class="input-group">
         {{input type="text" class="form-control" validations="required" name="script" value=actionModel.script placeholder="myscript.pig"}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser" "actionModel.script"}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "actionModel.script"}}>Browse</button>
         </span>
       </div>
         {{field-error model=this field='actionModel.script' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config-fs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config-fs.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config-fs.hbs
index 545664f..9910071 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config-fs.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config-fs.hbs
@@ -33,7 +33,7 @@
           </select>
         </div>
         <div class="col-xs-1">
-          <input class="form-control  btn btn-success" type="button" {{action "addPrepare" index}} value="+">
+          <input class="form-control  btn btn-secondary" type="button" {{action "addPrepare" index}} value="+">
         </div>
         {{#if (not-eq index 0)}}
           <div class="col-xs-1">
@@ -48,7 +48,7 @@
           <div class="input-group">
             {{input type="text" class="form-control" value=prep.path placeholder="path of the directory"}}
             <span class="input-group-btn">
-              <button class="btn btn-primary" type="button" {{action "openFileBrowserForListItem" index "path"}}>Browse</button>
+              <button class="btn btn-secondary" type="button" {{action "openFileBrowserForListItem" index "path"}}>Browse</button>
             </span>
           </div>
         </div>
@@ -70,7 +70,7 @@
           <div class="input-group">
             {{input type="text" class="form-control" name="name" value=prep.path placeholder="Path"}}
             <span class="input-group-btn">
-              <button class="btn btn-primary" type="button" {{action "openFileBrowserForListItem" index "path"}}>Browse</button>
+              <button class="btn btn-secondary" type="button" {{action "openFileBrowserForListItem" index "path"}}>Browse</button>
             </span>
           </div>
         </div>
@@ -117,7 +117,7 @@
           <div class="input-group">
             {{input type="text" class="form-control" name="name" value=prep.source placeholder="Source"}}
             <span class="input-group-btn">
-              <button class="btn btn-primary" type="button" {{action "openFileBrowserForListItem" index "source"}}>Browse</button>
+              <button class="btn btn-secondary" type="button" {{action "openFileBrowserForListItem" index "source"}}>Browse</button>
             </span>
           </div>
         </div>
@@ -138,7 +138,7 @@
           <div class="input-group">
             {{input class="form-control" type="text" indValidations="required"  name="value" value=prep.target placeholder="Target"}}
             <span class="input-group-btn">
-              <button class="btn btn-primary" type="button" {{action "openFileBrowserForListItem" index "target"}}>Browse</button>
+              <button class="btn btn-secondary" type="button" {{action "openFileBrowserForListItem" index "target"}}>Browse</button>
             </span>
           </div>
         </div>
@@ -161,7 +161,7 @@
           <div class="input-group">
             {{input type="text" class="form-control" name="name" value=prep.path placeholder="Path"}}
             <span class="input-group-btn">
-              <button class="btn btn-primary" type="button" {{action "openFileBrowserForListItem" index "path"}}>Browse</button>
+              <button class="btn btn-secondary" type="button" {{action "openFileBrowserForListItem" index "path"}}>Browse</button>
             </span>
           </div>
         </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config.hbs
index fab0d97..a9d6037 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/prepare-config.hbs
@@ -29,7 +29,7 @@
         <div class="input-group">
           {{input type="text" class="form-control" value=prep.path placeholder="path of the directory"}}
           <span class="input-group-btn">
-            <button class="btn btn-primary" type="button" {{action "openFileBrowser" index}}>Browse</button>
+            <button class="btn btn-secondary" type="button" {{action "openFileBrowser" index}}>Browse</button>
           </span>
         </div>
       </div>
@@ -54,12 +54,12 @@
       <div class="input-group">
         {{input type="text" class="form-control" value=preparePath placeholder="path of the directory"}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser"}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser"}}>Browse</button>
         </span>
       </div>
     </div>
     <div class="col-xs-1">
-      <input class="form-control  btn btn-success" type="button" {{action "addPrepare"}} value="+">
+      <input class="form-control  btn btn-secondary" type="button" {{action "addPrepare"}} value="+">
     </div>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/save-wf.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/save-wf.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/save-wf.hbs
index 913dc04..aafae4a 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/save-wf.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/save-wf.hbs
@@ -48,7 +48,7 @@
                 <div class="input-group">
                   {{input class="form-control" type="text" name="{{type}}-path"  value=filePath}}
                   <span class="input-group-btn">
-                    <button type="button" class="btn btn-primary" {{action "selectFile"}}>Browse</button>
+                    <button type="button" class="btn btn-secondary" {{action "selectFile"}}>Browse</button>
                   </span>
                 </div>
                 {{field-error model=this field='filePath' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/shell-action.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/shell-action.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/shell-action.hbs
index 4673c732..2cd8207 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/shell-action.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/shell-action.hbs
@@ -24,7 +24,7 @@
       <div class="input-group">
         {{input type="text" class="form-control" name="exec" title="Command or the path of the Shell command to execute" value=actionModel.exec placeholder="Script path or shell command"}}
         <span class="input-group-btn">
-          <button class="btn btn-primary" type="button" {{action "openFileBrowser" "actionModel.exec"}}>Browse</button>
+          <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "actionModel.exec"}}>Browse</button>
         </span>
       </div>
       {{field-error model=this field='actionModel.exec' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/spark-action.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/spark-action.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/spark-action.hbs
index 5b7e7a3..de62e77 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/spark-action.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/spark-action.hbs
@@ -32,7 +32,7 @@
 
           {{input type="text" class="form-control" name="class" value=actionModel.jar placeholder="jar/python"}}
           <span class="input-group-btn">
-            <button class="btn btn-primary" type="button" {{action "openFileBrowser" "actionModel.jar"}}>Browse</button>
+            <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "actionModel.jar"}}>Browse</button>
           </span>
         </div>
         {{field-error model=this field='actionModel.jar' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/sub-workflow.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/sub-workflow.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/sub-workflow.hbs
index 2841188..139747f 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/sub-workflow.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/sub-workflow.hbs
@@ -24,7 +24,7 @@
         <div class="input-group">
           {{input type="text" class="form-control" validations="required" name="appPath" value=actionModel.appPath placeholder="app path"}}
           <span class="input-group-btn">
-            <button class="btn btn-primary" type="button" {{action "openFileBrowser" "actionModel.appPath"}}>Browse</button>
+            <button class="btn btn-secondary" type="button" {{action "openFileBrowser" "actionModel.appPath"}}>Browse</button>
           </span>
         </div>
         {{field-error model=this field='actionModel.appPath' showErrorMessage=showErrorMessage}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
index bb089c0..0c569ec 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
@@ -102,7 +102,7 @@
         </div>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-secondary" data-dismiss="modal" {{action 'closeEditor'}}>Cancel</button>
+        <button type="button" class="btn btn-default" data-dismiss="modal" {{action 'closeEditor'}}>Cancel</button>
         <button type="button" class="btn btn-primary" {{action 'save'}}>Save</button>
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-config.hbs
index d425bd0..0ca8618 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-config.hbs
@@ -41,7 +41,7 @@
                 <div class="input-group">
                   {{input class="form-control" type="text"  value=filePath}}
                   <span class="input-group-btn">
-                  <button type="button" class="btn btn-primary" {{action "selectWorflowFile"}}>Browse</button>
+                  <button type="button" class="btn btn-secondary" {{action "selectWorflowFile"}}>Browse</button>
                 </span>
                 </div>
                 {{input type="checkbox" checked=overwriteWorkflowPath}}Overwrite

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-job-details.hbs
index 89997aa..8865663 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-job-details.hbs
@@ -84,15 +84,15 @@
       </thead>
       <tbody>
         {{#each model.actions as |actionInfo|}}
-        <tr {{action 'getActionDetails' actionInfo}} class="{{if (eq actionInfo model.actionDetails) "active"}}">
-          <td class="pointer">{{actionInfo.name}}</td>
+        <tr class="{{if (eq actionInfo model.actionDetails) "active"}}">
+          <td class="pointer action-link" {{action 'getActionDetails' actionInfo}}>{{actionInfo.name}}</td>
           <td>{{actionInfo.type}}</td>
           <td>{{actionInfo.status}}</td>
           <td>{{actionInfo.transition}}</td>
           <td>{{actionInfo.startTime}}</td>
           <td>{{actionInfo.endTime}}</td>
           {{#unless (eq "-" actionInfo.consoleUrl)}}
-            <td><a target="_blank" href="#" {{action 'openConsoleUrl'  actionInfo.consoleUrl preventDefault=true}}><i class="fa fa-external-link" aria-hidden="true"></i></a></td>
+            <td><a target="_blank" href="#" {{action 'openConsoleUrl'  actionInfo.consoleUrl preventDefault=true}}><i class="fa fa-external-link action-link" aria-hidden="true"></i></a></td>
           {{else}}
             <td>{{actionInfo.consoleUrl}}</td>
           {{/unless}}
@@ -112,7 +112,7 @@
             <li role="presentation"><a href="#actionConf" aria-controls="action-conf" role="tab" data-toggle="tab">Configuration</a></li>
           </ul>
           <div class="tab-content">
-            <div role="tabpanel" class="tab-pane active">
+            <div role="tabpanel" class="tab-pane active" id="actionInfo">
               {{#if model.actionDetails}}
               {{#workflow-job-action-info actionInfo=model.actionDetails}}
               {{/workflow-job-action-info}}
@@ -143,7 +143,7 @@
   <div role="tabpanel" class="tab-pane" id="jobConfig">
     <div class="panel panel-default">
       <div class="panel-body preview">
-        <table class="table table-striped configuration-property-table">
+        <table class="table table-striped configuration-property-table listing">
           <thead>
             <tr>
               <th class="propertyName">Name</th>
@@ -231,11 +231,11 @@
                 </div>
                 <div class="row">
                   <div class="col-md-4 text-bold">Job URL</div>
-                  <div class="col-md-8"><a target="_blank" href="{{model.actionInfo.consoleUrl}}"><i class="fa fa-external-link" aria-hidden="true"></i></a></div>
+                  <div class="col-md-8"><a target="_blank" href="{{model.actionInfo.consoleUrl}}"><i class="fa fa-external-link action-link" aria-hidden="true"></i></a></div>
                 </div>
                 <div class="row pull-right" {{action 'getActionDetails' model.actionInfo}}>
                   <div class="col-md-12">
-                    <a data-toggle="modal" href="#" data-target="#actionDetailsModal">More</a>
+                    <a data-toggle="modal" href="#" data-target="#actionDetailsModal" class="action-link">More</a>
                   </div>
                 </div>
                 {{else}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/a9ddb2fd/contrib/views/wfmanager/src/main/resources/ui/app/validators/operand-length.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/validators/operand-length.js b/contrib/views/wfmanager/src/main/resources/ui/app/validators/operand-length.js
index b79596b..e60fc3d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/validators/operand-length.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/validators/operand-length.js
@@ -25,7 +25,7 @@ const OperandLength = BaseValidator.extend({
       if(options.message){
         return options.message;
       }
-      return "Atleast two inputs are required";
+      return "At least two inputs are required";
     }
   }
 });


[50/50] [abbrv] ambari git commit: Merge branch 'trunk' into branch-dev-patch-upgrade

Posted by nc...@apache.org.
Merge branch 'trunk' into branch-dev-patch-upgrade


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: d222f572ee2952add29e60afeb47a4da7ac98685
Parents: 393ab3e 132e266
Author: Nate Cole <nc...@hortonworks.com>
Authored: Fri Feb 3 09:52:46 2017 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Fri Feb 3 09:52:46 2017 -0500

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 ambari-agent/conf/unix/agent-multiplier.py      |   9 +-
 .../src/main/python/ambari_agent/ActionQueue.py |   5 +
 .../src/main/python/ambari_agent/Controller.py  |  51 +-
 .../ambari_agent/CustomServiceOrchestrator.py   |   4 +
 .../src/main/python/ambari_agent/Hardware.py    |  10 +-
 .../src/main/python/ambari_agent/HostInfo.py    |  19 +-
 .../ambari_agent/StatusCommandsExecutor.py      |   1 +
 .../test/python/ambari_agent/TestHardware.py    |  84 ++-
 .../test/python/ambari_agent/TestHostInfo.py    |  45 +-
 .../python/ambari_agent/TestRegistration.py     |   2 +-
 ambari-agent/src/test/python/unitTests.py       |   3 +
 .../ambari_commons/ambari_metrics_helper.py     |  19 +-
 .../src/main/python/ambari_commons/firewall.py  |  21 +-
 .../ambari/logfeeder/input/InputSimulate.java   |  52 +-
 .../ambari/logfeeder/util/LogFeederUtil.java    |  12 +
 .../other/daterangepicker/js/daterangepicker.js |  90 +--
 .../src/main/webapp/scripts/utils/ViewUtils.js  |   2 +-
 .../scripts/views/common/DatePickerLayout.js    |  40 +-
 .../webapp/scripts/views/tabs/LogFileView.js    |  47 +-
 .../sink/flume/FlumeTimelineMetricsSink.java    |   3 +-
 .../timeline/HadoopTimelineMetricsSink.java     |   6 +-
 .../storm/StormTimelineMetricsReporter.java     |  25 +-
 .../storm/StormTimelineMetricsReporter.java     |  16 +-
 ambari-server/pom.xml                           |  29 +-
 ambari-server/sbin/ambari-server                |   1 +
 .../ambari/server/agent/HeartBeatHandler.java   |   4 +
 .../ambari/server/agent/HeartbeatMonitor.java   |   2 +-
 .../server/checks/AutoStartDisabledCheck.java   |  74 +++
 .../ambari/server/checks/CheckDescription.java  |   7 +
 .../checks/DatabaseConsistencyCheckHelper.java  |  78 +++
 .../server/configuration/Configuration.java     |  40 +-
 .../AmbariCustomCommandExecutionHelper.java     |  21 +-
 .../AmbariManagementControllerImpl.java         |  44 +-
 .../server/controller/ControllerModule.java     |   5 +-
 .../HostStackVersionResourceProvider.java       |  46 +-
 .../server/credentialapi/CredentialUtil.java    | 580 +++++++++++++++++
 .../system/impl/AmbariMetricSinkImpl.java       |  10 +
 .../apache/ambari/server/orm/DBAccessor.java    |   1 +
 .../ambari/server/orm/DBAccessorImpl.java       |   5 +
 .../server/orm/entities/UpgradeEntity.java      |   2 +-
 .../server/orm/helpers/dbms/H2Helper.java       |  74 +++
 .../ambari/server/state/ConfigHelper.java       |  49 +-
 .../org/apache/ambari/server/state/Host.java    |   5 +
 .../server/state/ServiceComponentHost.java      |   5 +
 .../server/state/cluster/ClusterImpl.java       |   2 +-
 .../ambari/server/state/host/HostImpl.java      |  15 +-
 .../svccomphost/ServiceComponentHostImpl.java   |  46 +-
 .../server/upgrade/UpgradeCatalog250.java       | 115 ++--
 .../python/ambari_server/serverConfiguration.py |   9 +-
 .../main/python/ambari_server/serverSetup.py    |   6 +-
 .../common-services/DRUID/0.9.2/metainfo.xml    |  28 +-
 .../alert_hive_interactive_thrift_port.py       |   2 +-
 .../package/scripts/hive_server_interactive.py  |   3 +
 .../0.12.0.2.0/package/scripts/params_linux.py  |  57 +-
 .../PXF/3.0.0/configuration/pxf-profiles.xml    |  15 +-
 .../0.7.0/configuration/ranger-ugsync-site.xml  |   2 +-
 .../common-services/STORM/0.10.0/metrics.json   |   4 +-
 .../common-services/STORM/0.9.3/metrics.json    |   4 +-
 .../TEZ/0.4.0.2.1/configuration/tez-site.xml    |  27 +-
 .../2.1.0.2.0/package/scripts/params_linux.py   |   5 +-
 .../package/scripts/resourcemanager.py          |   2 +
 .../YARN/3.0.0.3.0/configuration/yarn-env.xml   |   3 +
 .../YARN/3.0.0.3.0/kerberos.json                |   7 +-
 .../common-services/YARN/3.0.0.3.0/metainfo.xml |   1 -
 .../3.0.0.3.0/package/scripts/params_linux.py   |   6 +-
 .../package/scripts/resourcemanager.py          |   2 +
 .../YARN/3.0.0.3.0/service_advisor.py           |   5 +-
 .../main/resources/scripts/Ambaripreupload.py   |  16 +
 .../HDP/2.0.6/configuration/cluster-env.xml     |   6 +
 .../services/TEZ/configuration/tez-site.xml     |  65 +-
 .../2.2/services/TEZ/configuration/tez-site.xml |  83 +++
 .../2.3/services/TEZ/configuration/tez-site.xml |   6 +
 .../stacks/HDP/2.3/upgrades/config-upgrade.xml  |  44 +-
 .../HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml |  18 +-
 .../HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml |  18 -
 .../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml |  26 +-
 .../stacks/HDP/2.3/upgrades/upgrade-2.4.xml     |  14 +-
 .../stacks/HDP/2.3/upgrades/upgrade-2.5.xml     |  14 +-
 .../stacks/HDP/2.3/upgrades/upgrade-2.6.xml     |  19 +-
 .../stacks/HDP/2.4/upgrades/config-upgrade.xml  |  47 +-
 .../HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml |  20 +-
 .../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml |  27 +-
 .../stacks/HDP/2.4/upgrades/upgrade-2.5.xml     |  14 +-
 .../stacks/HDP/2.4/upgrades/upgrade-2.6.xml     |  18 +-
 .../configuration/hive-interactive-site.xml     |   2 +-
 .../2.5/services/TEZ/configuration/tez-site.xml |   6 +
 .../stacks/HDP/2.5/services/stack_advisor.py    |  44 +-
 .../stacks/HDP/2.5/upgrades/config-upgrade.xml  |  28 +-
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml |   8 +
 .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml     |   5 +
 .../configuration/hive-interactive-site.xml     |   8 +
 .../PIG/configuration/pig-properties.xml        |  93 +++
 .../services/SPARK2/configuration/livy2-env.xml |   2 +-
 .../HDP/2.6/services/SPARK2/kerberos.json       |   4 +-
 .../services/YARN/configuration/yarn-env.xml    | 165 +++++
 .../services/YARN/configuration/yarn-site.xml   |  26 +
 .../stacks/HDP/2.6/services/YARN/kerberos.json  |   6 +-
 .../stacks/HDP/2.6/services/YARN/metainfo.xml   |   1 +
 .../HDP/3.0/configuration/cluster-env.xml       |   6 +
 .../stacks/HDP/3.0/services/YARN/metainfo.xml   |   2 +
 .../2.2/services/TEZ/configuration/tez-site.xml |  88 ++-
 .../apache/ambari/annotations/LockAreaTest.java |   7 +-
 .../TransactionalLockInterceptorTest.java       |   7 +-
 .../apache/ambari/server/H2DatabaseCleaner.java | 124 ++++
 .../ambari/server/StateRecoveryManagerTest.java |   6 +-
 .../ExecutionCommandWrapperTest.java            |   8 +
 .../ambari/server/actionmanager/StageTest.java  |  11 +-
 .../actionmanager/TestActionDBAccessorImpl.java |   8 +-
 .../server/actionmanager/TestActionManager.java |   9 +-
 .../actionmanager/TestActionScheduler.java      |   7 +-
 .../TestActionSchedulerThreading.java           |   8 +-
 .../ambari/server/actionmanager/TestStage.java  |   9 +
 .../server/agent/HeartbeatProcessorTest.java    |  10 +-
 .../server/agent/TestHeartbeatHandler.java      |   5 +-
 .../server/agent/TestHeartbeatMonitor.java      |   7 +-
 .../server/api/query/JpaSortBuilderTest.java    |   7 +
 .../server/api/services/AmbariMetaInfoTest.java |  12 +-
 .../api/services/PersistKeyValueImplTest.java   |   4 +-
 .../server/api/services/PersistServiceTest.java |   4 +-
 .../checks/AutoStartDisabledCheckTest.java      | 121 ++++
 .../DatabaseConsistencyCheckHelperTest.java     |  58 ++
 .../configuration/RecoveryConfigHelperTest.java |   4 +-
 .../AmbariCustomCommandExecutionHelperTest.java |   7 +-
 .../AmbariManagementControllerTest.java         |   7 +-
 .../server/controller/AmbariServerTest.java     |   5 +-
 .../BackgroundCustomCommandExecutionTest.java   |   7 +-
 ...hYarnCapacitySchedulerReleaseConfigTest.java |   7 +-
 .../RootServiceResponseFactoryTest.java         |   9 +
 .../internal/ActionResourceProviderTest.java    |   7 +-
 .../internal/AlertResourceProviderTest.java     |   4 +-
 .../internal/CalculatedStatusTest.java          |   8 +
 ...ClusterStackVersionResourceProviderTest.java | 213 +++---
 ...leRepositoryVersionResourceProviderTest.java |   8 +-
 .../internal/ComponentResourceProviderTest.java |   2 +
 .../HostStackVersionResourceProviderTest.java   |  19 +-
 .../internal/JMXHostProviderTest.java           |   8 +-
 .../RepositoryVersionResourceProviderTest.java  |   8 +-
 .../StackArtifactResourceProviderTest.java      |   8 +-
 .../StackDefinedPropertyProviderTest.java       |   4 +-
 .../UpgradeResourceProviderHDP22Test.java       |   8 +-
 .../internal/UpgradeResourceProviderTest.java   |   9 +-
 .../UpgradeSummaryResourceProviderTest.java     |  10 +-
 .../internal/UserResourceProviderDBTest.java    |   7 +-
 .../VersionDefinitionResourceProviderTest.java  |   4 +-
 .../LogSearchDataRetrievalServiceTest.java      |   1 -
 .../RestMetricsPropertyProviderTest.java        |   9 +
 .../utilities/DatabaseCheckerTest.java          |   6 +-
 .../GeneralServiceCalculatedStateTest.java      |  10 +-
 .../credentialapi/CredentialUtilTest.java       | 644 +++++++++++++++++++
 .../apache/ambari/server/events/EventsTest.java |   6 +-
 .../HostVersionOutOfSyncListenerTest.java       |   7 +-
 .../metadata/AgentAlertDefinitionsTest.java     |  11 +
 .../server/metadata/RoleCommandOrderTest.java   |   7 +-
 .../ambari/server/metadata/RoleGraphTest.java   |   7 +-
 .../ambari/server/orm/DBAccessorImplTest.java   |  20 +-
 .../ambari/server/orm/JdbcPropertyTest.java     |   4 +-
 .../apache/ambari/server/orm/OrmTestHelper.java |  13 +-
 .../apache/ambari/server/orm/TestOrmImpl.java   |   8 +-
 .../server/orm/dao/AlertDefinitionDAOTest.java  |   6 +-
 .../server/orm/dao/AlertDispatchDAOTest.java    |   6 +-
 .../ambari/server/orm/dao/AlertsDAOTest.java    |   8 +-
 .../server/orm/dao/ClusterVersionDAOTest.java   |  12 +-
 .../server/orm/dao/ConfigGroupDAOTest.java      |  19 +-
 .../ambari/server/orm/dao/CrudDAOTest.java      |  11 +-
 .../orm/dao/HostConfigMappingDAOTest.java       |   7 +-
 .../server/orm/dao/HostRoleCommandDAOTest.java  |   9 +-
 .../server/orm/dao/HostVersionDAOTest.java      |  11 +-
 .../orm/dao/RepositoryVersionDAOTest.java       |   7 +-
 .../ambari/server/orm/dao/RequestDAOTest.java   |   7 +-
 .../server/orm/dao/RequestScheduleDAOTest.java  |   7 +-
 .../server/orm/dao/ServiceConfigDAOTest.java    |  64 +-
 .../ambari/server/orm/dao/SettingDAOTest.java   |   7 +
 .../ambari/server/orm/dao/StageDAOTest.java     |  10 +-
 .../orm/dao/TopologyLogicalRequestDAOTest.java  |   7 +-
 .../server/orm/dao/TopologyRequestDAOTest.java  |   7 +-
 .../ambari/server/orm/dao/UpgradeDAOTest.java   |   9 +-
 .../ambari/server/orm/dao/WidgetDAOTest.java    |   8 +-
 .../server/orm/dao/WidgetLayoutDAOTest.java     |   8 +-
 .../scheduler/ExecutionScheduleManagerTest.java |   4 +-
 .../server/security/AmbariLdapUtilsTest.java    |   1 -
 .../AmbariBasicAuthenticationFilterTest.java    |   6 +-
 ...uthenticationProviderForDNWithSpaceTest.java |   4 +-
 .../AmbariLdapAuthenticationProviderTest.java   |   4 +-
 .../AmbariLocalUserProviderTest.java            |   7 +
 .../AmbariPamAuthenticationProviderTest.java    |   4 +-
 .../security/authorization/TestUsers.java       |   7 +-
 .../security/ldap/LdapPerformanceTest.java      |   8 +
 .../serveraction/ServerActionExecutorTest.java  |  11 +-
 .../kerberos/KerberosServerActionTest.java      |   2 +-
 .../UpdateKerberosConfigsServerActionTest.java  |  18 +-
 .../AutoSkipFailedSummaryActionTest.java        |   6 +-
 .../ComponentVersionCheckActionTest.java        |   6 +-
 .../upgrades/ConfigureActionTest.java           |   6 +-
 .../upgrades/UpgradeActionTest.java             |   6 +-
 .../server/stageplanner/TestStagePlanner.java   |   7 +-
 .../ambari/server/state/ConfigGroupTest.java    |  17 +-
 .../ambari/server/state/ConfigHelperTest.java   |   7 +-
 .../server/state/ConfigMergeHelperTest.java     |   8 +-
 .../server/state/RequestExecutionTest.java      |   4 +-
 .../server/state/ServiceComponentTest.java      |   7 +-
 .../apache/ambari/server/state/ServiceTest.java |   7 +-
 .../ambari/server/state/UpgradeHelperTest.java  |   9 +-
 .../alerts/AggregateAlertListenerTest.java      |   6 +-
 .../state/alerts/AlertEventPublisherTest.java   |  22 +-
 .../state/alerts/AlertReceivedListenerTest.java |  10 +-
 .../alerts/AlertStateChangedEventTest.java      |   4 +-
 .../state/alerts/InitialAlertEventTest.java     |   6 +-
 .../state/cluster/AlertDataManagerTest.java     |  10 +-
 .../state/cluster/ClusterDeadlockTest.java      |   7 +-
 .../server/state/cluster/ClusterImplTest.java   |  11 +-
 .../server/state/cluster/ClusterTest.java       |  15 +-
 .../state/cluster/ClustersDeadlockTest.java     |   7 +-
 .../server/state/cluster/ClustersTest.java      |   7 +-
 .../ConcurrentServiceConfigVersionTest.java     |   7 +-
 ...omponentHostConcurrentWriteDeadlockTest.java |   7 +-
 .../ambari/server/state/host/HostTest.java      |   9 +-
 .../services/RetryUpgradeActionServiceTest.java |   8 +
 .../state/stack/ConfigUpgradePackTest.java      |   8 +-
 .../state/stack/ConfigUpgradeValidityTest.java  |   8 +-
 .../ambari/server/state/stack/OSFamilyTest.java |  12 +-
 .../server/state/stack/UpgradePackTest.java     |   8 +-
 .../svccomphost/ServiceComponentHostTest.java   |   7 +-
 .../topology/AsyncCallableServiceTest.java      |   6 +-
 .../server/upgrade/StackUpgradeUtilTest.java    |   4 +-
 .../server/upgrade/UpgradeCatalog200Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog210Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog2121Test.java  |   8 +-
 .../server/upgrade/UpgradeCatalog212Test.java   |   7 +-
 .../server/upgrade/UpgradeCatalog220Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog240Test.java   |   8 +-
 .../server/upgrade/UpgradeCatalog242Test.java   |   6 +-
 .../server/upgrade/UpgradeCatalog250Test.java   |  83 ++-
 .../server/upgrade/UpgradeCatalogTest.java      |   6 +-
 .../src/test/python/TestAmbariServer.py         |  52 +-
 .../stacks/2.0.6/YARN/test_historyserver.py     |   3 +-
 .../stacks/2.0.6/YARN/test_mapreduce2_client.py |   3 +-
 .../stacks/2.0.6/YARN/test_nodemanager.py       |   3 +-
 .../stacks/2.0.6/YARN/test_resourcemanager.py   |   3 +-
 .../stacks/2.0.6/YARN/test_yarn_client.py       |   3 +-
 .../stacks/2.3/ATLAS/test_metadata_server.py    |  65 +-
 .../stacks/2.5/common/test_stack_advisor.py     |  50 +-
 .../main/admin/stack_and_upgrade_controller.js  |  46 +-
 .../controllers/main/service/info/configs.js    |  24 +-
 .../main/service/reassign/step3_controller.js   |   9 +
 .../main/service/reassign/step4_controller.js   |  12 +-
 .../main/service/reassign_controller.js         |  18 +-
 .../app/controllers/wizard/step7_controller.js  |  41 +-
 ambari-web/app/messages.js                      |  20 +-
 ambari-web/app/mixins.js                        |   1 +
 .../configs/config_recommendation_parser.js     |   6 +-
 .../common/configs/config_recommendations.js    |  11 +-
 ...onfig_with_override_recommendation_parser.js |   3 +-
 .../mixins/common/configs/enhanced_configs.js   |   6 +-
 .../configs/widgets/unique/num_llap_nodes.js    |  70 ++
 .../configs/component_actions_by_configs.js     |  18 +-
 ambari-web/app/models/host_stack_version.js     |   4 +-
 .../stack_version/stack_upgrade_history.js      |   7 +-
 ambari-web/app/routes/reassign_master_routes.js |   3 +-
 .../common/configs/widgets/controls.hbs         |   2 +
 .../stack_upgrade/stack_upgrade_wizard.hbs      |   1 +
 .../admin/stack_upgrade/upgrade_history.hbs     |   2 +-
 ambari-web/app/utils/string_utils.js            |  14 +
 .../configs/service_config_layout_tab_view.js   |  23 +-
 .../dependent_configs_list_popup.js             |  12 +-
 .../app/views/main/service/services/hdfs.js     |  10 +-
 .../app/views/main/service/services/yarn.js     |   2 +-
 .../admin/stack_and_upgrade_controller_test.js  | 150 +----
 .../service/reassign/step4_controller_test.js   |  10 +-
 .../configs/config_recommendations_test.js      | 600 ++++++++---------
 .../common/configs/enhanced_configs_test.js     |   2 +-
 ambari-web/test/utils/string_utils_test.js      |  30 +
 .../dependent_configs_list_popup_test.js        |   2 +-
 .../views/main/service/services/hdfs_test.js    |   6 +-
 .../views/main/service/services/yarn_test.js    |   2 +-
 contrib/utils/perf/deploy-gce-perf-cluster.py   |  11 +-
 .../src/main/python/preinstall_checker.py       |   2 +-
 .../ambari/view/hive2/actor/LogAggregator.java  |  18 +-
 .../view/hive2/actor/StatementExecutor.java     |   9 +-
 .../actor/message/StartLogAggregation.java      |  10 +-
 .../ambari/view/hive20/actor/LogAggregator.java |  18 +-
 .../view/hive20/actor/StatementExecutor.java    |  10 +-
 .../actor/message/StartLogAggregation.java      |  10 +-
 .../resources/ui/app/adapters/application.js    |  16 +
 .../resources/ui/app/adapters/service-check.js  |  42 ++
 .../hive20/src/main/resources/ui/app/app.js     |   9 -
 .../resources/ui/app/components/job-item.js     |  21 +-
 .../resources/ui/app/components/jobs-browser.js |   4 -
 .../ui/app/components/service-check-entry.js    |  50 ++
 .../resources/ui/app/components/tabs-item.js    |  20 +-
 .../ui/app/components/top-application-bar.js    |   1 +
 .../ui/app/configs/service-check-status.js      |  19 +
 .../resources/ui/app/controllers/application.js |  25 +
 .../main/resources/ui/app/controllers/jobs.js   |   7 +-
 .../ui/app/controllers/service-check.js         |  66 ++
 .../src/main/resources/ui/app/models/job.js     |   2 +-
 .../main/resources/ui/app/models/worksheet.js   |   3 +-
 .../hive20/src/main/resources/ui/app/router.js  |   2 +
 .../main/resources/ui/app/routes/application.js |   9 +
 .../src/main/resources/ui/app/routes/jobs.js    |  25 +-
 .../resources/ui/app/routes/queries/query.js    |  14 +-
 .../resources/ui/app/routes/service-check.js    |  28 +
 .../src/main/resources/ui/app/services/jobs.js  |  12 +-
 .../resources/ui/app/services/service-check.js  | 117 ++++
 .../src/main/resources/ui/app/styles/app.scss   |   2 +-
 .../ui/app/styles/bootstrap-overrides.scss      |  15 +-
 .../resources/ui/app/templates/application.hbs  |  13 +-
 .../app/templates/components/jobs-browser.hbs   |   1 +
 .../templates/components/query-result-table.hbs |  64 +-
 .../components/service-check-entry.hbs          |  47 ++
 .../components/top-application-bar.hbs          |  12 +-
 .../databases/database/tables/table/ddl.hbs     |   8 +-
 .../ui/app/templates/queries/query.hbs          |  85 +--
 .../ui/app/templates/service-check.hbs          |  42 ++
 .../src/main/resources/ui/config/environment.js |   2 -
 contrib/views/wfmanager/pom.xml                 |   1 +
 .../oozie/ambari/view/assets/AssetResource.java |   3 +-
 .../resources/ui/app/components/asset-config.js |   6 +-
 .../ui/app/components/bundle-config.js          |   7 +-
 .../resources/ui/app/components/coord-config.js |  17 +-
 .../ui/app/components/designer-workspace.js     |  49 +-
 .../resources/ui/app/components/drafts-wf.js    |  81 ++-
 .../ui/app/components/flow-designer.js          |  49 +-
 .../resources/ui/app/components/job-config.js   |   1 -
 .../resources/ui/app/components/job-details.js  |  28 +-
 .../ui/app/components/recent-projects.js        |  57 ++
 .../main/resources/ui/app/components/save-wf.js |   3 +-
 .../ui/app/components/workflow-action-editor.js |  14 +-
 .../ui/app/domain/workflow-importer.js          |   3 +
 .../ui/app/helpers/format-unicode-date.js       |   3 +-
 .../main/resources/ui/app/models/wfproject.js   |   3 +-
 .../src/main/resources/ui/app/routes/design.js  |  23 +-
 .../ui/app/routes/design/proj-manager-tab.js    |   7 +-
 .../resources/ui/app/services/current-job.js    |  28 +
 .../src/main/resources/ui/app/styles/app.less   | 151 ++++-
 .../app/templates/components/archive-config.hbs |   4 +-
 .../ui/app/templates/components/arg-config.hbs  |   2 +-
 .../app/templates/components/asset-config.hbs   |   2 +-
 .../ui/app/templates/components/asset-list.hbs  |   2 +-
 .../app/templates/components/asset-manager.hbs  |   2 +-
 .../app/templates/components/bundle-config.hbs  |   2 +-
 .../components/bundle-coord-config.hbs          |   2 +-
 .../templates/components/bundle-job-details.hbs |   6 +-
 .../app/templates/components/coord-config.hbs   |   8 +-
 .../templates/components/coord-job-details.hbs  |  10 +-
 .../app/templates/components/date-with-expr.hbs |   4 +-
 .../templates/components/designer-errors.hbs    |   2 +-
 .../templates/components/designer-workspace.hbs |  41 +-
 .../ui/app/templates/components/drafts-wf.hbs   | 170 ++---
 .../ui/app/templates/components/file-config.hbs |   6 +-
 .../app/templates/components/flow-designer.hbs  |  27 +-
 .../app/templates/components/global-config.hbs  |   4 +-
 .../ui/app/templates/components/help-icon.hbs   |   3 +
 .../ui/app/templates/components/hive-action.hbs |   2 +-
 .../app/templates/components/hive2-action.hbs   |   2 +-
 .../components/instance-list-config.hbs         |   2 +-
 .../ui/app/templates/components/job-config.hbs  |   8 +-
 .../ui/app/templates/components/job-details.hbs |  13 +-
 .../ui/app/templates/components/job-row.hbs     |   2 +-
 .../templates/components/name-value-config.hbs  |   2 +-
 .../ui/app/templates/components/pig-action.hbs  |   2 +-
 .../templates/components/prepare-config-fs.hbs  |  12 +-
 .../app/templates/components/prepare-config.hbs |   6 +-
 .../templates/components/recent-projects.hbs    |  33 +
 .../ui/app/templates/components/save-wf.hbs     |   2 +-
 .../app/templates/components/shell-action.hbs   |   2 +-
 .../app/templates/components/spark-action.hbs   |   2 +-
 .../app/templates/components/sub-workflow.hbs   |   2 +-
 .../components/workflow-action-editor.hbs       |   6 +-
 .../templates/components/workflow-config.hbs    |   2 +-
 .../components/workflow-job-details.hbs         |  14 +-
 .../main/resources/ui/app/templates/design.hbs  |   2 +-
 .../app/templates/design/proj-manager-tab.hbs   |   2 +-
 .../main/resources/ui/app/utils/constants.js    |   2 +-
 .../ui/app/validators/operand-length.js         |   2 +-
 .../src/main/resources/view.log4j.properties    |  29 +
 pom.xml                                         |   2 +
 377 files changed, 6192 insertions(+), 2255 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d222f572/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/d222f572/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/d222f572/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ComponentVersionCheckActionTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/d222f572/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index a7f8ae3,e7572f4..5c71329
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@@ -27,9 -28,9 +28,10 @@@ import java.util.List
  import java.util.Map;
  
  import org.apache.ambari.server.AmbariException;
+ import org.apache.ambari.server.H2DatabaseCleaner;
  import org.apache.ambari.server.api.services.AmbariMetaInfo;
  import org.apache.ambari.server.controller.ServiceComponentResponse;
 +import org.apache.ambari.server.events.listeners.upgrade.StackVersionListener;
  import org.apache.ambari.server.orm.GuiceJpaInitializer;
  import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
  import org.apache.ambari.server.orm.OrmTestHelper;

http://git-wip-us.apache.org/repos/asf/ambari/blob/d222f572/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index be8ab53,8e5ad0a..d952ac4
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@@ -37,9 -38,8 +38,10 @@@ import java.util.Set
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
 +import org.apache.ambari.annotations.Experimental;
 +import org.apache.ambari.annotations.ExperimentalFeature;
  import org.apache.ambari.server.AmbariException;
+ import org.apache.ambari.server.H2DatabaseCleaner;
  import org.apache.ambari.server.api.services.AmbariMetaInfo;
  import org.apache.ambari.server.controller.AmbariManagementController;
  import org.apache.ambari.server.controller.ClusterRequest;


[46/50] [abbrv] ambari git commit: AMBARI-19683. Content of yarn-env.sh on host is not same as in the downloaded config file from Ambari UI. (Attila Magyar via stoader)

Posted by nc...@apache.org.
AMBARI-19683. Content of yarn-env.sh on host is not same as in the downloaded config file from Ambari UI. (Attila Magyar via stoader)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 779995dd5b23c5505262463d50690079d502355e
Parents: 61f8f6d
Author: Attila Magyar <am...@hortonworks.com>
Authored: Fri Feb 3 11:46:17 2017 +0100
Committer: Toader, Sebastian <st...@hortonworks.com>
Committed: Fri Feb 3 11:46:17 2017 +0100

----------------------------------------------------------------------
 .../2.1.0.2.0/package/scripts/params_linux.py   |   3 +-
 .../YARN/3.0.0.3.0/configuration/yarn-env.xml   |   3 +
 .../3.0.0.3.0/package/scripts/params_linux.py   |   2 +-
 .../services/YARN/configuration/yarn-env.xml    | 165 +++++++++++++++++++
 .../stacks/2.0.6/YARN/test_historyserver.py     |   3 +-
 .../stacks/2.0.6/YARN/test_mapreduce2_client.py |   3 +-
 .../stacks/2.0.6/YARN/test_nodemanager.py       |   3 +-
 .../stacks/2.0.6/YARN/test_resourcemanager.py   |   3 +-
 .../stacks/2.0.6/YARN/test_yarn_client.py       |   3 +-
 9 files changed, 176 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
index 335f1ac..03d3fb2 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_linux.py
@@ -266,7 +266,8 @@ if security_enabled:
   rm_keytab = config['configurations']['yarn-site']['yarn.resourcemanager.keytab']
   rm_kinit_cmd = format("{kinit_path_local} -kt {rm_keytab} {rm_principal_name};")
   yarn_jaas_file = os.path.join(config_dir, 'yarn_jaas.conf')
-  yarn_env_sh_template += format('\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config={yarn_jaas_file} -Dzookeeper.sasl.clientconfig=Client"\n')
+  if stack_supports_zk_security:
+    rm_security_opts = format('-Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config={yarn_jaas_file} -Dzookeeper.sasl.clientconfig=Client')
 
   # YARN timeline security options
   if has_ats:

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/configuration/yarn-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/configuration/yarn-env.xml b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/configuration/yarn-env.xml
index d8531b1..3bf5bcb 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/configuration/yarn-env.xml
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/configuration/yarn-env.xml
@@ -283,6 +283,9 @@
       fi
       YARN_OPTS="$YARN_OPTS -Dyarn.policy.file=$YARN_POLICYFILE"
       YARN_OPTS="$YARN_OPTS -Djava.io.tmpdir={{hadoop_java_io_tmpdir}}"
+      {% if rm_security_opts is defined %}
+      YARN_OPTS="{{rm_security_opts}} $YARN_OPTS"
+      {% endif %}
     </value>
     <value-attributes>
       <type>content</type>

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
index 0f6f1fa..d88f518 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/package/scripts/params_linux.py
@@ -264,7 +264,7 @@ if security_enabled:
   rm_keytab = config['configurations']['yarn-site']['yarn.resourcemanager.keytab']
   rm_kinit_cmd = format("{kinit_path_local} -kt {rm_keytab} {rm_principal_name};")
   yarn_jaas_file = os.path.join(config_dir, 'yarn_jaas.conf')
-  yarn_env_sh_template += format('\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config={yarn_jaas_file} -Dzookeeper.sasl.clientconfig=Client"\n')
+  rm_security_opts = format('-Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config={yarn_jaas_file} -Dzookeeper.sasl.clientconfig=Client')
 
   # YARN timeline security options
   if has_ats:

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-env.xml
new file mode 100644
index 0000000..d04c3c5
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration/yarn-env.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+<configuration supports_final="true" supports_adding_forbidden="true">
+  <property>
+    <name>is_supported_yarn_ranger</name>
+    <value>true</value>
+    <description>Set to false by default,  needs to be set to true in stacks that use Ranger Yarn Plugin</description>
+    <on-ambari-upgrade add="true"/>
+  </property>
+  <!-- yarn-env.sh -->
+  <property>
+    <name>content</name>
+    <display-name>yarn-env template</display-name>
+    <description>This is the jinja template for yarn-env.sh file</description>
+    <value>
+      export HADOOP_YARN_HOME={{hadoop_yarn_home}}
+      export YARN_LOG_DIR={{yarn_log_dir_prefix}}/$USER
+      export YARN_PID_DIR={{yarn_pid_dir_prefix}}/$USER
+      export HADOOP_LIBEXEC_DIR={{hadoop_libexec_dir}}
+      export JAVA_HOME={{java64_home}}
+      export JAVA_LIBRARY_PATH="${JAVA_LIBRARY_PATH}:{{hadoop_java_io_tmpdir}}"
+
+      # We need to add the EWMA appender for the yarn daemons only;
+      # however, YARN_ROOT_LOGGER is shared by the yarn client and the
+      # daemons. This is restrict the EWMA appender to daemons only.
+      INVOKER="${0##*/}"
+      if [ "$INVOKER" == "yarn-daemon.sh" ]; then
+        export YARN_ROOT_LOGGER=${YARN_ROOT_LOGGER:-INFO,EWMA,RFA}
+      fi
+
+      # User for YARN daemons
+      export HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}
+
+      # resolve links - $0 may be a softlink
+      export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}"
+
+      # some Java parameters
+      # export JAVA_HOME=/home/y/libexec/jdk1.6.0/
+      if [ "$JAVA_HOME" != "" ]; then
+      #echo "run java in $JAVA_HOME"
+      JAVA_HOME=$JAVA_HOME
+      fi
+
+      if [ "$JAVA_HOME" = "" ]; then
+      echo "Error: JAVA_HOME is not set."
+      exit 1
+      fi
+
+      JAVA=$JAVA_HOME/bin/java
+      JAVA_HEAP_MAX=-Xmx1000m
+
+      # For setting YARN specific HEAP sizes please use this
+      # Parameter and set appropriately
+      YARN_HEAPSIZE={{yarn_heapsize}}
+
+      # check envvars which might override default args
+      if [ "$YARN_HEAPSIZE" != "" ]; then
+      JAVA_HEAP_MAX="-Xmx""$YARN_HEAPSIZE""m"
+      fi
+
+      # Resource Manager specific parameters
+
+      # Specify the max Heapsize for the ResourceManager using a numerical value
+      # in the scale of MB. For example, to specify an jvm option of -Xmx1000m, set
+      # the value to 1000.
+      # This value will be overridden by an Xmx setting specified in either YARN_OPTS
+      # and/or YARN_RESOURCEMANAGER_OPTS.
+      # If not specified, the default value will be picked from either YARN_HEAPMAX
+      # or JAVA_HEAP_MAX with YARN_HEAPMAX as the preferred option of the two.
+      export YARN_RESOURCEMANAGER_HEAPSIZE={{resourcemanager_heapsize}}
+
+      # Specify the JVM options to be used when starting the ResourceManager.
+      # These options will be appended to the options specified as YARN_OPTS
+      # and therefore may override any similar flags set in YARN_OPTS
+      #export YARN_RESOURCEMANAGER_OPTS=
+
+      # Node Manager specific parameters
+
+      # Specify the max Heapsize for the NodeManager using a numerical value
+      # in the scale of MB. For example, to specify an jvm option of -Xmx1000m, set
+      # the value to 1000.
+      # This value will be overridden by an Xmx setting specified in either YARN_OPTS
+      # and/or YARN_NODEMANAGER_OPTS.
+      # If not specified, the default value will be picked from either YARN_HEAPMAX
+      # or JAVA_HEAP_MAX with YARN_HEAPMAX as the preferred option of the two.
+      export YARN_NODEMANAGER_HEAPSIZE={{nodemanager_heapsize}}
+
+      # Specify the max Heapsize for the timeline server using a numerical value
+      # in the scale of MB. For example, to specify an jvm option of -Xmx1000m, set
+      # the value to 1024.
+      # This value will be overridden by an Xmx setting specified in either YARN_OPTS
+      # and/or YARN_TIMELINESERVER_OPTS.
+      # If not specified, the default value will be picked from either YARN_HEAPMAX
+      # or JAVA_HEAP_MAX with YARN_HEAPMAX as the preferred option of the two.
+      export YARN_TIMELINESERVER_HEAPSIZE={{apptimelineserver_heapsize}}
+
+      # Specify the JVM options to be used when starting the NodeManager.
+      # These options will be appended to the options specified as YARN_OPTS
+      # and therefore may override any similar flags set in YARN_OPTS
+      #export YARN_NODEMANAGER_OPTS=
+
+      # so that filenames w/ spaces are handled correctly in loops below
+      IFS=
+
+
+      # default log directory and file
+      if [ "$YARN_LOG_DIR" = "" ]; then
+      YARN_LOG_DIR="$HADOOP_YARN_HOME/logs"
+      fi
+      if [ "$YARN_LOGFILE" = "" ]; then
+      YARN_LOGFILE='yarn.log'
+      fi
+
+      # default policy file for service-level authorization
+      if [ "$YARN_POLICYFILE" = "" ]; then
+      YARN_POLICYFILE="hadoop-policy.xml"
+      fi
+
+      # restore ordinary behaviour
+      unset IFS
+
+
+      YARN_OPTS="$YARN_OPTS -Dhadoop.log.dir=$YARN_LOG_DIR"
+      YARN_OPTS="$YARN_OPTS -Dyarn.log.dir=$YARN_LOG_DIR"
+      YARN_OPTS="$YARN_OPTS -Dhadoop.log.file=$YARN_LOGFILE"
+      YARN_OPTS="$YARN_OPTS -Dyarn.log.file=$YARN_LOGFILE"
+      YARN_OPTS="$YARN_OPTS -Dyarn.home.dir=$YARN_COMMON_HOME"
+      YARN_OPTS="$YARN_OPTS -Dyarn.id.str=$YARN_IDENT_STRING"
+      YARN_OPTS="$YARN_OPTS -Dhadoop.root.logger=${YARN_ROOT_LOGGER:-INFO,console}"
+      YARN_OPTS="$YARN_OPTS -Dyarn.root.logger=${YARN_ROOT_LOGGER:-INFO,console}"
+      export YARN_NODEMANAGER_OPTS="$YARN_NODEMANAGER_OPTS -Dnm.audit.logger=INFO,NMAUDIT"
+      export YARN_RESOURCEMANAGER_OPTS="$YARN_RESOURCEMANAGER_OPTS -Drm.audit.logger=INFO,RMAUDIT"
+      if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then
+      YARN_OPTS="$YARN_OPTS -Djava.library.path=$JAVA_LIBRARY_PATH"
+      fi
+      YARN_OPTS="$YARN_OPTS -Dyarn.policy.file=$YARN_POLICYFILE"
+      YARN_OPTS="$YARN_OPTS -Djava.io.tmpdir={{hadoop_java_io_tmpdir}}"
+      {% if rm_security_opts is defined %}
+      YARN_OPTS="{{rm_security_opts}} $YARN_OPTS"
+      {% endif %}
+    </value>
+    <value-attributes>
+      <type>content</type>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py
index 62a4d46..7a0514a 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py
@@ -673,8 +673,7 @@ class TestHistoryServer(RMFTestCase):
       mode = 0644,
     )
     self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
-      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content'] +
-                               '\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config=/usr/hdp/current/hadoop-client/conf/yarn_jaas.conf -Dzookeeper.sasl.clientconfig=Client"\n'),
+      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
       owner = 'yarn',
       group = 'hadoop',
       mode = 0755,

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py
index 774f3c6..b05d9f2 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py
@@ -305,8 +305,7 @@ class TestMapReduce2Client(RMFTestCase):
       mode = 0644,
     )
     self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
-      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content'] +
-                               '\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config=/usr/hdp/current/hadoop-client/conf/yarn_jaas.conf -Dzookeeper.sasl.clientconfig=Client"\n'),
+      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
       owner = 'yarn',
       group = 'hadoop',
       mode = 0755,

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py
index 0eb5561..10edb4b 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py
@@ -487,8 +487,7 @@ class TestNodeManager(RMFTestCase):
       mode = 0644,
     )
     self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
-      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content'] +
-                               '\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config=/usr/hdp/current/hadoop-client/conf/yarn_jaas.conf -Dzookeeper.sasl.clientconfig=Client"\n'),
+      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
       owner = 'yarn',
       group = 'hadoop',
       mode = 0755,

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py
index 5ebfb45..b7f90c8 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py
@@ -457,8 +457,7 @@ class TestResourceManager(RMFTestCase):
       mode = 0644,
     )
     self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
-      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content'] +
-                               '\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config=/usr/hdp/current/hadoop-client/conf/yarn_jaas.conf -Dzookeeper.sasl.clientconfig=Client"\n'),
+      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
       owner = 'yarn',
       group = 'hadoop',
       mode = 0755,

http://git-wip-us.apache.org/repos/asf/ambari/blob/779995dd/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py
index d4341e1..8873fbf 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py
@@ -305,8 +305,7 @@ class TestYarnClient(RMFTestCase):
       mode = 0644,
     )
     self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
-      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content'] +
-        '\nYARN_OPTS="$YARN_OPTS -Dzookeeper.sasl.client=true -Dzookeeper.sasl.client.username=zookeeper -Djava.security.auth.login.config=/usr/hdp/current/hadoop-client/conf/yarn_jaas.conf -Dzookeeper.sasl.clientconfig=Client"\n'),
+      content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
       owner = 'yarn',
       group = 'hadoop',
       mode = 0755,


[11/50] [abbrv] ambari git commit: AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. (mpapirkovskyy)

Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index 98ee64d..9e60dad 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -18,110 +18,112 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import static org.easymock.EasyMock.anyLong;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.ambari.annotations.Experimental;
-import org.apache.ambari.annotations.ExperimentalFeature;
-import org.apache.ambari.server.Role;
-import org.apache.ambari.server.actionmanager.ActionManager;
-import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
-import org.apache.ambari.server.actionmanager.HostRoleCommand;
-import org.apache.ambari.server.actionmanager.Stage;
-import org.apache.ambari.server.actionmanager.StageFactory;
-import org.apache.ambari.server.agent.CommandReport;
-import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.AmbariManagementController;
-import org.apache.ambari.server.controller.ExecuteActionRequest;
-import org.apache.ambari.server.controller.RequestStatusResponse;
-import org.apache.ambari.server.controller.ResourceProviderFactory;
-import org.apache.ambari.server.controller.spi.Request;
-import org.apache.ambari.server.controller.spi.RequestStatus;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.orm.GuiceJpaInitializer;
-import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
-import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
-import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
-import org.apache.ambari.server.orm.entities.HostVersionEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.ResourceEntity;
-import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.security.TestAuthenticationFactory;
-import org.apache.ambari.server.security.authorization.AuthorizationException;
-import org.apache.ambari.server.security.authorization.ResourceType;
-import org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction;
-import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.ConfigHelper;
-import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.MaintenanceState;
-import org.apache.ambari.server.state.RepositoryType;
-import org.apache.ambari.server.state.RepositoryVersionState;
-import org.apache.ambari.server.state.Service;
-import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.ServiceOsSpecific;
-import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.cluster.ClusterImpl;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.topology.TopologyManager;
-import org.apache.ambari.server.utils.StageUtils;
-import org.apache.commons.io.IOUtils;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import com.google.inject.util.Modules;
+ import static org.easymock.EasyMock.anyLong;
+ import static org.easymock.EasyMock.anyObject;
+ import static org.easymock.EasyMock.capture;
+ import static org.easymock.EasyMock.createMock;
+ import static org.easymock.EasyMock.createNiceMock;
+ import static org.easymock.EasyMock.eq;
+ import static org.easymock.EasyMock.expect;
+ import static org.easymock.EasyMock.expectLastCall;
+ import static org.easymock.EasyMock.replay;
+ import static org.easymock.EasyMock.verify;
+
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.lang.reflect.Field;
+ import java.sql.SQLException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.LinkedHashMap;
+ import java.util.LinkedHashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Set;
+
+ import org.apache.ambari.annotations.Experimental;
+ import org.apache.ambari.annotations.ExperimentalFeature;
+ import org.apache.ambari.server.AmbariException;
+ import org.apache.ambari.server.H2DatabaseCleaner;
+ import org.apache.ambari.server.Role;
+ import org.apache.ambari.server.actionmanager.ActionManager;
+ import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
+ import org.apache.ambari.server.actionmanager.HostRoleCommand;
+ import org.apache.ambari.server.actionmanager.Stage;
+ import org.apache.ambari.server.actionmanager.StageFactory;
+ import org.apache.ambari.server.agent.CommandReport;
+ import org.apache.ambari.server.agent.ExecutionCommand;
+ import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
+ import org.apache.ambari.server.api.services.AmbariMetaInfo;
+ import org.apache.ambari.server.configuration.Configuration;
+ import org.apache.ambari.server.controller.AmbariManagementController;
+ import org.apache.ambari.server.controller.ExecuteActionRequest;
+ import org.apache.ambari.server.controller.RequestStatusResponse;
+ import org.apache.ambari.server.controller.ResourceProviderFactory;
+ import org.apache.ambari.server.controller.spi.Request;
+ import org.apache.ambari.server.controller.spi.RequestStatus;
+ import org.apache.ambari.server.controller.spi.Resource;
+ import org.apache.ambari.server.controller.spi.ResourceProvider;
+ import org.apache.ambari.server.controller.utilities.PropertyHelper;
+ import org.apache.ambari.server.orm.GuiceJpaInitializer;
+ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+ import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
+ import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
+ import org.apache.ambari.server.orm.dao.HostVersionDAO;
+ import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+ import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
+ import org.apache.ambari.server.orm.dao.StackDAO;
+ import org.apache.ambari.server.orm.entities.ClusterEntity;
+ import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
+ import org.apache.ambari.server.orm.entities.HostVersionEntity;
+ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+ import org.apache.ambari.server.orm.entities.ResourceEntity;
+ import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
+ import org.apache.ambari.server.orm.entities.StackEntity;
+ import org.apache.ambari.server.orm.entities.UpgradeEntity;
+ import org.apache.ambari.server.security.TestAuthenticationFactory;
+ import org.apache.ambari.server.security.authorization.AuthorizationException;
+ import org.apache.ambari.server.security.authorization.ResourceType;
+ import org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction;
+ import org.apache.ambari.server.state.Cluster;
+ import org.apache.ambari.server.state.Clusters;
+ import org.apache.ambari.server.state.ConfigHelper;
+ import org.apache.ambari.server.state.Host;
+ import org.apache.ambari.server.state.MaintenanceState;
+ import org.apache.ambari.server.state.RepositoryType;
+ import org.apache.ambari.server.state.RepositoryVersionState;
+ import org.apache.ambari.server.state.Service;
+ import org.apache.ambari.server.state.ServiceComponent;
+ import org.apache.ambari.server.state.ServiceComponentHost;
+ import org.apache.ambari.server.state.ServiceInfo;
+ import org.apache.ambari.server.state.ServiceOsSpecific;
+ import org.apache.ambari.server.state.StackId;
+ import org.apache.ambari.server.state.cluster.ClusterImpl;
+ import org.apache.ambari.server.state.stack.upgrade.Direction;
+ import org.apache.ambari.server.topology.TopologyManager;
+ import org.apache.ambari.server.utils.StageUtils;
+ import org.apache.commons.io.IOUtils;
+ import org.easymock.Capture;
+ import org.easymock.EasyMock;
+ import org.easymock.IAnswer;
+ import org.junit.After;
+ import org.junit.Assert;
+ import org.junit.Before;
+ import org.junit.Ignore;
+ import org.junit.Test;
+ import org.springframework.security.core.Authentication;
+ import org.springframework.security.core.context.SecurityContextHolder;
+
+ import com.google.gson.JsonArray;
+ import com.google.gson.JsonObject;
+ import com.google.gson.JsonParser;
+ import com.google.inject.AbstractModule;
+ import com.google.inject.Guice;
+ import com.google.inject.Injector;
+ import com.google.inject.util.Modules;
 
 
  /**
@@ -186,8 +188,8 @@ public class ClusterStackVersionResourceProviderTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
 
     SecurityContextHolder.getContext().setAuthentication(null);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
index dffc4f7..bf1efb7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
@@ -25,6 +25,7 @@ import static junit.framework.Assert.assertTrue;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -34,6 +35,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.ResourceProviderFactory;
 import org.apache.ambari.server.controller.predicate.AndPredicate;
@@ -66,7 +69,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * CompatibleRepositoryVersionResourceProvider tests.
@@ -239,8 +241,8 @@ public class CompatibleRepositoryVersionResourceProviderTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
 
     SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index 3529bef..c0f640b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -74,6 +74,7 @@ import org.apache.ambari.server.state.ServiceComponentFactory;
 import org.apache.ambari.server.state.ServiceComponentHost;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
+import org.apache.log4j.Logger;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.junit.Assert;
@@ -89,6 +90,7 @@ import com.google.inject.Injector;
  * Tests for the component resource provider.
  */
 public class ComponentResourceProviderTest {
+  private static final Logger LOG = Logger.getLogger(ComponentResourceProviderTest.class);
 
   private static final long CLUSTER_ID = 100;
   private static final String CLUSTER_NAME = "Cluster100";

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
index 0b18e83..4bed482 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
@@ -31,6 +31,7 @@ import static org.easymock.EasyMock.newCapture;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -41,6 +42,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -84,7 +87,6 @@ import org.junit.Test;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -158,8 +160,8 @@ public class HostStackVersionResourceProviderTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
index c5eb76e..270d50a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
@@ -21,6 +21,7 @@ import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -28,6 +29,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ClusterRequest;
 import org.apache.ambari.server.controller.ConfigurationRequest;
@@ -62,7 +64,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class JMXHostProviderTest {
   private Injector injector;
@@ -85,6 +86,7 @@ public class JMXHostProviderTest {
   @Before
   public void setup() throws Exception {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
     clusters = injector.getInstance(Clusters.class);
     controller = injector.getInstance(AmbariManagementController.class);
@@ -95,8 +97,8 @@ public class JMXHostProviderTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
 
     // Clear the authenticated user
     SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
index b8d450b..0230a97 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.controller.internal;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -28,6 +29,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.ResourceProviderFactory;
 import org.apache.ambari.server.controller.predicate.AndPredicate;
@@ -71,7 +73,6 @@ import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -226,6 +227,7 @@ public class RepositoryVersionResourceProviderTest {
       }
     });
 
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
 
     // because AmbariMetaInfo is mocked, the stacks are never inserted into
@@ -638,8 +640,8 @@ public class RepositoryVersionResourceProviderTest {
 
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
 
     SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
index fda5e79..149a91c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
@@ -27,12 +27,15 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -52,7 +55,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class StackArtifactResourceProviderTest {
   private AmbariMetaInfo metaInfo;
@@ -69,8 +71,8 @@ public class StackArtifactResourceProviderTest {
   }
 
   @After
-  public void tearDown() {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private StackArtifactResourceProvider getStackArtifactResourceProvider(

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
index 75d5bd8..dc97f9b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.configuration.ComponentSSLConfiguration;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -77,7 +78,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -172,7 +172,7 @@ public class StackDefinedPropertyProviderTest {
 
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
index e803529..40c7e50 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
@@ -35,6 +36,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapperFactory;
@@ -91,7 +94,6 @@ import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * UpgradeResourceDefinition tests.
@@ -205,8 +207,8 @@ public class UpgradeResourceProviderHDP22Test {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 4d95e2b..a0701b6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -30,6 +30,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumSet;
@@ -40,6 +41,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionManager;
@@ -125,7 +128,6 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -172,6 +174,7 @@ public class UpgradeResourceProviderTest {
     injector = Guice.createInjector(Modules.override(
         new InMemoryDefaultTestModule()).with(new MockModule()));
 
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
 
 
@@ -271,8 +274,8 @@ public class UpgradeResourceProviderTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     EasyMock.reset(injector.getInstance(AuditLogger.class));
     injector = null;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
index e398a54..619e367 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
@@ -26,12 +26,15 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Field;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
@@ -85,7 +88,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 import com.google.inject.util.Modules;
 
@@ -138,8 +140,8 @@ public class UpgradeSummaryResourceProviderTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 
@@ -357,4 +359,4 @@ public class UpgradeSummaryResourceProviderTest {
       binder.bind(UpgradeHelper.class).toInstance(m_upgradeHelper);
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderDBTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderDBTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderDBTest.java
index d2f9b22..240f00b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderDBTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderDBTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -31,6 +32,8 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -95,9 +98,9 @@ public class UserResourceProviderDBTest {
      * Closes the JPA connection after executing the test suite.
      */
     @AfterClass
-    public static void teardownInMemoryDB() {
+    public static void teardownInMemoryDB() throws AmbariException, SQLException {
         if (injector != null) {
-            injector.getInstance(PersistService.class).stop();
+            H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
index 026fb33..a297d94 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
@@ -28,6 +28,7 @@ import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.ResourceProviderFactory;
 import org.apache.ambari.server.controller.predicate.AndPredicate;
@@ -59,7 +60,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import com.google.common.collect.Sets;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Tests the VersionDefinitionResourceProvider class
@@ -89,7 +89,7 @@ public class VersionDefinitionResourceProviderTest {
 
   @After
   public void after() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalServiceTest.java
index 4296004..d60596b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalServiceTest.java
@@ -28,7 +28,6 @@ import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.Executor;
 
-
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.easymock.EasyMockSupport;

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
index 410e2f1..8455484 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
@@ -25,12 +25,15 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 
 import java.lang.reflect.Field;
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariServer;
@@ -61,6 +64,7 @@ import org.apache.ambari.server.state.stack.MetricDefinition;
 import org.apache.ambari.server.utils.SynchronousThreadPoolExecutor;
 import org.easymock.EasyMock;
 import org.junit.After;
+import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -146,6 +150,11 @@ public class RestMetricsPropertyProviderTest {
     replay(amc, configHelperMock);
   }
 
+  @AfterClass
+  public static void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   private RestMetricsPropertyProvider createRestMetricsPropertyProvider(MetricDefinition metricDefinition,
       HashMap<String, Map<String, PropertyInfo>> componentMetrics, StreamProvider streamProvider,
       TestMetricsHostProvider metricsHostProvider) throws Exception {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
index f148da1..3f73657 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
@@ -23,7 +23,10 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.junit.Assert.fail;
 
+import java.sql.SQLException;
+
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -60,7 +63,8 @@ public class DatabaseCheckerTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Ignore

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
index 6374be0..09d5569 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
@@ -18,8 +18,11 @@
 
 package org.apache.ambari.server.controller.utilities.state;
 
-  import java.util.Map;
+import java.sql.SQLException;
+import java.util.Map;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -41,7 +44,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 public abstract class GeneralServiceCalculatedStateTest {
@@ -107,8 +109,8 @@ public abstract class GeneralServiceCalculatedStateTest {
 
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
index 79d5569..90ac29f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
@@ -22,6 +22,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.AmbariEvent.AmbariEventType;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -52,7 +55,6 @@ import org.junit.Test;
 import com.google.common.eventbus.EventBus;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -127,7 +129,7 @@ public class EventsTest {
    */
   @After
   public void teardown() throws Exception {
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
     m_injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
index 5abcb94..978080a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
@@ -20,6 +20,7 @@ package org.apache.ambari.server.events.listeners.upgrade;
 
 import static org.junit.Assert.assertEquals;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -32,6 +33,7 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.events.ServiceComponentInstalledEvent;
 import org.apache.ambari.server.events.ServiceComponentUninstalledEvent;
 import org.apache.ambari.server.events.ServiceInstalledEvent;
@@ -63,7 +65,6 @@ import com.google.common.collect.Lists;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 public class HostVersionOutOfSyncListenerTest {
@@ -109,8 +110,8 @@ public class HostVersionOutOfSyncListenerTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/metadata/AgentAlertDefinitionsTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/AgentAlertDefinitionsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/AgentAlertDefinitionsTest.java
index 970ceb9..cbc5e69 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/AgentAlertDefinitionsTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/AgentAlertDefinitionsTest.java
@@ -19,9 +19,14 @@ package org.apache.ambari.server.metadata;
 
 import java.util.List;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.RootServiceResponseFactory.Components;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.state.alert.AlertDefinition;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -40,6 +45,12 @@ public class AgentAlertDefinitionsTest {
   @Before
   public void before() {
     m_injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    m_injector.getInstance(GuiceJpaInitializer.class);
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
index 023d8fe..2f201c4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java
@@ -29,6 +29,7 @@ import static org.easymock.EasyMock.verify;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -39,6 +40,7 @@ import java.util.Set;
 import java.util.regex.Pattern;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -60,7 +62,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -79,8 +80,8 @@ public class RoleCommandOrderTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
index 4f1432d..303ee89 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java
@@ -22,11 +22,13 @@ package org.apache.ambari.server.metadata;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
@@ -47,7 +49,6 @@ import org.junit.Test;
 import com.google.common.collect.Lists;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -68,8 +69,8 @@ public class RoleGraphTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
index 9dcaeef..9522259 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java
@@ -37,10 +37,12 @@ import java.util.Map;
 import java.util.Vector;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
 import org.eclipse.persistence.sessions.DatabaseSession;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -61,11 +63,12 @@ public class DBAccessorImplTest {
   @Before
   public void setUp() throws Exception {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    injector.getInstance(GuiceJpaInitializer.class);
   }
 
   @After
   public void tearDown() throws Exception {
-
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private static String getFreeTableName() {
@@ -90,10 +93,11 @@ public class DBAccessorImplTest {
   @Test
   public void testDbType() throws Exception {
     DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class);
-    assertEquals(DBAccessor.DbType.DERBY, dbAccessor.getDbType());
+    assertEquals(DBAccessor.DbType.H2, dbAccessor.getDbType());
   }
 
   @Test
+  @Ignore
   public void testAlterColumn() throws Exception {
     String tableName = getFreeTableName();
     createMyTable(tableName);
@@ -123,21 +127,21 @@ public class DBAccessorImplTest {
     rs.close();
 
     // 2 - VARACHAR --> CLOB
-    toColumn = new DBColumnInfo("name", char[].class, 999, null, true);
+    toColumn = new DBColumnInfo("name", java.sql.Clob.class, 999, null, true);
     dbAccessor.alterColumn(tableName, toColumn);
     rs = statement.executeQuery(
         String.format("SELECT name FROM %s", tableName));
     while (rs.next()) {
       ResultSetMetaData rsm = rs.getMetaData();
       Clob clob = rs.getClob(toColumn.getName());
-      assertEquals(clob.getSubString(1, (int) clob.length()), dataString);
-      assertEquals(rsm.getColumnTypeName(1), "CLOB");
-      assertEquals(rsm.getColumnDisplaySize(1), 999);
+      assertEquals(dataString, clob.getSubString(1, (int) clob.length()));
+      assertEquals("CLOB", rsm.getColumnTypeName(1));
+      //size not supported for CLOB in H2
     }
     rs.close();
 
     // 3 - BLOB --> CLOB
-    toColumn = new DBColumnInfo("name_blob_to_clob", char[].class, 567, null,
+    toColumn = new DBColumnInfo("name_blob_to_clob", java.sql.Clob.class, 567, null,
         true);
     fromColumn = new DBColumnInfo("name_blob_to_clob", byte[].class, 20000,
         null, true);
@@ -239,7 +243,7 @@ public class DBAccessorImplTest {
 
     exception.expect(SQLException.class);
     exception.expectMessage(containsString("MYFKCONSTRAINT"));
-    dbAccessor.dropTable(tableName);
+    dbAccessor.executeQuery("DELETE FROM " + tableName);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/JdbcPropertyTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/JdbcPropertyTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/JdbcPropertyTest.java
index 20c0388..873c182 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/JdbcPropertyTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/JdbcPropertyTest.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.orm;
 
 import java.util.Properties;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.audit.AuditLoggerModule;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.ControllerModule;
@@ -30,7 +31,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class JdbcPropertyTest {
   Properties properties;
@@ -48,7 +48,7 @@ public class JdbcPropertyTest {
 
   @After
   public void tearDown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
index ead0a2d..ac8c8de 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
@@ -33,6 +33,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.persistence.EntityManager;
 
@@ -90,6 +91,8 @@ import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.alert.Scope;
 import org.apache.ambari.server.state.alert.SourceType;
 import org.apache.ambari.server.state.cluster.ClustersImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.security.crypto.password.PasswordEncoder;
 
 import com.google.inject.Inject;
@@ -103,6 +106,10 @@ import junit.framework.Assert;
 @Singleton
 public class OrmTestHelper {
 
+  private static Logger LOG = LoggerFactory.getLogger(OrmTestHelper.class);
+
+  private AtomicInteger uniqueCounter = new AtomicInteger();
+
   @Inject
   public Provider<EntityManager> entityManagerProvider;
 
@@ -559,7 +566,7 @@ public class OrmTestHelper {
       Set<AlertTargetEntity> targets) throws Exception {
     AlertGroupEntity group = new AlertGroupEntity();
     group.setDefault(false);
-    group.setGroupName("Group Name " + System.currentTimeMillis());
+    group.setGroupName("Group Name " + System.currentTimeMillis() + uniqueCounter.incrementAndGet());
     group.setClusterId(clusterId);
     group.setAlertTargets(targets);
 
@@ -620,8 +627,9 @@ public class OrmTestHelper {
     if (repositoryVersion == null) {
       try {
         repositoryVersion = repositoryVersionDAO.create(stackEntity, version,
-            String.valueOf(System.currentTimeMillis()), "");
+            String.valueOf(System.currentTimeMillis()) + uniqueCounter.incrementAndGet(), "");
       } catch (Exception ex) {
+        LOG.error("Caught exception", ex);
         Assert.fail(MessageFormat.format("Unable to create Repo Version for Stack {0} and version {1}",
             stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), version));
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java
index 48fbbac..5334c51 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.orm;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -26,6 +27,8 @@ import java.util.List;
 import javax.persistence.EntityManager;
 import javax.persistence.RollbackException;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -57,7 +60,6 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class TestOrmImpl extends Assert {
   private static final Logger log = LoggerFactory.getLogger(TestOrmImpl.class);
@@ -95,8 +97,8 @@ public class TestOrmImpl extends Assert {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDefinitionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDefinitionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDefinitionDAOTest.java
index b5ef209..5b31c78 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDefinitionDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDefinitionDAOTest.java
@@ -30,6 +30,7 @@ import java.util.List;
 import java.util.TimeZone;
 import java.util.UUID;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.RootServiceResponseFactory;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -53,7 +54,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 import junit.framework.Assert;
@@ -161,10 +161,10 @@ public class AlertDefinitionDAOTest {
   }
 
   @After
-  public void teardown() {
+  public void teardown() throws Exception {
     injector.getInstance(UnitOfWork.class).end();
 
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDispatchDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDispatchDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDispatchDAOTest.java
index ed4a196..1ec6d40 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDispatchDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertDispatchDAOTest.java
@@ -32,7 +32,10 @@ import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 
+import javax.persistence.EntityManager;
+
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.AlertNoticeRequest;
 import org.apache.ambari.server.controller.internal.AlertNoticeResourceProvider;
 import org.apache.ambari.server.controller.internal.PageRequestImpl;
@@ -68,7 +71,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 /**
@@ -125,7 +127,7 @@ public class AlertDispatchDAOTest {
   @After
   public void teardown() throws Exception {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
   private void initTestData() throws Exception {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
index 94f54d6..346d0b5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
@@ -33,6 +33,9 @@ import java.util.Map;
 import java.util.TimeZone;
 import java.util.UUID;
 
+import javax.persistence.EntityManager;
+
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.controller.AlertCurrentRequest;
 import org.apache.ambari.server.controller.AlertHistoryRequest;
 import org.apache.ambari.server.controller.internal.AlertHistoryResourceProvider;
@@ -71,7 +74,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 import com.google.inject.persist.UnitOfWork;
 
 /**
@@ -197,9 +199,9 @@ public class AlertsDAOTest {
    *
    */
   @After
-  public void teardown() {
+  public void teardown() throws Exception {
     m_injector.getInstance(UnitOfWork.class).end();
-    m_injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
     m_injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
index 2e0c232..81fa8e1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ClusterVersionDAOTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -32,7 +36,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * ClusterVersionDAO unit tests.
@@ -63,10 +66,11 @@ public class ClusterVersionDAOTest {
   @Before
   public void before() {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    injector.getInstance(GuiceJpaInitializer.class);
+
     clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
     clusterDAO = injector.getInstance(ClusterDAO.class);
     helper = injector.getInstance(OrmTestHelper.class);
-    injector.getInstance(GuiceJpaInitializer.class);
   }
 
   /**
@@ -253,8 +257,8 @@ public class ClusterVersionDAOTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ConfigGroupDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ConfigGroupDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ConfigGroupDAOTest.java
index c73843f..a42aa63 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ConfigGroupDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ConfigGroupDAOTest.java
@@ -17,12 +17,14 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -43,7 +45,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -79,8 +80,8 @@ public class ConfigGroupDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private ConfigGroupEntity createConfigGroup(String clusterName,
@@ -153,9 +154,11 @@ public class ConfigGroupDAOTest {
     ConfigGroupEntity configGroupEntity = createConfigGroup("c1", "hdfs-1",
       "HDFS", "some description", null, null);
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(configGroupEntity);
     Assert.assertEquals("c1", configGroupEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), configGroupEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, configGroupEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("hdfs-1", configGroupEntity.getGroupName());
     Assert.assertEquals("HDFS", configGroupEntity.getTag());
@@ -169,11 +172,13 @@ public class ConfigGroupDAOTest {
     List<ConfigGroupEntity> configGroupEntities = configGroupDAO.findAllByTag
       ("HDFS");
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(configGroupEntities);
     ConfigGroupEntity configGroupEntity = configGroupEntities.get(0);
     Assert.assertNotNull(configGroupEntity);
     Assert.assertEquals("c1", configGroupEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), configGroupEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, configGroupEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("hdfs-1", configGroupEntity.getGroupName());
     Assert.assertEquals("HDFS", configGroupEntity.getTag());
@@ -186,9 +191,11 @@ public class ConfigGroupDAOTest {
 
     ConfigGroupEntity configGroupEntity = configGroupDAO.findByName("hdfs-1");
 
+    Long clusterId = clusterDAO.findByName("c1").getClusterId();
+
     Assert.assertNotNull(configGroupEntity);
     Assert.assertEquals("c1", configGroupEntity.getClusterEntity().getClusterName());
-    Assert.assertEquals(Long.valueOf(1), configGroupEntity.getClusterEntity()
+    Assert.assertEquals(clusterId, configGroupEntity.getClusterEntity()
       .getClusterId());
     Assert.assertEquals("hdfs-1", configGroupEntity.getGroupName());
     Assert.assertEquals("HDFS", configGroupEntity.getTag());

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/CrudDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/CrudDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/CrudDAOTest.java
index ac6ef63..af54653 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/CrudDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/CrudDAOTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -31,7 +35,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * CrudDAO unit tests.
@@ -53,6 +56,7 @@ public class CrudDAOTest {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
     stackDAO = injector.getInstance(StackDAO.class);
     repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
 
     // required to populate stacks into the database
@@ -120,8 +124,7 @@ public class CrudDAOTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
-    injector = null;
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
index 6b482b4..2239835 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
@@ -17,9 +17,11 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.cache.HostConfigMapping;
@@ -32,7 +34,6 @@ import org.junit.Test;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -59,8 +60,8 @@ public class HostConfigMappingDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
   
   private HostConfigMapping createEntity(long clusterId, String hostName, String type, String version) throws Exception {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
index ba96353..d5fa793 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
@@ -17,11 +17,15 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
+import javax.persistence.EntityManager;
+
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
@@ -40,7 +44,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -70,8 +73,8 @@ public class HostRoleCommandDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    m_injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabase(m_injector.getProvider(EntityManager.class).get());
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
index e2f01a4..6219a69 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java
@@ -18,10 +18,13 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -44,7 +47,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 
 /**
@@ -71,6 +73,7 @@ public class HostVersionDAOTest {
   @Before
   public void before() {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    H2DatabaseCleaner.resetSequences(injector);
     injector.getInstance(GuiceJpaInitializer.class);
 
     resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
@@ -359,8 +362,8 @@ public class HostVersionDAOTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
index 6f6f05b..c7414bc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
@@ -18,9 +18,11 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.UUID;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -38,7 +40,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * RepositoryVersionDAO unit tests.
@@ -234,8 +235,8 @@ public class RepositoryVersionDAOTest {
   }
 
   @After
-  public void after() {
-    injector.getInstance(PersistService.class).stop();
+  public void after() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestDAOTest.java
index 384ef31..246c056 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestDAOTest.java
@@ -17,6 +17,7 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -25,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
@@ -48,7 +50,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * RequestDAO unit tests
@@ -76,8 +77,8 @@ public class RequestDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestScheduleDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestScheduleDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestScheduleDAOTest.java
index daf9d5e..39f5245 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestScheduleDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RequestScheduleDAOTest.java
@@ -17,9 +17,11 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import java.sql.SQLException;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -38,7 +40,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -70,8 +71,8 @@ public class RequestScheduleDAOTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private RequestScheduleEntity createScheduleEntity() {


[09/50] [abbrv] ambari git commit: AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. (mpapirkovskyy)

Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
index 974b49a..5b54af4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
@@ -23,6 +23,7 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.junit.Assert.fail;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -39,6 +40,7 @@ import javax.persistence.EntityManager;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.ClusterNotFoundException;
 import org.apache.ambari.server.DuplicateResourceException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.HostNotFoundException;
 import org.apache.ambari.server.agent.AgentEnv;
 import org.apache.ambari.server.agent.HostInfo;
@@ -86,7 +88,6 @@ import com.google.common.collect.Maps;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -115,8 +116,8 @@ public class ClustersTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private void setOsFamily(Host host, String osFamily, String osVersion) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
index 2500a16..8b56004 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ConcurrentServiceConfigVersionTest.java
@@ -18,12 +18,14 @@
 
 package org.apache.ambari.server.state.cluster;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
@@ -55,7 +57,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -126,8 +127,8 @@ public class ConcurrentServiceConfigVersionTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
index 96dbf26..eecf347 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ServiceComponentHostConcurrentWriteDeadlockTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.state.cluster;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -26,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.events.listeners.upgrade.HostVersionOutOfSyncListener;
@@ -58,7 +60,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
 import com.google.inject.util.Modules;
 
 /**
@@ -132,8 +133,8 @@ public class ServiceComponentHostConcurrentWriteDeadlockTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
index 5c8d174..d418a80 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
@@ -23,12 +23,14 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.AgentEnv;
@@ -64,7 +66,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class HostTest {
 
@@ -84,8 +85,8 @@ public class HostTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test
@@ -369,7 +370,6 @@ public class HostTest {
     c1.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
         RepositoryVersionState.INSTALLING);
     Assert.assertEquals("c1", c1.getClusterName());
-    Assert.assertEquals(1, c1.getClusterId());
     clusters.addHost("h1");
     Host host = clusters.getHost("h1");
     host.setIPv4("ipv4");
@@ -425,7 +425,6 @@ public class HostTest {
     clusters.addCluster("c1", stackId);
     Cluster c1 = clusters.getCluster("c1");
     Assert.assertEquals("c1", c1.getClusterName());
-    Assert.assertEquals(1, c1.getClusterId());
     clusters.addHost("h1");
     Host host = clusters.getHost("h1");
     host.setIPv4("ipv4");

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
index 7dd9932..ed95b0b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/services/RetryUpgradeActionServiceTest.java
@@ -17,12 +17,14 @@
  */
 package org.apache.ambari.server.state.services;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
@@ -47,6 +49,7 @@ import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -93,6 +96,11 @@ public class RetryUpgradeActionServiceTest {
     helper = injector.getInstance(OrmTestHelper.class);
   }
 
+  @After
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   /**
    * Test the gauva service allows retrying certain failed actions during a stack upgrade.
    * Case 1: No cluster => no-op

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradePackTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradePackTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradePackTest.java
index 52603d0..d6fdb7f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradePackTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradePackTest.java
@@ -23,9 +23,12 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Map;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -38,7 +41,6 @@ import org.junit.experimental.categories.Category;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Tests for the config upgrade pack
@@ -58,8 +60,8 @@ public class ConfigUpgradePackTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
index ee1b05e..44f72bd 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
@@ -18,11 +18,14 @@
 package org.apache.ambari.server.state.stack;
 
 import java.io.File;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.UpgradeResourceProvider.ConfigurationPackBuilder;
@@ -51,7 +54,6 @@ import org.slf4j.LoggerFactory;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -86,8 +88,8 @@ public class ConfigUpgradeValidityTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
index 99de92d..8ffc594 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
@@ -19,13 +19,18 @@ package org.apache.ambari.server.state.stack;
 
 
 import java.lang.reflect.Method;
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -44,10 +49,15 @@ public class OSFamilyTest {
   @Before
   public void setup() throws Exception {
     injector  = Guice.createInjector(new InMemoryDefaultTestModule());
-
+    injector.getInstance(GuiceJpaInitializer.class);
     os_family = injector.getInstance(OsFamily.class);
   }
 
+  @After
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
+  }
+
   @Test
   public void testOSListing() throws Exception{
    Set<String> actual_oslist =  os_family.os_list();

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
index 2d9a95f..e628c80 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -31,6 +32,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -61,7 +64,6 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.Sets;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Tests for the upgrade pack
@@ -83,8 +85,8 @@ public class UpgradePackTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index 6bd9a09..854a163 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.state.svccomphost;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -27,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.controller.ServiceComponentHostResponse;
@@ -74,7 +76,6 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 public class ServiceComponentHostTest {
   private static Logger LOG = LoggerFactory.getLogger(ServiceComponentHostTest.class);
@@ -130,8 +131,8 @@ public class ServiceComponentHostTest {
   }
 
   @After
-  public void teardown() {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private ClusterEntity createCluster(StackId stackId, String clusterName) throws AmbariException {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java
index 5435b30..3ebf4e7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map.Entry;
 
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -34,7 +35,6 @@ import org.junit.Test;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
 
 /**
  * Tests the StackUpgradeHelper
@@ -51,7 +51,7 @@ public class StackUpgradeUtilTest {
 
   @After
   public void teardown() throws Exception {
-    injector.getInstance(PersistService.class).stop();
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   private void reset(String stackName, String stackVersion) throws Exception {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
index 87cea1b..729340f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
@@ -52,6 +52,7 @@ import java.util.Map;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -97,7 +98,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 
 /**
  * {@link UpgradeCatalog200} unit tests.
@@ -125,8 +125,8 @@ public class UpgradeCatalog200Test {
   }
 
   @After
-  public void tearDown() {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
index 7106021..0d4eb43 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
@@ -52,6 +52,7 @@ import java.util.Set;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -98,7 +99,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 
 /**
  * {@link org.apache.ambari.server.upgrade.UpgradeCatalog210} unit tests.
@@ -125,8 +125,8 @@ public class UpgradeCatalog210Test {
     desiredStackEntity = stackDAO.find("HDP", "2.2.0");
   }
 
-  public void tearDown() {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
index 8f0f66b..7ae3f42 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
@@ -28,6 +28,7 @@ import static org.easymock.EasyMock.reset;
 import static org.easymock.EasyMock.verify;
 
 import java.lang.reflect.Method;
+import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -35,6 +36,8 @@ import java.util.Set;
 
 import javax.persistence.EntityManager;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor;
@@ -56,7 +59,6 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 
 @PrepareForTest(UpgradeCatalog2121.class)
 public class UpgradeCatalog2121Test {
@@ -83,8 +85,8 @@ public class UpgradeCatalog2121Test {
   }
 
   @After
-  public void tearDown() {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
index d15ca25..3f7bcc8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog212Test.java
@@ -43,6 +43,8 @@ import java.util.Map;
 
 import javax.persistence.EntityManager;
 
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -76,7 +78,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 
 /**
  * {@link org.apache.ambari.server.upgrade.UpgradeCatalog212} unit tests.
@@ -138,9 +139,9 @@ public class UpgradeCatalog212Test {
   }
 
   @After
-  public void tearDown() {
+  public void tearDown() throws AmbariException, SQLException {
     if (injector != null) {
-      injector.getInstance(PersistService.class).stop();
+      H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
index e687b10..0160d86 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
@@ -50,6 +50,7 @@ import java.util.Map;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
@@ -111,7 +112,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 /**
  * {@link org.apache.ambari.server.upgrade.UpgradeCatalog220} unit tests.
  */
@@ -148,8 +148,8 @@ public class UpgradeCatalog220Test {
   }
 
   @AfterClass
-  public static void tearDown() {
-    injector.getInstance(PersistService.class).stop();
+  public static void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
index 496a8ef..d1b2eb8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog240Test.java
@@ -57,6 +57,7 @@ import java.util.Map;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
@@ -119,7 +120,7 @@ import org.easymock.Capture;
 import org.easymock.CaptureType;
 import org.easymock.EasyMock;
 import org.easymock.EasyMockSupport;
-import org.junit.After;
+import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -168,8 +169,9 @@ public class UpgradeCatalog240Test {
     stackDAO.find("HDP", "2.2.0");
   }
 
-  @After
-  public void tearDown() {
+  @AfterClass
+  public static void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
index 4c1a27b..0cd4f12f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
@@ -43,6 +43,7 @@ import java.util.Set;
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -82,7 +83,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 /**
@@ -121,8 +121,8 @@ public class UpgradeCatalog242Test {
   }
 
   @After
-  public void tearDown() {
-    injector.getInstance(PersistService.class).stop();
+  public void tearDown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogTest.java
index cca27b1..fa40db9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogTest.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -35,7 +36,6 @@ import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.multibindings.Multibinder;
-import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
@@ -99,8 +99,8 @@ public class UpgradeCatalogTest {
   }
 
   @After
-  public void teardown() throws AmbariException {
-    injector.getInstance(PersistService.class).stop();
+  public void teardown() throws AmbariException, SQLException {
+    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
 
     // Clear the authenticated user
     SecurityContextHolder.getContext().setAuthentication(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3a7906c8/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 232e4a9..3f5a884 100644
--- a/pom.xml
+++ b/pom.xml
@@ -393,6 +393,8 @@
             <exclude>ambari-metrics/*/target/**</exclude>
             <!-- ignore .settings and .project  -->
             <exclude>ambari-metrics/**/.*/**</exclude>
+            <!-- generated DDL-->
+            <exclude>**/createDDL.jdbc</exclude>
           </excludes>
         </configuration>
         <executions>


[15/50] [abbrv] ambari git commit: AMBARI-19802. Debug: agent randomly losing heartbeat with the server. (Attila Doroszlai via stoader)

Posted by nc...@apache.org.
AMBARI-19802. Debug: agent randomly losing heartbeat with the server. (Attila Doroszlai via stoader)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 2627380840c1ae57d21cc60b666b4a503863366e
Parents: 0ec0597
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Wed Feb 1 19:06:29 2017 +0100
Committer: Toader, Sebastian <st...@hortonworks.com>
Committed: Wed Feb 1 19:06:29 2017 +0100

----------------------------------------------------------------------
 .../src/main/python/ambari_agent/Controller.py  | 51 +++++++++++++-------
 .../ambari_agent/StatusCommandsExecutor.py      |  1 +
 2 files changed, 34 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/26273808/ambari-agent/src/main/python/ambari_agent/Controller.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/Controller.py b/ambari-agent/src/main/python/ambari_agent/Controller.py
index 6370715..45c057f 100644
--- a/ambari-agent/src/main/python/ambari_agent/Controller.py
+++ b/ambari-agent/src/main/python/ambari_agent/Controller.py
@@ -274,7 +274,7 @@ class Controller(threading.Thread):
     self.DEBUG_SUCCESSFULL_HEARTBEATS = 0
     retry = False
     certVerifFailed = False
-    state_interval = self.config.get('heartbeat', 'state_interval_seconds', '60')
+    state_interval = int(self.config.get('heartbeat', 'state_interval_seconds', '60'))
 
     # last time when state was successfully sent to server
     last_state_timestamp = 0.0
@@ -289,27 +289,34 @@ class Controller(threading.Thread):
     getrecoverycommands_timestamp = 0.0
     getrecoverycommands_interval = self.netutil.HEARTBEAT_IDLE_INTERVAL_DEFAULT_MAX_SEC
 
+    heartbeat_interval = self.netutil.HEARTBEAT_IDLE_INTERVAL_DEFAULT_MAX_SEC
+
     while not self.DEBUG_STOP_HEARTBEATING:
-      heartbeat_interval = self.netutil.HEARTBEAT_IDLE_INTERVAL_DEFAULT_MAX_SEC
+      current_time = time.time()
+      logging_level = logging.DEBUG
+      if current_time - heartbeat_running_msg_timestamp > state_interval:
+        # log more steps every minute or so
+        logging_level = logging.INFO
+        heartbeat_running_msg_timestamp = current_time
 
       try:
-        crt_time = time.time()
-        if crt_time - heartbeat_running_msg_timestamp > int(state_interval):
-          logger.info("Heartbeat (response id = %s) with server is running...", self.responseId)
-          heartbeat_running_msg_timestamp = crt_time
+        logger.log(logging_level, "Heartbeat (response id = %s) with server is running...", self.responseId)
 
         send_state = False
         if not retry:
-          if crt_time - last_state_timestamp > int(state_interval):
+          if current_time - last_state_timestamp > state_interval:
             send_state = True
 
-          data = json.dumps(
-              self.heartbeat.build(self.responseId, send_state, self.hasMappedComponents))
+          logger.log(logging_level, "Building heartbeat message")
+
+          data = json.dumps(self.heartbeat.build(self.responseId, send_state, self.hasMappedComponents))
         else:
           self.DEBUG_HEARTBEAT_RETRIES += 1
 
-
-        logger.debug("Sending Heartbeat (id = %s): %s", self.responseId, data)
+        if logger.isEnabledFor(logging.DEBUG):
+          logger.log(logging_level, "Sending Heartbeat (id = %s): %s", self.responseId, data)
+        else:
+          logger.log(logging_level, "Sending Heartbeat (id = %s)", self.responseId)
 
         response = self.sendRequest(self.heartbeatUrl, data)
         exitStatus = 0
@@ -321,8 +328,7 @@ class Controller(threading.Thread):
 
         serverId = int(response['responseId'])
 
-
-        logger.debug('Heartbeat response received (id = %s)', serverId)
+        logger.log(logging_level, 'Heartbeat response received (id = %s)', serverId)
 
         cluster_size = int(response['clusterSize']) if 'clusterSize' in response.keys() else -1
 
@@ -331,8 +337,7 @@ class Controller(threading.Thread):
           if cluster_size > 0 \
           else self.netutil.HEARTBEAT_IDLE_INTERVAL_DEFAULT_MAX_SEC
 
-
-        logger.debug("Heartbeat interval is %s seconds", heartbeat_interval)
+        logger.log(logging_level, "Heartbeat interval is %s seconds", heartbeat_interval)
 
         if 'hasMappedComponents' in response.keys():
           self.hasMappedComponents = response['hasMappedComponents'] is not False
@@ -364,10 +369,11 @@ class Controller(threading.Thread):
         else:
           self.responseId = serverId
           if send_state:
-            last_state_timestamp = time.time()
+            last_state_timestamp = current_time
 
         # if the response contains configurations, update the in-memory and
         # disk-based configuration cache (execution and alert commands have this)
+        logger.log(logging_level, "Updating configurations from heartbeat")
         self.cluster_configuration.update_configurations_from_heartbeat(response)
 
         response_keys = response.keys()
@@ -375,6 +381,8 @@ class Controller(threading.Thread):
         # there's case when canceled task can be processed in Action Queue.execute before adding rescheduled task to queue
         # this can cause command failure instead result suppression
         # so canceling and putting rescheduled commands should be executed atomically
+        if 'cancelCommands' in response_keys or 'executionCommands' in response_keys:
+          logger.log(logging_level, "Adding cancel/execution commands")
         with self.actionQueue.lock:
           if 'cancelCommands' in response_keys:
             self.cancelCommandInQueue(response['cancelCommands'])
@@ -388,9 +396,10 @@ class Controller(threading.Thread):
           # try storing execution command details and desired state
           self.addToStatusQueue(response['statusCommands'])
 
-        if crt_time - getrecoverycommands_timestamp > int(getrecoverycommands_interval):
-          getrecoverycommands_timestamp = crt_time
+        if current_time - getrecoverycommands_timestamp > getrecoverycommands_interval:
+          getrecoverycommands_timestamp = current_time
           if not self.actionQueue.tasks_in_progress_or_pending():
+            logger.log(logging_level, "Adding recovery commands")
             recovery_commands = self.recovery_manager.get_recovery_commands()
             for recovery_command in recovery_commands:
               logger.info("Adding recovery command %s for component %s",
@@ -398,9 +407,11 @@ class Controller(threading.Thread):
               self.addToQueue([recovery_command])
 
         if 'alertDefinitionCommands' in response_keys:
+          logger.log(logging_level, "Updating alert definitions")
           self.alert_scheduler_handler.update_definitions(response)
 
         if 'alertExecutionCommands' in response_keys:
+          logger.log(logging_level, "Executing alert commands")
           self.alert_scheduler_handler.execute_alert(response['alertExecutionCommands'])
 
         if "true" == response['restartAgent']:
@@ -414,6 +425,7 @@ class Controller(threading.Thread):
 
         if "recoveryConfig" in response:
           # update the list of components enabled for recovery
+          logger.log(logging_level, "Updating recovery config")
           self.recovery_manager.update_configuration_from_registration(response)
 
         retry = False
@@ -455,12 +467,15 @@ class Controller(threading.Thread):
 
       # Sleep for some time
       timeout = heartbeat_interval - self.netutil.MINIMUM_INTERVAL_BETWEEN_HEARTBEATS
+      logger.log(logging_level, "Waiting %s for next heartbeat", timeout)
 
       if 0 == self.heartbeat_stop_callback.wait(timeout, self.netutil.MINIMUM_INTERVAL_BETWEEN_HEARTBEATS):
         # Stop loop when stop event received
         logger.info("Stop event received")
         self.DEBUG_STOP_HEARTBEATING=True
 
+      logger.log(logging_level, "Wait for next heartbeat over")
+
   def spawnStatusCommandsExecutorProcess(self):
     '''
     Starts a new StatusCommandExecutor child process. In case there is a running instance

http://git-wip-us.apache.org/repos/asf/ambari/blob/26273808/ambari-agent/src/main/python/ambari_agent/StatusCommandsExecutor.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/StatusCommandsExecutor.py b/ambari-agent/src/main/python/ambari_agent/StatusCommandsExecutor.py
index fbb29f4..2f15770 100644
--- a/ambari-agent/src/main/python/ambari_agent/StatusCommandsExecutor.py
+++ b/ambari-agent/src/main/python/ambari_agent/StatusCommandsExecutor.py
@@ -47,6 +47,7 @@ class StatusCommandsExecutor(multiprocessing.Process):
   def run(self):
     try:
       bind_debug_signal_handlers()
+      logger.info("StatusCommandsExecutor starting")
       while True:
         command = self.actionQueue.statusCommandQueue.get(True) # blocks until status status command appears
         logger.debug("Running status command for {0}".format(command['componentName']))


[34/50] [abbrv] ambari git commit: AMBARI-19804: Typo in preinstall_checker util script in the contrib project (dili)

Posted by nc...@apache.org.
AMBARI-19804: Typo in preinstall_checker util script in the contrib project (dili)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 7c8931a5e5a6320145867ea3bcd48a379c1c87a8
Parents: c8b347c
Author: Di Li <di...@apache.org>
Authored: Thu Feb 2 10:57:39 2017 -0500
Committer: Di Li <di...@apache.org>
Committed: Thu Feb 2 10:57:39 2017 -0500

----------------------------------------------------------------------
 .../utils/preinstall-check/src/main/python/preinstall_checker.py   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7c8931a5/contrib/utils/preinstall-check/src/main/python/preinstall_checker.py
----------------------------------------------------------------------
diff --git a/contrib/utils/preinstall-check/src/main/python/preinstall_checker.py b/contrib/utils/preinstall-check/src/main/python/preinstall_checker.py
index 5da3772..eddb738 100644
--- a/contrib/utils/preinstall-check/src/main/python/preinstall_checker.py
+++ b/contrib/utils/preinstall-check/src/main/python/preinstall_checker.py
@@ -128,7 +128,7 @@ def validate_options(options):
   if not options.password:
     errors.append("No Ambari admin user passsword provided.")
   if not options.log:
-      errors.append("No log patch provided.")
+      errors.append("No log home path provided.")
 
   """General check for operations"""
   if not options.operation:


[13/50] [abbrv] ambari git commit: AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. Additional fixes. (mpapirkovskyy)

Posted by nc...@apache.org.
AMBARI-19799. Optimize DB initialization for Ambari Server Unit Tests. Additional fixes. (mpapirkovskyy)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 144449cba7247d1b529e21b98c3fe9014c60b544
Parents: 3a7906c
Author: Myroslav Papirkovskyi <mp...@hortonworks.com>
Authored: Wed Feb 1 19:07:45 2017 +0200
Committer: Myroslav Papirkovskyi <mp...@hortonworks.com>
Committed: Wed Feb 1 19:07:45 2017 +0200

----------------------------------------------------------------------
 ambari-server/pom.xml                                          | 3 +++
 .../ambari/server/topology/AsyncCallableServiceTest.java       | 6 +++---
 2 files changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/144449cb/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index a9518e1..0441867 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -327,6 +327,9 @@
 
             <!--Velocity log -->
             <exclude>**/velocity.log*</exclude>
+
+            <!-- generated DDL-->
+            <exclude>**/createDDL.jdbc</exclude>
           </excludes>
         </configuration>
         <executions>

http://git-wip-us.apache.org/repos/asf/ambari/blob/144449cb/ambari-server/src/test/java/org/apache/ambari/server/topology/AsyncCallableServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/AsyncCallableServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/AsyncCallableServiceTest.java
index 60bb2ba..4d96294 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/AsyncCallableServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/AsyncCallableServiceTest.java
@@ -74,8 +74,8 @@ public class AsyncCallableServiceTest extends EasyMockSupport {
   public void testCallableServiceShouldCancelTaskWhenTimeoutExceeded() throws Exception {
     // GIVEN
 
-    //the timeout period should be small!!!
-    timeout = 1l;
+    //the timeout period should be less zero for guaranteed timeout!
+    timeout = -1l;
 
     // the task to be executed never completes successfully
     expect(futureMock.get(timeout, TimeUnit.MILLISECONDS)).andThrow(new TimeoutException("Testing the timeout exceeded case"));
@@ -179,4 +179,4 @@ public class AsyncCallableServiceTest extends EasyMockSupport {
     verify();
     Assert.assertNull("Service result must be null", serviceResult);
   }
-}
\ No newline at end of file
+}


[43/50] [abbrv] ambari git commit: AMBARI-19810. Remove upgrade logic in UpdateCatalog250 for tez-interactive-site's 'tez.runtime.io.sort.mb' and 'tez.runtime.unordered.output.buffer.size-mb'.

Posted by nc...@apache.org.
AMBARI-19810. Remove upgrade logic in UpdateCatalog250 for tez-interactive-site's 'tez.runtime.io.sort.mb' and 'tez.runtime.unordered.output.buffer.size-mb'.


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 975dd1d40c6136a61e7d014fb0dfc32e09863a2b
Parents: ebc05a9
Author: Swapan Shridhar <ss...@hortonworks.com>
Authored: Thu Feb 2 14:09:00 2017 -0800
Committer: Swapan Shridhar <ss...@hortonworks.com>
Committed: Thu Feb 2 14:57:04 2017 -0800

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog250.java       | 58 ++++-----------
 .../server/upgrade/UpgradeCatalog250Test.java   | 78 +++++++++-----------
 2 files changed, 50 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/975dd1d4/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
index 71cde7e..1e36a3c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
@@ -17,20 +17,8 @@
  */
 package org.apache.ambari.server.upgrade;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
-
+import com.google.inject.Inject;
+import com.google.inject.Injector;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.CommandExecutionType;
 import org.apache.ambari.server.configuration.Configuration;
@@ -46,8 +34,19 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.jdbc.support.JdbcUtils;
 
-import com.google.inject.Inject;
-import com.google.inject.Injector;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * Upgrade catalog for version 2.5.0.
@@ -161,7 +160,6 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
     updateHadoopEnvConfigs();
     updateKafkaConfigs();
     updateHIVEInteractiveConfigs();
-    updateTEZInteractiveConfigs();
     updateHiveLlapConfigs();
     updateTablesForZeppelinViewRemoval();
     updateZeppelinConfigs();
@@ -678,32 +676,6 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
   }
 
   /**
-   * Updates Tez for Hive2 Interactive's config in tez-interactive-site.
-   *
-   * @throws AmbariException
-   */
-  protected void updateTEZInteractiveConfigs() throws AmbariException {
-    AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
-    Clusters clusters = ambariManagementController.getClusters();
-    if (clusters != null) {
-      Map<String, Cluster> clusterMap = clusters.getClusters();
-
-      if (clusterMap != null && !clusterMap.isEmpty()) {
-        for (final Cluster cluster : clusterMap.values()) {
-          Config tezInteractiveSite = cluster.getDesiredConfigByType("tez-interactive-site");
-          if (tezInteractiveSite != null) {
-
-            updateConfigurationProperties("tez-interactive-site", Collections.singletonMap("tez.runtime.io.sort.mb", "512"), true, true);
-
-            updateConfigurationProperties("tez-interactive-site", Collections.singletonMap("tez.runtime.unordered.output.buffer.size-mb",
-                "100"), true, true);
-          }
-        }
-      }
-    }
-  }
-
-  /**
    * Updates Log Search configs.
    *
    * @throws AmbariException

http://git-wip-us.apache.org/repos/asf/ambari/blob/975dd1d4/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
index 1cabe47..b950594 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
@@ -18,35 +18,15 @@
 
 package org.apache.ambari.server.upgrade;
 
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.anyString;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMockBuilder;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.newCapture;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertTrue;
-
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.gson.Gson;
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.Provider;
+import junit.framework.AssertionFailedError;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.configuration.Configuration;
@@ -78,16 +58,33 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import com.google.gson.Gson;
-import com.google.inject.Binder;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import com.google.inject.Provider;
+import javax.persistence.EntityManager;
+import java.lang.reflect.Method;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
-import junit.framework.AssertionFailedError;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.anyString;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMockBuilder;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.newCapture;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertTrue;
 
 /**
  * {@link UpgradeCatalog250} unit tests.
@@ -277,7 +274,6 @@ public class UpgradeCatalog250Test {
     Method updateKafkaConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateKafkaConfigs");
     Method updateHiveLlapConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateHiveLlapConfigs");
     Method updateHIVEInteractiveConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateHIVEInteractiveConfigs");
-    Method updateTEZInteractiveConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateTEZInteractiveConfigs");
     Method addManageServiceAutoStartPermissions = UpgradeCatalog250.class.getDeclaredMethod("addManageServiceAutoStartPermissions");
     Method addNewConfigurationsFromXml = AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml");
     Method updateTablesForZeppelinViewRemoval = UpgradeCatalog250.class.getDeclaredMethod("updateTablesForZeppelinViewRemoval");
@@ -296,7 +292,6 @@ public class UpgradeCatalog250Test {
         .addMockedMethod(addNewConfigurationsFromXml)
         .addMockedMethod(addManageServiceAutoStartPermissions)
         .addMockedMethod(updateHIVEInteractiveConfigs)
-        .addMockedMethod(updateTEZInteractiveConfigs)
         .addMockedMethod(updateTablesForZeppelinViewRemoval)
         .addMockedMethod(updateZeppelinConfigs)
         .addMockedMethod(updateAtlasConfigs)
@@ -321,9 +316,6 @@ public class UpgradeCatalog250Test {
     upgradeCatalog250.updateHIVEInteractiveConfigs();
     expectLastCall().once();
 
-    upgradeCatalog250.updateTEZInteractiveConfigs();
-    expectLastCall().once();
-
     upgradeCatalog250.updateHiveLlapConfigs();
     expectLastCall().once();
 


[24/50] [abbrv] ambari git commit: AMBARI-19733: Regression in Spark2 keytab and {{stack_root}} for Livy2 (Bikas Saha via jluniya)

Posted by nc...@apache.org.
AMBARI-19733: Regression in Spark2 keytab and {{stack_root}} for Livy2 (Bikas Saha via jluniya)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: b01438c7dc82ec9f0263eed8b6c1575491e78f6b
Parents: c744cac
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Wed Feb 1 21:54:08 2017 -0800
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Wed Feb 1 21:54:08 2017 -0800

----------------------------------------------------------------------
 .../stacks/HDP/2.6/services/SPARK2/configuration/livy2-env.xml   | 2 +-
 .../main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b01438c7/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/livy2-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/livy2-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/livy2-env.xml
index 2f865b7..751d005 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/livy2-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/livy2-env.xml
@@ -61,7 +61,7 @@
     </property>
     <property>
         <name>spark_home</name>
-        <value>{{stack_root}}/current/spark2-client</value>
+        <value>/usr/hdp/current/spark2-client</value>
         <value-attributes>
             <type>directory</type>
         </value-attributes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b01438c7/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
index 6b5b053..01ee87e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
@@ -15,7 +15,7 @@
             "local_username" : "${spark2-env/spark_user}"
           },
           "keytab": {
-            "file": "${keytab_dir}/spark.headless.keytab",
+            "file": "${keytab_dir}/spark2.headless.keytab",
             "owner": {
               "name": "${spark2-env/spark_user}",
               "access": "r"
@@ -96,7 +96,7 @@
                 "local_username": "${livy2-env/livy2_user}"
               },
               "keytab": {
-                "file": "${keytab_dir}/livy.service.keytab",
+                "file": "${keytab_dir}/livy2.service.keytab",
                 "owner": {
                   "name": "${livy2-env/livy2_user}",
                   "access": "r"


[30/50] [abbrv] ambari git commit: AMBARI-19818. "Set version on all hosts" failed during EU (dlysnichenko)

Posted by nc...@apache.org.
AMBARI-19818. "Set version on all hosts" failed during EU (dlysnichenko)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: db36bd92f6cf7d648d0a748cb9164185d12ee329
Parents: 325dc20
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Thu Feb 2 11:32:04 2017 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Thu Feb 2 11:32:04 2017 +0200

----------------------------------------------------------------------
 ambari-agent/conf/unix/agent-multiplier.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/db36bd92/ambari-agent/conf/unix/agent-multiplier.py
----------------------------------------------------------------------
diff --git a/ambari-agent/conf/unix/agent-multiplier.py b/ambari-agent/conf/unix/agent-multiplier.py
index 5abae58..63409dd 100644
--- a/ambari-agent/conf/unix/agent-multiplier.py
+++ b/ambari-agent/conf/unix/agent-multiplier.py
@@ -320,19 +320,22 @@ class Multiplier:
     print "Starting %d host(s)" % len(self.hosts)
     for host in self.hosts:
       cmd = "ambari-agent start --home %s" % (host.home_dir)
-      subprocess.call(cmd, shell=True)
+      os.environ['AMBARI_AGENT_CONF_DIR'] = os.path.join(host.home_dir, "etc/ambari-agent/conf")
+      subprocess.call(cmd, shell=True, env=os.environ)
 
   def cmd_stop(self):
     print "Stopping %d host(s)" % len(self.hosts)
     for host in self.hosts:
       cmd = "ambari-agent stop --home %s" % (host.home_dir)
-      subprocess.call(cmd, shell=True)
+      os.environ['AMBARI_AGENT_CONF_DIR'] = os.path.join(host.home_dir, "etc/ambari-agent/conf")
+      subprocess.call(cmd, shell=True, env=os.environ)
 
   def cmd_restart(self):
     print "Restarting %d host(s)" % len(self.hosts)
     for host in self.hosts:
       cmd = "ambari-agent restart --home %s" % (host.home_dir)
-      subprocess.call(cmd, shell=True)
+      os.environ['AMBARI_AGENT_CONF_DIR'] = os.path.join(host.home_dir, "etc/ambari-agent/conf")
+      subprocess.call(cmd, shell=True, env=os.environ)
 
   def cmd_status(self):
     print "Summary of Agent Status:"


[33/50] [abbrv] ambari git commit: AMBARI-19797. ambari-server SuSE11 init script not working in certain environments (aonishuk)

Posted by nc...@apache.org.
AMBARI-19797. ambari-server SuSE11 init script not working in certain environments (aonishuk)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: c8b347c9ebb4bf2c1d5b544911185c01436d1f9b
Parents: 0b472f2
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Thu Feb 2 16:20:30 2017 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Thu Feb 2 16:20:30 2017 +0200

----------------------------------------------------------------------
 ambari-server/sbin/ambari-server | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c8b347c9/ambari-server/sbin/ambari-server
----------------------------------------------------------------------
diff --git a/ambari-server/sbin/ambari-server b/ambari-server/sbin/ambari-server
index 5f97299..205f272 100755
--- a/ambari-server/sbin/ambari-server
+++ b/ambari-server/sbin/ambari-server
@@ -21,6 +21,7 @@
 
 ### BEGIN INIT INFO
 # Provides:          ambari-server
+# Required-Start:    $ALL
 # Required-Start:
 # Required-Stop:
 # Default-Start:     2 3 4 5


[37/50] [abbrv] ambari git commit: AMBARI-19800. Add precheck for Auto-Start being disabled (ncole)

Posted by nc...@apache.org.
AMBARI-19800. Add precheck for Auto-Start being disabled (ncole)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: f297c48f016c9deab2cf423fab3a87948496682b
Parents: 98608ce
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Feb 2 11:07:30 2017 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Feb 2 13:06:16 2017 -0500

----------------------------------------------------------------------
 .../server/checks/AutoStartDisabledCheck.java   |  74 ++++++++++++
 .../ambari/server/checks/CheckDescription.java  |   7 ++
 .../checks/AutoStartDisabledCheckTest.java      | 121 +++++++++++++++++++
 3 files changed, 202 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f297c48f/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java
new file mode 100644
index 0000000..c41ad20
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AutoStartDisabledCheck.java
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.server.checks;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.state.stack.PrereqCheckStatus;
+import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang.StringUtils;
+
+import com.google.inject.Singleton;
+
+/**
+ * The {@link AutoStartDisabledCheck} class is used to check that the cluster does
+ * not have auto-restart enabled.
+ */
+@Singleton
+@UpgradeCheck(
+    group = UpgradeCheckGroup.CONFIGURATION_WARNING,
+    required = { UpgradeType.ROLLING, UpgradeType.NON_ROLLING, UpgradeType.HOST_ORDERED })
+public class AutoStartDisabledCheck extends AbstractCheckDescriptor {
+
+  static final String CLUSTER_ENV_TYPE = "cluster-env";
+  static final String RECOVERY_ENABLED_KEY = "recovery_enabled";
+  static final String RECOVERY_TYPE_KEY = "recovery_type";
+  static final String RECOVERY_AUTO_START = "AUTO_START";
+
+  /**
+   * Constructor.
+   */
+  public AutoStartDisabledCheck() {
+    super(CheckDescription.AUTO_START_DISABLED);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
+
+    String autoStartEnabled = getProperty(request, CLUSTER_ENV_TYPE, RECOVERY_ENABLED_KEY);
+
+    // !!! auto-start is already disabled
+    if (!Boolean.valueOf(autoStartEnabled)) {
+      return;
+    }
+
+    // !!! double check the value is AUTO_START.  it's the only supported value (and there's no enum for it)
+    String recoveryType = getProperty(request, CLUSTER_ENV_TYPE, RECOVERY_TYPE_KEY);
+    if (StringUtils.equals(recoveryType, RECOVERY_AUTO_START)) {
+
+      prerequisiteCheck.setFailReason(getFailReason(prerequisiteCheck, request));
+      prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
+      prerequisiteCheck.getFailedOn().add(request.getClusterName());
+
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f297c48f/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
index a204ada..8d8f540 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
@@ -313,6 +313,13 @@ public class CheckDescription {
       .put(AbstractCheckDescriptor.DEFAULT,
           "Storm does not support rolling upgrades on this version of the stack. If you proceed, you will be required to stop all running topologies before Storm is restarted.").build());
 
+  public static CheckDescription AUTO_START_DISABLED = new CheckDescription("AUTO_START_DISABLED",
+    PrereqCheckType.CLUSTER,
+    "Auto-Start Disabled Check",
+    new ImmutableMap.Builder<String, String>()
+      .put(AbstractCheckDescriptor.DEFAULT,
+        "Auto-Start must be disabled before performing an Upgrade").build());
+
 
   private String m_name;
   private PrereqCheckType m_type;

http://git-wip-us.apache.org/repos/asf/ambari/blob/f297c48f/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java
new file mode 100644
index 0000000..c1e2ce7
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/AutoStartDisabledCheckTest.java
@@ -0,0 +1,121 @@
+/**
+ * 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.
+ */
+package org.apache.ambari.server.checks;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.stack.PrereqCheckStatus;
+import org.apache.ambari.server.state.stack.PrerequisiteCheck;
+import org.easymock.EasyMock;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.inject.Provider;
+
+/**
+ * Tests for {@link AutoStartDisabledCheck}
+ */
+public class AutoStartDisabledCheckTest {
+
+  private final AutoStartDisabledCheck m_check = new AutoStartDisabledCheck();
+  private final Clusters m_clusters = EasyMock.createMock(Clusters.class);
+  private Map<String, String> m_configMap = new HashMap<>();
+
+  @Before
+  public void before() throws Exception {
+
+    m_check.clustersProvider = new Provider<Clusters>() {
+      @Override
+      public Clusters get() {
+        return m_clusters;
+      }
+    };
+
+    Cluster cluster = EasyMock.createMock(Cluster.class);
+
+    Map<String, DesiredConfig> map = new HashMap<>();
+    map.put(AutoStartDisabledCheck.CLUSTER_ENV_TYPE, new DesiredConfig());
+
+    expect(cluster.getDesiredConfigs()).andReturn(map).anyTimes();
+
+    Config config = EasyMock.createMock(Config.class);
+    expect(config.getProperties()).andReturn(m_configMap).anyTimes();
+
+    expect(cluster.getConfig(EasyMock.eq(AutoStartDisabledCheck.CLUSTER_ENV_TYPE), EasyMock.anyString()))
+      .andReturn(config).anyTimes();
+
+    expect(m_clusters.getCluster((String) anyObject())).andReturn(cluster).anyTimes();
+
+    replay(m_clusters, cluster, config);
+
+    m_configMap.clear();
+  }
+
+  @Test
+  public void testNoAutoStart() throws Exception {
+    PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.AUTO_START_DISABLED, "foo");
+    PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+
+    Assert.assertTrue(m_check.isApplicable(request));
+
+    m_check.perform(check, request);
+
+    Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+  }
+
+  @Test
+  public void testAutoStartFalse() throws Exception {
+    PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.AUTO_START_DISABLED, "foo");
+    PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+
+    Assert.assertTrue(m_check.isApplicable(request));
+
+    m_configMap.put(AutoStartDisabledCheck.RECOVERY_ENABLED_KEY, "false");
+
+    m_check.perform(check, request);
+
+    Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus());
+  }
+
+  @Test
+  public void testAutoStartTrue() throws Exception {
+    PrerequisiteCheck check = new PrerequisiteCheck(CheckDescription.AUTO_START_DISABLED, "foo");
+    PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+
+    Assert.assertTrue(m_check.isApplicable(request));
+
+    m_configMap.put(AutoStartDisabledCheck.RECOVERY_ENABLED_KEY, "true");
+    m_configMap.put(AutoStartDisabledCheck.RECOVERY_TYPE_KEY, AutoStartDisabledCheck.RECOVERY_AUTO_START);
+
+    m_check.perform(check, request);
+
+    Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+  }
+
+}


[44/50] [abbrv] ambari git commit: AMBARI-19805. Add outputFormat attribute to all PXF Hive-related profiles.

Posted by nc...@apache.org.
AMBARI-19805. Add outputFormat attribute to all PXF Hive-related profiles.


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 14cd837ea5c33ca4ebf5daf9262fe40d1f5a9130
Parents: 975dd1d
Author: Oleksandr Diachenko <od...@pivotal.io>
Authored: Thu Feb 2 15:58:28 2017 -0800
Committer: Oleksandr Diachenko <od...@pivotal.io>
Committed: Thu Feb 2 15:58:28 2017 -0800

----------------------------------------------------------------------
 .../PXF/3.0.0/configuration/pxf-profiles.xml         | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/14cd837e/ambari-server/src/main/resources/common-services/PXF/3.0.0/configuration/pxf-profiles.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/configuration/pxf-profiles.xml b/ambari-server/src/main/resources/common-services/PXF/3.0.0/configuration/pxf-profiles.xml
index 77aa4fc..a3e587d 100644
--- a/ambari-server/src/main/resources/common-services/PXF/3.0.0/configuration/pxf-profiles.xml
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/configuration/pxf-profiles.xml
@@ -71,12 +71,16 @@ under the License.
     </profile>
     <profile>
         <name>Hive</name>
-        <description>This profile is suitable for using when connecting to Hive</description>
+        <description>
+            This profile is suitable for using when connecting to Hive.
+            Supports GPDBWritable output format, as specified in FORMAT header parameter.
+        </description>
         <plugins>
             <fragmenter>org.apache.hawq.pxf.plugins.hive.HiveDataFragmenter</fragmenter>
             <accessor>org.apache.hawq.pxf.plugins.hive.HiveAccessor</accessor>
             <resolver>org.apache.hawq.pxf.plugins.hive.HiveResolver</resolver>
             <metadata>org.apache.hawq.pxf.plugins.hive.HiveMetadataFetcher</metadata>
+            <outputFormat>org.apache.hawq.pxf.service.io.GPDBWritable</outputFormat>
         </plugins>
     </profile>
     <profile>
@@ -85,12 +89,15 @@ under the License.
             and serialized with either the ColumnarSerDe or the LazyBinaryColumnarSerDe.
             It is much faster than the general purpose Hive profile.
             DELIMITER parameter is mandatory.
+            Supports both GPDBWritable and TEXT output formats, as specified in FORMAT header parameter.
+            Primary optimized for TEXT output format.
         </description>
         <plugins>
             <fragmenter>org.apache.hawq.pxf.plugins.hive.HiveInputFormatFragmenter</fragmenter>
             <accessor>org.apache.hawq.pxf.plugins.hive.HiveRCFileAccessor</accessor>
             <resolver>org.apache.hawq.pxf.plugins.hive.HiveColumnarSerdeResolver</resolver>
             <metadata>org.apache.hawq.pxf.plugins.hive.HiveMetadataFetcher</metadata>
+            <outputFormat>org.apache.hawq.pxf.service.io.Text</outputFormat>
         </plugins>
     </profile>
     <profile>
@@ -98,12 +105,15 @@ under the License.
         <description>This profile is suitable only for Hive tables stored as Text files.
             It is much faster than the general purpose Hive profile.
             DELIMITER parameter is mandatory.
+            Supports both GPDBWritable and TEXT output formats, as specified in FORMAT header parameter.
+            Primary optimized for TEXT output format.
         </description>
         <plugins>
             <fragmenter>org.apache.hawq.pxf.plugins.hive.HiveInputFormatFragmenter</fragmenter>
             <accessor>org.apache.hawq.pxf.plugins.hive.HiveLineBreakAccessor</accessor>
             <resolver>org.apache.hawq.pxf.plugins.hive.HiveStringPassResolver</resolver>
             <metadata>org.apache.hawq.pxf.plugins.hive.HiveMetadataFetcher</metadata>
+            <outputFormat>org.apache.hawq.pxf.service.io.Text</outputFormat>
         </plugins>
     </profile>
     <profile>
@@ -111,13 +121,14 @@ under the License.
         <description>This profile is suitable only for Hive tables stored in ORC files
             and serialized with either the ColumnarSerDe or the LazyBinaryColumnarSerDe.
             It is much faster than the general purpose Hive profile.
-            DELIMITER parameter is mandatory.
+            Supports GPDBWritable output format, as specified in FORMAT header parameter.
         </description>
         <plugins>
             <fragmenter>org.apache.hawq.pxf.plugins.hive.HiveInputFormatFragmenter</fragmenter>
             <accessor>org.apache.hawq.pxf.plugins.hive.HiveORCAccessor</accessor>
             <resolver>org.apache.hawq.pxf.plugins.hive.HiveORCSerdeResolver</resolver>
             <metadata>org.apache.hawq.pxf.plugins.hive.HiveMetadataFetcher</metadata>
+            <outputFormat>org.apache.hawq.pxf.service.io.GPDBWritable</outputFormat>
         </plugins>
     </profile>
     <profile>


[28/50] [abbrv] ambari git commit: AMBARI-19817. Hive View 2.0: Introduce service checks. (dipayanb)

Posted by nc...@apache.org.
AMBARI-19817. Hive View 2.0: Introduce service checks. (dipayanb)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: d1f26f98f5faf1d45035922c585c0c7bcebf154a
Parents: 318f352
Author: Dipayan Bhowmick <di...@gmail.com>
Authored: Thu Feb 2 12:07:37 2017 +0530
Committer: Dipayan Bhowmick <di...@gmail.com>
Committed: Thu Feb 2 12:08:25 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/adapters/application.js    |  16 +++
 .../resources/ui/app/adapters/service-check.js  |  42 +++++++
 .../ui/app/components/service-check-entry.js    |  50 ++++++++
 .../ui/app/components/top-application-bar.js    |   1 +
 .../ui/app/configs/service-check-status.js      |  19 +++
 .../resources/ui/app/controllers/application.js |  25 ++++
 .../ui/app/controllers/service-check.js         |  66 +++++++++++
 .../hive20/src/main/resources/ui/app/router.js  |   2 +
 .../main/resources/ui/app/routes/application.js |   9 ++
 .../resources/ui/app/routes/service-check.js    |  28 +++++
 .../resources/ui/app/services/service-check.js  | 117 +++++++++++++++++++
 .../resources/ui/app/templates/application.hbs  |  13 ++-
 .../components/service-check-entry.hbs          |  47 ++++++++
 .../components/top-application-bar.hbs          |  12 +-
 .../ui/app/templates/service-check.hbs          |  42 +++++++
 15 files changed, 480 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/adapters/application.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/application.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/application.js
index c0189cc..1cdab9e 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/application.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/application.js
@@ -57,7 +57,23 @@ export default DS.RESTAdapter.extend({
       // basic authorization. This is for default admin/admin username/password combination.
       headers['Authorization'] = 'Basic YWRtaW46YWRtaW4=';
       //headers['Authorization'] = 'Basic aGl2ZTpoaXZl';
+      //headers['Authorization'] = 'Basic ZGlwYXlhbjpkaXBheWFu';
     }
      return headers;
   }),
+
+  parseErrorResponse(responseText) {
+    let json = this._super(responseText);
+    let error = {};
+    error.message = json.message;
+    error.trace = json.trace;
+    error.status = json.status;
+
+    delete json.trace;
+    delete json.status;
+    delete json.message;
+
+    json.errors = error;
+    return json;
+  }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/adapters/service-check.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/service-check.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/service-check.js
new file mode 100644
index 0000000..22bf1b6
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/service-check.js
@@ -0,0 +1,42 @@
+/**
+ * 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.
+ */
+
+import ApplicationAdapter from './application';
+
+export default ApplicationAdapter.extend({
+
+  doHdfsSeriveCheck() {
+    let url = this.buildURL() + '/hive/hdfsStatus';
+    return this.ajax(url, 'GET');
+  },
+
+  doUserHomeCheck() {
+    let url = this.buildURL() + '/hive/userhomeStatus';
+    return this.ajax(url, 'GET');
+  },
+
+  doAtsCheck() {
+    let url = this.buildURL() + '/hive/atsStatus';
+    return this.ajax(url, 'GET');
+  },
+
+  doHiveCheck() {
+    let url = this.buildURL() + '/connection/connect';
+    return this.ajax(url, 'GET');
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/components/service-check-entry.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/service-check-entry.js b/contrib/views/hive20/src/main/resources/ui/app/components/service-check-entry.js
new file mode 100644
index 0000000..7849f69
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/service-check-entry.js
@@ -0,0 +1,50 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+import STATUS from '../configs/service-check-status';
+
+export default Ember.Component.extend({
+  classNames: ['col-md-12', 'alert'],
+  classNameBindings: ['alertType'],
+
+  errorExpanded: false,
+
+  alertType: Ember.computed('status', function() {
+    const status = this.get('status');
+    return status === STATUS.notStarted ? 'alert-info' :
+      status === STATUS.started ? 'alert-info' :
+        status === STATUS.completed ? 'alert-success' :
+          status === STATUS.errored ? 'alert-danger' : '';
+  }),
+
+  iconName: Ember.computed('status', function() {
+    const status = this.get('status');
+    let iconName = status === STATUS.notStarted ? 'stop' :
+      status === STATUS.started ? 'location-arrow' :
+      status === STATUS.completed ? 'check' :
+      status === STATUS.errored ? 'times' : '';
+    return iconName;
+  }),
+
+  actions: {
+    toggleError() {
+      this.toggleProperty('errorExpanded');
+    }
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/components/top-application-bar.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/top-application-bar.js b/contrib/views/hive20/src/main/resources/ui/app/components/top-application-bar.js
index 8828275..bef9b51 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/top-application-bar.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/top-application-bar.js
@@ -19,4 +19,5 @@
 import Ember from 'ember';
 
 export default Ember.Component.extend({
+  service: false
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/configs/service-check-status.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/configs/service-check-status.js b/contrib/views/hive20/src/main/resources/ui/app/configs/service-check-status.js
new file mode 100644
index 0000000..2810e80
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/configs/service-check-status.js
@@ -0,0 +1,19 @@
+/**
+ * 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.
+ */
+
+export default { notStarted: 'NOT_STARTED', started: 'STARTED', completed: 'COMPLETED', errored: 'ERRORED'};

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/controllers/application.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/controllers/application.js b/contrib/views/hive20/src/main/resources/ui/app/controllers/application.js
new file mode 100644
index 0000000..54df442
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/controllers/application.js
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Controller.extend({
+  serviceCheck: Ember.inject.service(),
+
+  serviceCheckCompleted: Ember.computed.alias('serviceCheck.transitionToApplication')
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/controllers/service-check.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/controllers/service-check.js b/contrib/views/hive20/src/main/resources/ui/app/controllers/service-check.js
new file mode 100644
index 0000000..8a621db
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/controllers/service-check.js
@@ -0,0 +1,66 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Controller.extend({
+  serviceCheck: Ember.inject.service(),
+  hdfsError: null,
+  userHomeError: null,
+  atsError: null,
+  hiveError: null,
+
+  progressStyle: Ember.computed('serviceCheck.percentCompleted', function() {
+    let percentCompleted = this.get('serviceCheck.percentCompleted');
+    return `width: ${percentCompleted}%;`;
+  }),
+
+  hasError: Ember.computed('hdfsError', 'userHomeError', 'atsError', 'hiveError', function() {
+    return !(Ember.isEmpty(this.get('hdfsError'))
+      && Ember.isEmpty(this.get('userHomeError'))
+      && Ember.isEmpty(this.get('atsError'))
+      && Ember.isEmpty(this.get('hiveError')));
+  }),
+
+  transitioner: Ember.observer('serviceCheck.transitionToApplication', function() {
+    if(this.get('serviceCheck.transitionToApplication')) {
+      this.transitionToRoute('application');
+    }
+  }),
+
+  init() {
+    this._super(...arguments);
+    this.get('serviceCheck').check().then((data) => {
+      if(data.userHomePromise.state === 'rejected') {
+        this.set('userHomeError', data.userHomePromise.reason.errors);
+      }
+
+      if(data.hdfsPromise.state === 'rejected') {
+        this.set('userHomeError', data.hdfsPromise.reason.errors);
+      }
+
+      if(data.atsPromise.state === 'rejected') {
+        this.set('atsError', data.atsError.reason.errors);
+      }
+
+      if(data.hivePromise.state === 'rejected') {
+        this.set('atsError', data.hiveError.reason.errors);
+      }
+    });
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/router.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/router.js b/contrib/views/hive20/src/main/resources/ui/app/router.js
index b9db38d..bc9bfa5 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/router.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/router.js
@@ -25,6 +25,8 @@ const Router = Ember.Router.extend({
 });
 
 Router.map(function() {
+  this.route('service-check');
+
   this.route('jobs');
   this.route('udfs');
   this.route('settings');

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/routes/application.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/application.js b/contrib/views/hive20/src/main/resources/ui/app/routes/application.js
index aa77897..697f727 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/application.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/application.js
@@ -21,12 +21,21 @@ import tabs from '../configs/top-level-tabs';
 
 export default Ember.Route.extend({
   keepAlive: Ember.inject.service('keep-alive'),
+  serviceCheck: Ember.inject.service(),
   init: function () {
     this._super(...arguments);
     this.get('keepAlive').initialize();
   },
+
+  beforeModel() {
+    if (!this.get('serviceCheck.checkCompleted')) {
+      this.transitionTo('service-check');
+    }
+  },
+
   setupController: function (controller, model) {
     this._super(controller, model);
     controller.set('tabs', tabs);
   }
+
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/routes/service-check.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/service-check.js b/contrib/views/hive20/src/main/resources/ui/app/routes/service-check.js
new file mode 100644
index 0000000..83111cd
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/service-check.js
@@ -0,0 +1,28 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Route.extend({
+  serviceCheck: Ember.inject.service(),
+  beforeModel() {
+    if (this.get('serviceCheck.checkCompleted')) {
+      this.transitionTo('application');
+    }
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/services/service-check.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/service-check.js b/contrib/views/hive20/src/main/resources/ui/app/services/service-check.js
new file mode 100644
index 0000000..608cafe
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/service-check.js
@@ -0,0 +1,117 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+import STATUS from '../configs/service-check-status';
+
+export default Ember.Service.extend({
+
+  store: Ember.inject.service(),
+
+  transitionToApplication: false,
+
+  hdfsCheckStatus: STATUS.notStarted,
+  atsCheckStatus: STATUS.notStarted,
+  userHomeCheckStatus: STATUS.notStarted,
+  hiveCheckStatus: STATUS.notStarted,
+  percentCompleted: Ember.computed('hdfsCheckStatus', 'atsCheckStatus', 'userHomeCheckStatus', 'hiveCheckStatus', function () {
+    let percent = 0;
+    percent += this.get('hdfsCheckStatus') === STATUS.completed ? 25 : 0;
+    percent += this.get('atsCheckStatus') === STATUS.completed ? 25 : 0;
+    percent += this.get('userHomeCheckStatus') === STATUS.completed ? 25 : 0;
+    percent += this.get('hiveCheckStatus') === STATUS.completed ? 25 : 0;
+    return percent;
+  }),
+
+  checkCompleted: Ember.computed('percentCompleted', function () {
+    return this.get('percentCompleted') === 100;
+  }),
+
+  transitioner: Ember.observer('checkCompleted', function() {
+    if(this.get('checkCompleted')) {
+      Ember.run.later(() => {
+        this.set('transitionToApplication', true);
+      }, 2000);
+    }
+  }),
+
+  check() {
+    let promises = {
+      hdfsPromise: this._doHdfsCheck(),
+      atsPromise: this._doAtsCheck(),
+      userHomePromise: this._doUserHomeCheck(),
+       hivePromise: this._doHiveCheck()
+    };
+    return Ember.RSVP.hashSettled(promises);
+  },
+
+  _getServiceCheckAdapter: function () {
+    return this.get('store').adapterFor('service-check');
+  },
+
+  _doHdfsCheck() {
+    return this._doCheck( 'hdfsCheckStatus',
+      (adapter) => adapter.doHdfsSeriveCheck(),
+      this._identity(), this._identity());
+  },
+
+  _doAtsCheck() {
+    return this._doCheck( 'atsCheckStatus',
+      (adapter) => adapter.doAtsCheck(),
+      this._identity(), this._identity());
+  },
+
+  _doUserHomeCheck() {
+    return this._doCheck( 'userHomeCheckStatus',
+      (adapter) => adapter.doUserHomeCheck(),
+      this._identity(), this._identity());
+  },
+
+  _doHiveCheck() {
+    return this._doCheck( 'hiveCheckStatus',
+      (adapter) => adapter.doHiveCheck(),
+      this._identity(),
+      (err) => {
+        // TODO: things to take care of related to LDAP
+        return err;
+      }
+    );
+  },
+
+  _doCheck(statusVar, checkFn, successFn, errorFn) {
+    return new Ember.RSVP.Promise((resolve, reject) => {
+      this.set(statusVar, STATUS.started);
+      checkFn(this._getServiceCheckAdapter()).then((data) => {
+        this.set(statusVar, STATUS.completed);
+        let finalData = (typeof successFn === 'function') ? successFn(data) : data;
+        resolve(finalData);
+      }).catch((err) => {
+        this.set(statusVar, STATUS.errored);
+        let finalData = (typeof errorFn === 'function') ? errorFn(err) : err;
+        reject(finalData);
+      })
+    });
+
+  },
+
+  _identity() {
+    return (data) => data;
+  }
+
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
index 7d6259c..ea532df 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
@@ -24,10 +24,15 @@
   </div>
   <div class="row">
     <div class="col-md-12">
-      {{top-application-bar}}
-      {{#tabs-pane tabs=tabs as |tab|}}
-        {{tabs-item tab=tab tabs=tabs}}
-      {{/tabs-pane}}
+      {{#if serviceCheckCompleted}}
+        {{top-application-bar}}
+        {{#tabs-pane tabs=tabs as |tab|}}
+          {{tabs-item tab=tab tabs=tabs}}
+        {{/tabs-pane}}
+      {{else}}
+        {{top-application-bar service=true}}
+      {{/if}}
+
     </div>
   </div>
   <div class="row">

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/templates/components/service-check-entry.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/service-check-entry.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/service-check-entry.hbs
new file mode 100644
index 0000000..56e496e
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/service-check-entry.hbs
@@ -0,0 +1,47 @@
+{{!
+* 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.
+}}
+
+<p>
+  {{#fa-stack size="lg" as |s|}}
+    {{s.stack-2x "circle-thin"}}
+    {{s.stack-1x iconName}}
+  {{/fa-stack}}
+  <strong>{{label}}</strong>
+</p>
+
+
+{{#if error}}
+  <p>
+    <strong>Message: </strong>{{error.message}}
+    <a href="#" class="btn btn-sm btn-warning"{{action "toggleError"}}>
+      {{#if errorExpanded}}
+        {{fa-icon 'chevron-up'}} Show less
+      {{else}}
+        {{fa-icon 'chevron-down'}} Show more
+      {{/if}}
+    </a>
+  </p>
+
+
+  {{#if errorExpanded}}
+    <p>
+      <pre>{{error.trace}}</pre>
+    </p>
+  {{/if}}
+{{/if}}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/templates/components/top-application-bar.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/top-application-bar.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/top-application-bar.hbs
index 6f451e9..2d85558 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/top-application-bar.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/top-application-bar.hbs
@@ -17,9 +17,11 @@
 }}
 
 <h3 class="clearfix">
-  <strong>HIVE</strong>
-  <span class="pull-right">
-    {{#link-to 'queries.new' class="btn btn-sm btn-success"}}{{fa-icon "plus"}} NEW JOB{{/link-to}}
-    {{#link-to 'databases.newtable' class="btn btn-sm btn-success"}}{{fa-icon "plus"}} NEW TABLE{{/link-to}}
-  </span>
+  <strong>HIVE {{#if service}}<small>SERVICE CHECKS</small>{{/if}}</strong>
+  {{#if (not service)}}
+    <span class="pull-right">
+      {{#link-to 'queries.new' class="btn btn-sm btn-success"}}{{fa-icon "plus"}} NEW JOB{{/link-to}}
+        {{#link-to 'databases.newtable' class="btn btn-sm btn-success"}}{{fa-icon "plus"}} NEW TABLE{{/link-to}}
+    </span>
+  {{/if}}
 </h3>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d1f26f98/contrib/views/hive20/src/main/resources/ui/app/templates/service-check.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/service-check.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/service-check.hbs
new file mode 100644
index 0000000..8233c93
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/service-check.hbs
@@ -0,0 +1,42 @@
+{{!
+* 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.
+}}
+
+<div class="col-md-offset-2 col-md-8">
+  <div class="progress">
+    <div class="progress-bar {{if hasError 'progress-bar-danger'}} {{if serviceCheck.checkCompleted 'progress-bar-success'}}" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style={{progressStyle}}>
+    </div>
+  </div>
+
+  {{service-check-entry label="HDFS Check"
+                        status=serviceCheck.hdfsCheckStatus
+                        error=hdfsError
+  }}
+  {{service-check-entry label="USER HOME Check"
+                        status=serviceCheck.userHomeCheckStatus
+                        error=userHomeError
+  }}
+  {{service-check-entry label="ATS Check"
+                        status=serviceCheck.atsCheckStatus
+                        error=atsError
+  }}
+  {{service-check-entry label="HIVE Check"
+                        status=serviceCheck.hiveCheckStatus
+                        error=hiveError
+  }}
+
+</div>


[08/50] [abbrv] ambari git commit: AMBARI-19815 : Recent workflows in Workflow designer. (Venkata Sairam via nitirajrathore)

Posted by nc...@apache.org.
AMBARI-19815 : Recent workflows in Workflow designer. (Venkata Sairam via nitirajrathore)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 727a31875d4b5a1f4473d1fb3f0292bc5ffb1e2f
Parents: b55ba18
Author: Nitiraj Singh Rathore <ni...@gmail.com>
Authored: Wed Feb 1 18:39:38 2017 +0530
Committer: Nitiraj Singh Rathore <ni...@gmail.com>
Committed: Wed Feb 1 18:39:38 2017 +0530

----------------------------------------------------------------------
 .../ui/app/components/designer-workspace.js     |  48 +++++-
 .../resources/ui/app/components/drafts-wf.js    |  80 +++++++--
 .../ui/app/components/flow-designer.js          |  31 +++-
 .../ui/app/components/recent-projects.js        |  57 +++++++
 .../main/resources/ui/app/components/save-wf.js |   2 +-
 .../ui/app/helpers/format-unicode-date.js       |   3 +-
 .../main/resources/ui/app/models/wfproject.js   |   3 +-
 .../src/main/resources/ui/app/routes/design.js  |  23 ++-
 .../ui/app/routes/design/proj-manager-tab.js    |   7 +-
 .../resources/ui/app/services/current-job.js    |  28 +++
 .../src/main/resources/ui/app/styles/app.less   |  47 ++++-
 .../app/templates/components/bundle-config.hbs  |   2 +-
 .../app/templates/components/coord-config.hbs   |   2 +-
 .../templates/components/designer-workspace.hbs |  39 ++++-
 .../ui/app/templates/components/drafts-wf.hbs   | 170 ++++++++-----------
 .../templates/components/recent-projects.hbs    |  33 ++++
 .../main/resources/ui/app/templates/design.hbs  |   2 +-
 .../app/templates/design/proj-manager-tab.hbs   |   2 +-
 18 files changed, 430 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
index 5b517af..16fca55 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
@@ -24,6 +24,7 @@ export default Ember.Component.extend({
   appPath : null,
   type : 'wf',
   tabId : 0,
+  store:Ember.inject.service(),
   //isProjectManagerEnabled : Constants.isProjectManagerEnabled,
   hasMultitabSupport : true,
   tabCounter : new Map(),
@@ -51,8 +52,14 @@ export default Ember.Component.extend({
         this.get('tabs').forEach((tab)=>{
           this.get('tabCounter').set(tab.type, (this.get('tabCounter').get(tab.type)) + 1);
         }, this);
-        Ember.getOwner(this).lookup('route:design').on('openNewTab', function(path){
-          this.createNewTab('wf', path);
+        Ember.getOwner(this).lookup('route:design').on('openNewTab', function(path, type){
+          if(type === 'COORDINATOR'){
+            this.createNewTab('coord', path);
+          }else if(type === 'BUNDLE'){
+            this.createNewTab('bundle', path);
+          }else{
+            this.createNewTab('wf', path);
+          }
         }.bind(this));
 
       }.bind(this)).catch(function(data){
@@ -92,6 +99,11 @@ export default Ember.Component.extend({
     this.get('tabs').clear();
   }.on('willDestroyElement'),
   createNewTab : function(type, path){
+    var existingTab = this.get('tabs').findBy("filePath", path);
+    if(existingTab && path){
+      this.$('.nav-tabs a[href="#' + existingTab.id + '"]').tab("show");
+      return;
+    }
     var tab = {
       type : type,
       id : this.generateTabId(),
@@ -157,7 +169,39 @@ export default Ember.Component.extend({
   generateTabId(){
     return 'tab-'+ Math.ceil(Math.random() * 100000);
   },
+  recentFilesSorted: Ember.computed.sort("recentFiles", "['updatedAt:desc']"),
+  projList:Ember.computed("recentFilesSorted", function() {
+     return this.get("recentFilesSorted").slice(0, 10);
+  }),
   actions : {
+    deleteWorkflowJob(){
+      this.sendAction("deleteWorkflowJob");
+    },
+    showTopRecentList(){
+      var deferred = Ember.RSVP.defer();
+      this.sendAction('getAllRecentWorks', deferred);
+      deferred.promise.then((data)=>{
+        this.set("recentFiles", data);
+      }).catch((e)=>{
+        console.error(e);
+      })
+    },
+    editWorkflow(path, type){
+      this.sendAction('editWorkflow', path, type);
+    },
+    showProjectManagerList(){
+      var deferred = Ember.RSVP.defer();
+      this.sendAction('getAllRecentWorks', deferred);
+      deferred.promise.then((data)=>{
+        this.set("recentFiles", data);
+        this.set("isProjManagerVisible", true);
+      }).catch((e)=>{
+        console.error(e);
+      })
+    },
+    hideProjectManagerList(){
+      this.set("isProjManagerVisible", false);
+    },
     register(tabInfo, context){
       var tab = this.get('tabs').findBy('id', tabInfo.id);
       Ember.set(tab, 'context', context);

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
index 885655a..02483d4 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
@@ -19,43 +19,87 @@ import Ember from 'ember';
 const { computed } = Ember;
 
 export default Ember.Component.extend({
+  "search": "",
+  "isBundle": true,
+  "isCoordinator": true,
+  "isWorkflow": true,
+  "filteredModels": Ember.computed("model", "search", "isBundle", "isCoordinator", "isWorkflow", function(){
+	Ember.run.later(()=>{
+      this.$('.actions').hide();
+    }, 10);
+  	var condition = "", condition1 = "", condition2 = "", searchTxt = this.get("search");
+  	if(searchTxt && searchTxt.length){
+  	  condition1 = "(role.get('name') && role.get('name').indexOf(searchTxt)>-1)";
+  	}
+  	if(this.get("isWorkflow")){
+  		if(condition2.length){
+  	  		condition2 = condition2 + " role.get('type') == 'WORKFLOW'";
+  	  	} else {
+  	  		condition2 = condition2 + " role.get('type') == 'WORKFLOW'";
+  	  	}
+  	}
+  	if(this.get("isCoordinator")){
+  		if(condition2.length){
+  			condition2 = condition2 + " || role.get('type') == 'COORDINATOR'";
+  		} else {
+  			condition2 = condition2 + "role.get('type') == 'COORDINATOR'";
+  		}
+  	}
+  	if(this.get("isBundle")){
+  		if(condition2.length) {
+  			condition2 = condition2 + " || role.get('type') == 'BUNDLE'";
+  		} else {
+  			condition2 = condition2 + " role.get('type') == 'BUNDLE'";
+  		}
+  	}
+  	if(condition1.length && condition2.length) {
+    	condition = condition1 + "&&(" + condition2+ ")";
+  	} else if(condition2.length) {
+    	condition = condition2;
+  	}
+	return this.get("model").filter( (role) => {
+	  return eval(condition);
+	});
+  }),
+  modelSorted : Ember.computed.sort("filteredModels", "['updatedAt:desc']"),
   "isDeleteDraftConformation": false,
   "currentDraft": undefined,
   "deleteInProgress": false,
   "deleteMsg": undefined,
+  "currentJobService" : Ember.inject.service('current-job'),
   elementsInserted: function () {
       this.$('.actions').hide();
   }.on("didInsertElement"),
   rendered : function(){
     var self = this;
-    this.$("#configureJob").on('hidden.bs.modal', function () {
+    this.$("#projectsList").on("hidden.bs.modal", function () {
+      this.sendAction("close");
+      history.back();
+    }.bind(this));
+    this.$("#projectDeleteModal").on('hidden.bs.modal', function () {
+      self.set("isDeleteDraftConformation", true);
       self.set("deleteMsg", null);
       self.set("deleteInProgress", false);
     }.bind(this));
+    this.$("#projectsList").modal("show");
+    Ember.$("#loading").css("display", "none");
   }.on('didInsertElement'),
   store: Ember.inject.service(),
   actions: {
-    importActionToEditor ( path ) {
-      this.sendAction('editWorkflow', path);
+    importActionToEditor ( path, type ) {
+      this.$("#projectsList").modal("hide");
+      this.sendAction('editWorkflow', path, type);
     },
-    deleteDraftConformation (job ){
-	    this.set("isDeleteDraftConformation", true);
-	    this.$("#configureJob").modal("show");
+    confirmDelete (job ){
+	    this.set("showingConfirmation", true);
 	    this.set("currentDraft", job);
     },
     deleteDraft () {
-	    this.set("deleteInProgress", true);
-	    var job = this.get("currentDraft"), self= this;
-  		this.get("store").findRecord('wfproject', job.id).then(function(post) {
-  		  post.destroyRecord();
-  		}).then(function () {
-  	      self.set("deleteInProgress", false);
-  	      self.set("deleteMsg", "Draft successfully deleted.");
-            console.log("Deleted successfully");
-  	    }).catch(function (response) {
-  	      self.set("deleteInProgress", false);
-  	      self.set("deleteMsg", "There is some problem while deletion.Please try again.");
-  	    });
+	    this.sendAction("deleteWorkflow", this.get('currentDraft'));
+    },
+    closeProjects () {
+		  $('.modal-backdrop').remove();
+		  this.$("#projectsList").modal("hide");
     },
     showActions (job) {
       this.$('.'+job.get("updatedAt")+'Actions').show();

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
index f863656..f897d48 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
@@ -145,6 +145,35 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
       });
     }
   },
+
+  importWorkflowFromProjManager(path){
+      var self = this;
+      this.set("showingFileBrowser",false);
+      if(path){
+        self.set("isWorkflowImporting", true);
+        this.isDraftExists(path).promise.then(function(data){
+          var draftData = JSON.parse(data);
+          if(draftData.draftExists && draftData.isDraftCurrent) {
+              self.set("workflowFilePath", path);
+              self.getDraftWorkflowData(path).promise.then(function(data){
+                var workflowImporter = WorkflowJsonImporter.create({});
+                var workflow = workflowImporter.importWorkflow(data);
+                self.resetDesigner();
+                self.set("workflow", workflow);
+                self.initAndRenderWorkflow();
+                self.set("isWorkflowImporting", false);
+                self.doValidation();
+              }.bind(this)).catch(function(data){
+              });
+          } else {
+            self.importWorkflow(path);
+          }
+        }.bind(this)).catch(function(e){
+          console.error(e);
+        });
+      }
+  },
+
   observeXmlAppPath : Ember.observer('xmlAppPath', function(){
     if(!this.get('xmlAppPath') || null === this.get('xmlAppPath')){
       return;
@@ -193,7 +222,7 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
         }
       }
     }
-    this.importWorkflow(relXmlPath);
+    this.importWorkflowFromProjManager(relXmlPath);
   },
   setConentWidth(){
     var offset = 120;

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/components/recent-projects.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/recent-projects.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/recent-projects.js
new file mode 100644
index 0000000..18a57f6
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/recent-projects.js
@@ -0,0 +1,57 @@
+/*
+*    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.
+*/
+
+import Ember from 'ember';
+
+export default Ember.Component.extend({
+  store: Ember.inject.service(),
+  rendered : function(){
+  	var self = this;
+    this.$("#projectDeleteModal").on('hidden.bs.modal', function () {
+      self.set("isDeleteDraftConformation", true);
+      self.set("deleteMsg", null);
+      self.set("deleteInProgress", false);
+    }.bind(this));
+    this.$("#projectsList").on("hidden.bs.modal", function () {
+      this.sendAction("close");
+    }.bind(this));
+    this.$("#projectsList").modal("show");
+  }.on('didInsertElement'),
+  actions: {
+  	close(){
+  		this.sendAction("close");
+  	},
+  	deleteWorkflow (job) {
+	    this.set("deleteInProgress", true);
+	    var self= this;
+	    var rec = this.get("store").peekRecord('wfproject', job.id);
+	    if(rec){
+	      rec.destroyRecord().then(function () {
+  	      self.set("deleteInProgress", false);
+  	      self.set("deleteMsg", "Workflow successfully deleted.");
+  	    }).catch(function (response) {
+  	      self.set("deleteInProgress", false);
+  	      self.set("deleteMsg", "There is some problem while deletion.Please try again.");
+  	    });
+	    }
+    },
+    editWorkflow ( path, type ) {
+      this.sendAction('editWorkflow', path, type);
+      this.$("#projectsList").modal("hide");
+    },
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
index 80bea99..54d13ff 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/save-wf.js
@@ -142,7 +142,7 @@ export default Ember.Component.extend(Validations, {
         detail=jsonResp.message;
       }
     }else{
-      detail=response; 
+      detail=response;
     }
     return detail;
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/helpers/format-unicode-date.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/helpers/format-unicode-date.js b/contrib/views/wfmanager/src/main/resources/ui/app/helpers/format-unicode-date.js
index e6dd653..003e777 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/helpers/format-unicode-date.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/helpers/format-unicode-date.js
@@ -18,7 +18,8 @@
 import Ember from 'ember';
 
 export function formatUnicodeDate(params) {
-  return new Date(parseInt(params[0])).toUTCString();
+    var date = new Date(parseInt(params[0])).toUTCString();
+    return [moment(date).format("MM/DD/YYYY hh:mm A")].join("")
 }
 
 export default Ember.Helper.helper(formatUnicodeDate);

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/models/wfproject.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/models/wfproject.js b/contrib/views/wfmanager/src/main/resources/ui/app/models/wfproject.js
index e90a613..8afe594 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/models/wfproject.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/models/wfproject.js
@@ -19,7 +19,8 @@ import DS from 'ember-data';
 
 export default DS.Model.extend({
 	workflowDefinitionPath: DS.attr("string"),
+	name: DS.attr("string"),
 	type: DS.attr("string"),
-	updatedAt: DS.attr("string"),
+	updatedAt: DS.attr("number"),
 	owner:DS.attr("string")
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/routes/design.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/routes/design.js b/contrib/views/wfmanager/src/main/resources/ui/app/routes/design.js
index b6beef8..93ce758 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/routes/design.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/routes/design.js
@@ -19,7 +19,7 @@ import Ember from 'ember';
 import SchemaVersions from '../domain/schema-versions';
 
 export default Ember.Route.extend(Ember.Evented, {
-
+  currentDraft: null,
   beforeModel: function(transition){
     this.set("xmlAppPath", transition.queryParams.appPath);
     this.controllerFor('design').set("xmlAppPath", transition.queryParams.appPath);
@@ -71,25 +71,30 @@ export default Ember.Route.extend(Ember.Evented, {
       this.set('failedSchemaVersions', true);
       transition.retry();
     },
-    editWorkflow(path){
-      this.trigger('openNewTab', path);
+    editWorkflow(path, type){
+      this.trigger('openNewTab', path, type);
+    },
+    deleteWorkflow(job){
+      this.set("currentDraft", job);
     },
     showDashboard(){
       this.controller.set('dashboardShown', true);
       this.transitionTo('design.dashboardtab');
     },
-    showProjManager(){
-      //this.controller.set('ProjManagerShown', true);
-      this.transitionTo('design.projManagerTab');
+    getAllRecentWorks(deferred){
+      this.store.findAll("wfproject", { reload: true }).then((data)=>{
+        deferred.resolve(data);
+      }).catch((e)=>{
+        deferred.reject(e);
+      });
     },
     hideDashboard(){
       this.controller.set('dashboardShown', false);
       this.transitionTo('design');
     },
     hideProjManager(){
-      //this.controller.set('ProjManagerShown', false);
+      this.controller.set('dashboardShown', false);
       this.transitionTo('design');
     }
   }
-
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/routes/design/proj-manager-tab.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/routes/design/proj-manager-tab.js b/contrib/views/wfmanager/src/main/resources/ui/app/routes/design/proj-manager-tab.js
index b37ed83..685b49c 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/routes/design/proj-manager-tab.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/routes/design/proj-manager-tab.js
@@ -19,11 +19,14 @@ import Ember from 'ember';
 
 export default Ember.Route.extend({
   model:function(params) {
-    return this.store.findAll('wfproject');
+	var data = this.store.findAll("wfproject").catch((error) => {
+      console.log(error);
+    });
+    return data;
   },
   actions: {
     routeToDesigner(options){
       this.transitionTo("design", options);
-    }
+  	}
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/services/current-job.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/services/current-job.js b/contrib/views/wfmanager/src/main/resources/ui/app/services/current-job.js
new file mode 100644
index 0000000..c5792de
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/services/current-job.js
@@ -0,0 +1,28 @@
+/*
+*    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.
+*/
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+	currentJob: null,
+	setCurrentJob(job){
+      this.set("currentJob", job);
+	},
+	getCurrentJob(){
+      return this.get("currentJob");
+	}
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
index 755a6ad..5080560 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
@@ -1587,15 +1587,11 @@ input:invalid {
   width:5%;
 }
 #draftsTable {
-  padding-top: 0.5%;
-  padding-left: 0.5%;
-  padding-right: 0.5%;
   max-height:500px;
-  overflow:scroll;
+  overflow-y:scroll;
 }
 #emptyDrafts {
-  padding-left:40%;
-  padding-top:5%;
+  padding-left:35%;
 }
 .width300 {
   white-space: nowrap;
@@ -1627,11 +1623,17 @@ input:invalid {
   width: 100%;
   min-height: 100px;
 }
+.displayBlock {
+ display : block;
+}
 .no-asset-records {
   text-align: center;
   padding: 3px;
   overflow-y: auto;
 }
+#projectsList .modal-dialog {
+  width:850px;
+}
 .custom-action-xml{
   width: 100%;
   min-height: 175px;
@@ -1640,3 +1642,36 @@ input:invalid {
   width: 650px;
   top: 60px;
 }
+.tab-pane #draftsTable, #projectsList #dashboard, .tab-pane .searchWorkflows {
+  display : none;
+}
+#projectDeleteModal .modal-dialog {
+  width:500px;
+}
+.projects-list {
+  white-space: nowrap;
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.proj-menu {
+  width:200px;
+}
+.pl10 {
+  padding-left:10px;
+}
+.fixed-col {
+  width:15%;
+}
+.width100 {
+    white-space: nowrap;
+    width: 100px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+.l-input {
+  height: 30px;
+  width: 60%;
+  margin-bottom: 10px;
+  margin-right: 3px;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
index 37150f5..749a173 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
@@ -138,5 +138,5 @@
   {{bundle-version-settings bundle=bundle showVersionSettings="showVersionSettings" }}
 {{/if}}
 {{#if showingSaveWorkflow}}
-  {{save-wf type='wf' close="closeSave" jobFilePath=bundleFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=configForSave}}
+  {{save-wf type='bundle' close="closeSave" jobFilePath=bundleFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=configForSave}}
 {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
index 13f3ae7..1c80312 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
@@ -381,5 +381,5 @@ okBtnText="Continue" cancelBtnText="Cancel" onOk="resetCoordinator"}}{{/confirma
 </div>
 {{/if}}
 {{#if showingSaveWorkflow}}
-  {{save-wf type='wf' close="closeSave" jobFilePath=coordinatorFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=configForSave}}
+  {{save-wf type='coord' close="closeSave" jobFilePath=coordinatorFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=configForSave}}
 {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
index 46a3f63..f7a93e0 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
@@ -26,6 +26,39 @@
         </div>
         <div class="col-sm-8">
           <div class="text-right pull-right paddingtop7">
+              <button {{action 'showDashboard'}} class="backto-dashboard btn btn-default" title="Workflow Dashboard">
+                <i class="fa fa-th marginright5"></i>Dashboard
+              </button>
+            <div class="dropdown create-wf-menu">
+              <button class="btn btn-default dropdown-toggle borderRightRadiusNone" {{action "showTopRecentList"}} type="button" data-toggle="dropdown">Recent
+                <span class="caret"></span></button>
+                <ul class="dropdown-menu proj-menu">
+                 {{#if projList}}
+                  {{#each projList as |proj index|}}
+                    <li>
+                      <a id="wfs_btn" class="pointer projects-list" title={{proj.workflowDefinitionPath}} {{action "editWorkflow" proj.workflowDefinitionPath proj.type}}>
+                      {{#if (eq proj.type "WORKFLOW")}}
+                          <i class="fa fa-sitemap marginright5"></i>{{proj.name}}
+                      {{else if  (eq proj.type "COORDINATOR")}}
+                          <i class="fa fa-history marginright5"></i>{{proj.name}}
+                      {{else}}
+                          <i class="fa fa-cubes marginright5"></i>{{proj.name}}
+                      {{/if}}
+                      </a>
+                    </li>
+                   {{/each}}
+                  <li>
+                      <a {{action "showProjectManagerList"}} title="My Workflows" class="pointer">
+                      More...
+                      </a>
+                  </li>
+                 {{else}}
+                  <li class="pl10">
+                    No recent workflows.
+                  </li>
+                 {{/if}}
+                </ul>
+             </div>
             <div class="dropdown create-wf-menu">
               <button class="btn btn-default dropdown-toggle borderRightRadiusNone" type="button" data-toggle="dropdown">Create
                 <span class="caret"></span></button>
@@ -62,9 +95,6 @@
                   </li>
                 </ul>
               </div>
-              <button {{action 'showDashboard'}} class="backto-dashboard btn btn-default" title="Workflow Dashboard">
-                <i class="fa fa-th marginright5"></i>Dashboard
-              </button>
               <button {{action "showAssetManager" true}} class="btn btn-default" title="Manage Assets">
                   Manage Assets
               </button>
@@ -128,6 +158,9 @@
   {{#if showingAssetManager}}
     {{#asset-manager showAssetManager="showAssetManager"}}{{/asset-manager}}
   {{/if}}
+  {{#if isProjManagerVisible}}
+    {{recent-projects recentFiles=recentFiles routeToDesigner="routeToDesigner" editWorkflow="editWorkflow" deleteWorkflow="deleteWorkflow" close="hideProjectManagerList" deleteWorkflowJob="deleteWorkflowJob" currentDraft=currentDraft}}
+  {{/if}}
   {{#if showingWarning}}
   {{#confirmation-dialog title="Confirm workflow reset"
     confirmationMessage="Any unsaved changes may be lost. Do you want to close this tab ?"

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/drafts-wf.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/drafts-wf.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/drafts-wf.hbs
index 54ea25f..802a8bc 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/drafts-wf.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/drafts-wf.hbs
@@ -15,107 +15,75 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-
-{{#if model}}
-<div id="draftsTable">
-<table id="search-table" class="table search-table listing table-striped table-hover table-bordered" cellspacing="0" width="100%">
-  <thead>
-    <tr>
-      <!--th>Draft Name</th-->
-      <th>Type</th>
-      <th>Draft Path</th>
-      <th>Created Time</th>
-      <th>Action</th>
-    </tr>
-  </thead>
-  <tbody>
-    {{#if model}}
-    {{#each model as |job idx|}}
-    <tr>
-    <!--td title={{job.workflowDefinitionPath}}> <div class="width300">{{job.workflowDefinitionPath}}</div></td-->
-    <td class="{{job.type}} cyScrollMsg">
-    {{#if (eq job.type "WORKFLOW")}}
-      <i class="fa fa-sitemap marginright5"></i>
-    {{/if}}
-    </td>
-		<td title={{job.workflowDefinitionPath}}>
-     <div class="width300">
-       {{job.workflowDefinitionPath}}
-     </div>
-    </td>
-		<td> {{format-unicode-date job.updatedAt}}</td>
-		<td class=" no-sort" {{action 'hideActions' job on="mouseLeave"}} style="width:200px;">
-		  <div id="actions-div" class="pull-left Actions{{job.updatedAt}}">
-		    <button {{action 'showActions' job on='mouseEnter'}} type="button" class="btn btn-default isOn">
-		      <i class="fa fa-cog" aria-hidden="true"></i>
-		    </button>
-		  </div>
-		  <div class="pull-left {{job.updatedAt}}Actions actions" id="actions">
-		    <div class="wf-buttons btn-group btn-group-sm" role="group" aria-label="buttons">
-		      <button {{action "importActionToEditor" job.workflowDefinitionPath}} type="button" class="btn btn-default">
-		        Edit
-		      </button>
-		      <button {{action 'deleteDraftConformation' job}} type="button" class="btn btn-default">
-		        Delete
-		      </button>
-		    </div>
-		  </div>
-		</td>
-	</tr>
-    {{/each}}
-    {{/if}}
-  </tbody>
-</table>
+<div id="loading" class="displayBlock">
+    {{spin-spinner lines=13 length=20 width=10}}
 </div>
-<div id="draftsNum">Displaying {{model.length}} projects</div>
+<div class="searchWorkflows">
+  {{input type="checkbox" name="isWorkflow" checked=isWorkflow}}Workflow&nbsp;&nbsp;
+  {{input type="checkbox" name="isCoordinator" checked=isCoordinator}}Coordinator&nbsp;&nbsp;
+  {{input type="checkbox" name="isBundle" checked=isBundle}}Bundle&nbsp;&nbsp;
+  {{input type="text" class="l-input" value=search placeholder="Workflow Name"}}
+</div>
+{{#if modelSorted}}
+    <div id="draftsTable">
+        <table id="search-table" class="table search-table listing table-striped table-hover table-bordered"
+               cellspacing="0" width="100%">
+            <thead>
+              <tr>
+                  <!--th>Draft Name</th-->
+                  <th></th>
+                  <th>Name</th>
+                  <th>Path</th>
+                  <th>Updated at</th>
+                  <th>Action</th>
+              </tr>
+            </thead>
+            <tbody>
+            {{#if modelSorted}}
+                {{#each modelSorted as |job idx|}}
+                {{#if true}}
+                    <tr>
+                        <!--td title={{job.workflowDefinitionPath}}> <div class="width300">{{job.workflowDefinitionPath}}</div></td-->
+                        <td class="{{job.type}} cyScrollMsg">
+                          {{#if (eq job.type "WORKFLOW")}}
+                              <i class="fa fa-sitemap marginright5"></i>
+                          {{else if  (eq job.type "COORDINATOR")}}
+                              <i class="fa fa-history marginright5"></i>
+                          {{else}}
+                              <i class="fa fa-cubes marginright5"></i>
+                          {{/if}}
+                        </td>
+                        <td title={{job.name}}>
+                            <div class="width100">
+                              {{job.name}}
+                            </div>
+                        </td>
+                        <td title={{job.workflowDefinitionPath}}>
+                            <div class="width300">
+                                {{job.workflowDefinitionPath}}
+                            </div>
+                        </td>
+                        <td>
+                            <div class="width50">
+                                {{format-unicode-date job.updatedAt}}
+                            </div>
+                        </td>
+                        <td class=" no-sort fixed-col">
+                            <button {{action "importActionToEditor" job.workflowDefinitionPath job.type}} type="button"
+                                                                                                         class="btn btn-default">
+                                        Open
+                                    </button>
+                        </td>
+                    </tr>
+                    {{/if}}
+                {{/each}}
+            {{/if}}
+            </tbody>
+        </table>
+    </div>
+    <div id="draftsNum">Displaying {{modelSorted.length}} workflows</div>
 {{else}}
-  <div id="emptyDrafts">
-    There are no projects currently
-  </div>
-{{/if}}
-{{#if true}}
-<div class="modal fade" id="configureJob" role="dialog">
-  <div class="modal-dialog">
-    <div class="modal-content">
-      <div class="modal-header">
-        <button type="button" class="close" data-dismiss="modal">&times;</button>
-          <h4 class="modal-title">Delete Draft Confirmation</h4>
-      </div>
-      <div class="modal-body">
-         {{#if deleteMsg}}
-        <div class="row form-group">
-          <div class="col-xs-4">
-          </div>
-          <div class="col-xs-8">
-            <div class="input-group">
-              {{deleteMsg}}
-            </div>
-          </div>
-        </div>
-          {{/if}}
-          {{#unless deleteMsg}}
-        <div class="row form-group">
-          <div class="col-xs-4">
-          </div>
-          <div class="col-xs-8">
-            <div class="input-group">
-              <label class="control-label" for="{{type}}-path">Do you want to delete the draft?</label>
-            </div>
-          </div>
-        </div>
-        {{/unless}}
-      </div>
-      <div class="modal-footer">
-        {{#if deleteInProgress}}
-          {{spin-spinner lines=10 length=10 width=5 radius=10 }}
-          <span class="pull-left">Deleting the draft</span>
-        {{/if}}
-        <button type="button" class="btn btn-default" data-dismiss="modal" {{action "closeDraftWindow"}}>Close</button>
-        {{#unless deleteMsg}}
-          <button type="button" class="btn btn-primary" {{action "deleteDraft" }}>Delete</button>
-        {{/unless}}
-      </div>
+    <div id="emptyDrafts">
+        <label class="control-label" for="{{type}}-path">There are no workflows currently</label>
     </div>
-  </div>
-</div>
-{{/if}}
+{{/if}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/recent-projects.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/recent-projects.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/recent-projects.hbs
new file mode 100644
index 0000000..cd8f6af
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/recent-projects.hbs
@@ -0,0 +1,33 @@
+{{!
+* 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.
+}}
+<div class="modal" id="projectsList" role="dialog">
+  <div class="modal-dialog">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal">&times;</button>
+        <h4 class="modal-title">My Workflows</h4>
+      </div>
+      <div class="modal-body">
+         {{drafts-wf model=recentFiles routeToDesigner="routeToDesigner" editWorkflow="editWorkflow" deleteWorkflow="deleteWorkflow"}}
+      </div>
+      <div class="modal-footer">
+        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+      </div>
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/design.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/design.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/design.hbs
index 012d9e7..5ca68c9 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/design.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/design.hbs
@@ -15,5 +15,5 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-{{designer-workspace xmlAppPath=xmlAppPath showDashboard="showDashboard" showProjManager="showProjManager"
+{{designer-workspace xmlAppPath=xmlAppPath editWorkflow="editWorkflow" currentDraft=currentDraft showDashboard="showDashboard" showProjManager="showProjManager" getAllRecentWorks="getAllRecentWorks"
   hideDashboard="hideDashboard" hideProjManager="hideProjManager" adminConfig=model.adminConfig}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/727a3187/contrib/views/wfmanager/src/main/resources/ui/app/templates/design/proj-manager-tab.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/design/proj-manager-tab.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/design/proj-manager-tab.hbs
index b897a4c..8ba9523 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/design/proj-manager-tab.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/design/proj-manager-tab.hbs
@@ -16,4 +16,4 @@
 * limitations under the License.
 }}
 
-{{drafts-wf model=model routeToDesigner="routeToDesigner" editWorkflow="editWorkflow"}}
+{{drafts-wf model=model routeToDesigner="routeToDesigner" editWorkflow="editWorkflow" deleteWorkflow="deleteWorkflow"}}


[20/50] [abbrv] ambari git commit: AMBARI-19806: After setting up hadoop credential, cannot start Hive Metastore

Posted by nc...@apache.org.
AMBARI-19806: After setting up hadoop credential, cannot start Hive Metastore


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: d340fe93b51b82dc380ad7783cd63b7e76b72224
Parents: f36af3d
Author: Nahappan Somasundaram <ns...@hortonworks.com>
Authored: Tue Jan 31 15:34:38 2017 -0800
Committer: Nahappan Somasundaram <ns...@hortonworks.com>
Committed: Wed Feb 1 15:09:44 2017 -0800

----------------------------------------------------------------------
 .../ambari_agent/CustomServiceOrchestrator.py   |   4 +
 ambari-server/pom.xml                           |  14 +
 .../server/credentialapi/CredentialUtil.java    | 580 +++++++++++++++++
 .../0.12.0.2.0/package/scripts/params_linux.py  |  54 +-
 .../credentialapi/CredentialUtilTest.java       | 644 +++++++++++++++++++
 5 files changed, 1292 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d340fe93/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index 8f1848c..9baaf08 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -75,6 +75,9 @@ class CustomServiceOrchestrator():
   # The property name used by the hadoop credential provider
   CREDENTIAL_PROVIDER_PROPERTY_NAME = 'hadoop.security.credential.provider.path'
 
+  # Property name for credential store class path
+  CREDENTIAL_STORE_CLASS_PATH_NAME = 'credentialStoreClassPath'
+
   def __init__(self, config, controller):
     self.config = config
     self.tmp_dir = config.get('agent', 'prefix')
@@ -286,6 +289,7 @@ class CustomServiceOrchestrator():
         os.chmod(file_path, 0644) # group and others should have read access so that the service user can read
       # Add JCEKS provider path instead
       config[self.CREDENTIAL_PROVIDER_PROPERTY_NAME] = provider_path
+      config[self.CREDENTIAL_STORE_CLASS_PATH_NAME] = cs_lib_path
 
     return cmd_result
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/d340fe93/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index 0441867..89b734e 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -134,6 +134,15 @@
                       value="org.apache.ambari.server.DBConnectionVerification" />
                   </manifest>
                 </jar>
+                <jar destfile="target/CredentialUtil.jar">
+                  <fileset dir="${basedir}/target/classes/">
+                    <include name="**/CredentialUtil*.class" />
+                  </fileset>
+                  <manifest>
+                    <attribute name="Main-Class"
+                               value="org.apache.ambari.server.credentialapi.CredentialUtil" />
+                  </manifest>
+                </jar>
               </tasks>
             </configuration>
             <goals>
@@ -1469,6 +1478,11 @@
       <version>${hadoop.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+      <version>${hadoop.version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-util</artifactId>
       <version>${jetty.version}</version>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d340fe93/ambari-server/src/main/java/org/apache/ambari/server/credentialapi/CredentialUtil.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/credentialapi/CredentialUtil.java b/ambari-server/src/main/java/org/apache/ambari/server/credentialapi/CredentialUtil.java
new file mode 100644
index 0000000..e6d7a37
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/credentialapi/CredentialUtil.java
@@ -0,0 +1,580 @@
+/*
+ * 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.
+ */
+
+package org.apache.ambari.server.credentialapi;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.conf.Configured;
+import org.apache.hadoop.security.alias.CredentialProvider;
+import org.apache.hadoop.security.alias.CredentialProviderFactory;
+import org.apache.hadoop.security.alias.CredentialShell;
+import org.apache.hadoop.security.alias.JavaKeyStoreProvider;
+import org.apache.hadoop.util.Tool;
+import org.apache.hadoop.util.ToolRunner;
+
+/**
+ * Command line utility that wraps over CredentialShell. Extends the
+ * create command to overwrite a credential if it exists. Also
+ * provides the ability to get the decrypted password.
+ *
+ * The CLI structure and code is the same as CredentialShell.
+ */
+public class CredentialUtil extends Configured implements Tool {
+  /**
+   * List of supported commands.
+   */
+  final static private String COMMANDS =
+          "   [--help]\n" +
+                  "   [" + CreateCommand.USAGE + "]\n" +
+                  "   [" + DeleteCommand.USAGE + "]\n" +
+                  "   [" + ListCommand.USAGE + "]\n" +
+                  "   [" + GetCommand.USAGE + "]\n";
+
+  /**
+   * JCEKS provider prefix.
+   */
+  public static final String jceksPrefix = JavaKeyStoreProvider.SCHEME_NAME + "://file";
+
+  /**
+   * Local JCEKS provider prefix.
+   */
+  public static final String localJceksPrefix = "localjceks://file";
+
+  /**
+   * Password alias
+   */
+  private String alias = null;
+
+  /**
+   * Password specified using the -value option
+   */
+  private String value = null;
+
+  /**
+   * Provider specified using the -provider option
+   */
+  protected CredentialProvider provider;
+
+  /**
+   * When creating a credential, overwrite the credential if it exists.
+   * If -n option is specified, this will be set to false.
+   */
+  private boolean overwrite = true;
+
+  /**
+   * Prompt for user confirmation before deleting/overwriting a credential.
+   * If -f option is specified, it will be set to false. In the case
+   * of a create command, it will be set to false if -n or -f is specified.
+   */
+  private boolean interactive = true;
+
+  /**
+   * One of the supported credential commands.
+   */
+  private Command command = null;
+
+  /**
+   * Main program.
+   *
+   * @param args Command line arguments
+   * @throws Exception
+   */
+  public static void main(String[] args) throws Exception {
+    int res = ToolRunner.run(new Configuration(), new CredentialUtil(), args);
+    System.exit(res);
+  }
+
+  /**
+   * Called by ToolRunner.run(). This is the entry point to the tool.
+   * Parses the command line arguments and executes the appropriate command.
+   *
+   * @param args - Arguments supplied by the user.
+   * @return - 0 if successful. 1 in case of a failure.
+   * @throws Exception - If something goes wrong during command execution.
+   */
+  @Override
+  public int run(String[] args) throws Exception {
+    int exitCode = 1;
+
+    for (int i = 0; i < args.length; ++i) {
+      if (args[i].equals("create")) {
+        if (i == args.length - 1) {
+          return 1;
+        }
+        command = new CreateCommand();
+        alias = args[++i];
+        if (alias.equals("-h") || alias.equals("-help")) {
+          printUsage();
+          return 0;
+        }
+      } else if (args[i].equals("get")) {
+        if (i == args.length - 1) {
+          return 1;
+        }
+        command = new GetCommand();
+        alias = args[++i];
+        if (alias.equals("-h") || alias.equals("-help")) {
+          printUsage();
+          return 0;
+        }
+      } else if (args[i].equals("delete")) {
+        if (i == args.length - 1) {
+          printUsage();
+          return 1;
+        }
+        command = new DeleteCommand();
+        alias = args[++i];
+        if (alias.equals("-help")) {
+          printUsage();
+          return 0;
+        }
+      } else if (args[i].equals("list")) {
+        if (i < args.length - 1) {
+          alias = args[i + 1];
+        }
+        command = new ListCommand();
+        if (alias.equals("-h") || alias.equals("-help")) {
+          printUsage();
+          return 0;
+        }
+        alias = "not required";
+      } else if (args[i].equals("-provider")) {
+        if (i == args.length - 1) {
+          return 1;
+        }
+        String providerPath = getNormalizedPath(args[++i]);
+        getConf().set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, providerPath);
+        provider = getCredentialProvider();
+      } else if (args[i].equals("-f") || args[i].equals("-force")) {
+        interactive = false;
+        overwrite = true;
+      } else if (args[i].equals("-n")) {
+        interactive = false;
+        overwrite = false;
+      } else if (args[i].equals("-v") || args[i].equals("-value")) {
+        value = args[++i];
+      } else if (args[i].equals("-h") || args[i].equals("-help")) {
+        printUsage();
+        return 0;
+      } else {
+        printUsage();
+        ToolRunner.printGenericCommandUsage(System.err);
+        return 1;
+      }
+    }
+
+    if (command == null) {
+      printUsage();
+    }
+    else if (command.validate()) {
+      exitCode = command.execute();
+    }
+
+    return exitCode;
+  }
+
+  /**
+   * Prints a command specific usage or overall tool usage.
+   */
+  protected void printUsage() {
+    System.out.println(getUsagePrefix() + COMMANDS);
+    if (command != null) {
+      System.out.println(command.getUsage());
+    }
+    else {
+      System.out.println("=========================================================" +
+              "======");
+      System.out.println(CreateCommand.USAGE + ":\n\n" + CreateCommand.DESC);
+      System.out.println("=========================================================" +
+              "======");
+      System.out.println(DeleteCommand.USAGE + ":\n\n" + DeleteCommand.DESC);
+      System.out.println("=========================================================" +
+              "======");
+      System.out.println(ListCommand.USAGE + ":\n\n" + ListCommand.DESC);
+      System.out.println("=========================================================" +
+              "======");
+      System.out.println(GetCommand.USAGE + ":\n\n" + GetCommand.DESC);
+    }
+  }
+
+  /**
+   * Overridden by the command line driver to provide name of the tool.
+   *
+   * @return - CLI specific information, like tool name, year, copyright, etc.
+   */
+  protected String getUsagePrefix() {
+    return "Usage: ";
+  }
+
+  /*
+   * Normalize the providerPath to jceks://file/<file_path> or localjceks://file/<file_path>
+   */
+  private static String getNormalizedPath(String providerPath) {
+    if (providerPath != null) {
+      String jceksPath;
+
+      if (providerPath.startsWith("/")) {
+        providerPath = providerPath.substring(1);
+      }
+
+      jceksPath = StringUtils.lowerCase(providerPath.trim());
+
+      if (!jceksPath.startsWith(StringUtils.lowerCase(jceksPrefix)) &&
+              !jceksPath.startsWith(localJceksPrefix)) {
+        providerPath = jceksPrefix + "/" + providerPath;
+      }
+    }
+
+    return providerPath;
+  }
+
+  /**
+   * Gets the provider object for the user specified provider.
+   *
+   * @return - A credential provider.
+   */
+  private CredentialProvider getCredentialProvider() {
+    CredentialProvider provider = null;
+
+    List<CredentialProvider> providers;
+    try {
+      providers = CredentialProviderFactory.getProviders(getConf());
+      provider = providers.get(0);
+    } catch (IOException e) {
+      e.printStackTrace(System.err);
+    }
+
+    return provider;
+  }
+
+  /**
+   * CredentialCommand base class
+   */
+  private abstract class Command {
+    /**
+     * Validates the user input.
+     *
+     * @return - True if inputs are valid. False otherwise.
+     */
+    public boolean validate() {
+      boolean rc = true;
+
+      if (alias == null || alias.isEmpty()) {
+        System.out.println("There is no alias specified. Please provide the" +
+                "mandatory <alias>. See the usage description with -help.");
+        rc = false;
+      }
+
+      if (provider == null) {
+        System.out.println("There are no valid CredentialProviders configured." +
+                "\nCredential will not be created.\n"
+                + "Consider using the -provider option to indicate the provider" +
+                " to use.");
+        rc = false;
+      }
+
+      return rc;
+    }
+
+    /**
+     * Gets command usage and description.
+     *
+     * @return
+     */
+    public abstract String getUsage();
+
+    /**
+     * Called by run(). Implemented by the concrete command classes.
+     *
+     * @return - 0 if successful. 1 on failure.
+     * @throws Exception - If something goes wrong.
+     */
+    public abstract int execute() throws Exception;
+  }
+
+  /**
+   * Gets the credential for the specified alias from the
+   * specified provider.
+   */
+  private class GetCommand extends Command {
+    public static final String USAGE = "get <alias> [-provider provider-path]";
+    public static final String DESC =
+            "The get subcommand gets the credential for the specified alias\n" +
+                    "from the provider specified through the -provider argument.\n";
+
+    /**
+     * Executes the get command. Prints the clear text password on the command line.
+     *
+     * @return - 0 on success; 1 on failure.
+     * @throws IOException
+     */
+    @Override
+    public int execute() throws IOException {
+      int exitCode = 0;
+
+      try {
+        String credential = getCredential();
+        if (credential == null) {
+          exitCode = 1;
+        } else {
+          System.out.println(credential);
+        }
+      } catch (IOException ex) {
+        System.out.println("Cannot get the credential for the specified alias."
+                + ": " + ex.getMessage());
+        throw ex;
+      }
+
+      return exitCode;
+    }
+
+    /**
+     * Gets the clear text password from the credential provider.
+     *
+     * @return - Decrypted password for the specified alias.
+     * @throws IOException
+     */
+    private String getCredential() throws IOException {
+      String credential = null;
+      CredentialProvider.CredentialEntry credEntry = provider.getCredentialEntry(alias);
+
+      if (credEntry != null) {
+        char[] password = credEntry.getCredential();
+        if (password != null) {
+          credential = String.valueOf(password);
+        }
+      }
+
+      return credential;
+    }
+
+    /**
+     * Usage and description.
+     *
+     * @return
+     */
+    @Override
+    public String getUsage() {
+      return USAGE + ":\n\n" + DESC;
+    }
+  }
+
+  /**
+   * Creates a new credential for the alias specified or overwrites an
+   * existing credential
+   */
+  private class CreateCommand extends Command {
+    /**
+     * Usage summary
+     */
+    public static final String USAGE =
+            "create <alias> [-value credential] [-provider provider-path] [-f | -n]";
+
+    /**
+     * Command description
+     */
+    public static final String DESC =
+            "The create subcommand creates a new credential or overwrites\n" +
+                    "an existing credential for the name specified\n" +
+                    "as the <alias> argument within the provider indicated through\n" +
+                    "the -provider argument. The command asks for confirmation to\n" +
+                    "overwrite the existing credential unless the -f option is specified.\n" +
+                    "Specify -n to not overwrite if the credential exists.\nThe option specified last wins.";
+
+    /**
+     * Creates or updates the specified credential.
+     *
+     * @return - 0 on success; 1 on failure.
+     * @throws Exception
+     */
+    @Override
+    public int execute() throws Exception {
+      int exitCode = 0;
+      CredentialProvider.CredentialEntry credEntry = provider.getCredentialEntry(alias);
+
+      if (credEntry != null) {
+        /*
+         * If credential already exists, overwrite if -f flag was specified.
+         * overwrite is true if -f was specified.
+         * overwrite is false if -n was specified.
+         * if neither options were specified, prompt the user.
+         */
+        if (interactive) {
+          // prompt the user to confirm or reject the overwrite
+          overwrite = ToolRunner
+                  .confirmPrompt("You are about to OVERWRITE the credential " +
+                          alias + " from CredentialProvider " + provider.toString() +
+                          ". Continue? ");
+        }
+
+        if (overwrite) {
+          // delete the existing credential
+          DeleteCommand deleteCommand = new DeleteCommand();
+          exitCode = deleteCommand.execute();
+        } else {
+          // nothing to do
+          return 0;
+        }
+      }
+
+      // create new or overwrite existing credential if delete succeeded
+      if (exitCode == 0) {
+        exitCode = createCredential();
+      }
+
+      return exitCode;
+    }
+
+    /**
+     * Usage and description.
+     * @return
+     */
+    @Override
+    public String getUsage() {
+      return USAGE + ":\n\n" + DESC;
+    }
+
+    /**
+     * Creates the specified credential. A credential with the same alias
+     * should not exist. It must be deleted before this method is called.
+     *
+     * @return - 0 on success; 1 on failure.
+     * @throws Exception - If the alias already exists.
+     */
+    private int createCredential() throws Exception {
+      int exitCode;
+      List<String> args = new ArrayList<>();
+
+      args.add("create");
+      args.add(alias);
+      if (value != null) {
+        args.add("-value");
+        args.add(value);
+      }
+
+      String[] toolArgs = args.toArray(new String[args.size()]);
+
+      exitCode = ToolRunner.run(getConf(), new CredentialShell(), toolArgs);
+
+      return exitCode;
+    }
+  }
+
+  /**
+   * Deletes the credential specified by the alias from the
+   * specified provider.
+   */
+  private class DeleteCommand extends Command {
+    public static final String USAGE =
+            "delete <alias> [-f] [-provider provider-path]";
+    public static final String DESC =
+            "The delete subcommand deletes the credential specified\n" +
+                    "as the <alias> argument from within the provider indicated\n" +
+                    "through the -provider argument. The command asks for\n" +
+                    "confirmation unless the -f option is specified.";
+
+    /**
+     * Deletes the specified alias. Prompts for user confirmation
+     * if -f option is not specified.
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public int execute() throws Exception {
+      int exitCode;
+      List<String> args = new ArrayList<>();
+
+      args.add("delete");
+      args.add(alias);
+      if (!interactive) {
+        args.add("-f");
+      }
+
+      String[] toolArgs = args.toArray(new String[args.size()]);
+
+      exitCode = ToolRunner.run(getConf(), new CredentialShell(), toolArgs);
+
+      return exitCode;
+    }
+
+    /**
+     * Usage and description.
+     *
+     * @return
+     */
+    @Override
+    public String getUsage() {
+      return USAGE + ":\n\n" + DESC;
+    }
+  }
+
+
+  /**
+   * Lists all the aliases contained in the specified provider.
+   */
+  private class ListCommand extends Command {
+    /**
+     * Command usage
+     */
+    public static final String USAGE = "list [-provider provider-path]";
+
+    /**
+     * Command description
+     */
+    public static final String DESC =
+            "The list subcommand displays the aliases contained within \n" +
+                    "a particular provider - as configured in core-site.xml or\n " +
+                    "indicated through the -provider argument.";
+
+    /**
+     * Executes the list command.
+     *
+     * @return - 0 if successful; 1 otherwise.
+     * @throws Exception - If something goes wrong.
+     */
+    @Override
+    public int execute() throws Exception {
+      int exitCode;
+      List<String> args = new ArrayList<>();
+
+      args.add("list");
+
+      String[] toolArgs = args.toArray(new String[args.size()]);
+
+      exitCode = ToolRunner.run(getConf(), new CredentialShell(), toolArgs);
+
+      return exitCode;
+    }
+
+    /**
+     * Usage and description.
+     *
+     * @return
+     */
+    @Override
+    public String getUsage() {
+      return USAGE + ":\n\n" + DESC;
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/d340fe93/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
index 8451de1..211fe0a 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
@@ -46,6 +46,11 @@ from ambari_commons.ambari_metrics_helper import select_metric_collector_hosts_f
 from resource_management.libraries.functions.setup_ranger_plugin_xml import get_audit_configs
 from resource_management.libraries.functions.get_architecture import get_architecture
 
+from resource_management.core.utils import PasswordString
+from resource_management.core.shell import checked_call
+from resource_management.core.logger import Logger
+from ambari_commons.inet_utils import download_file
+
 # Default log4j version; put config files under /etc/hive/conf
 log4j_version = '1'
 
@@ -55,6 +60,10 @@ tmp_dir = Script.get_tmp_dir()
 architecture = get_architecture()
 sudo = AMBARI_SUDO_BINARY
 
+credential_store_enabled = False
+if 'credentialStoreEnabled' in config:
+  credential_store_enabled = config['credentialStoreEnabled']
+
 stack_root = status_params.stack_root
 stack_name = status_params.stack_name
 stack_name_uppercase = stack_name.upper()
@@ -218,7 +227,46 @@ execute_path = os.environ['PATH'] + os.pathsep + hive_bin + os.pathsep + hadoop_
 hive_metastore_user_name = config['configurations']['hive-site']['javax.jdo.option.ConnectionUserName']
 hive_jdbc_connection_url = config['configurations']['hive-site']['javax.jdo.option.ConnectionURL']
 
-hive_metastore_user_passwd = config['configurations']['hive-site']['javax.jdo.option.ConnectionPassword']
+jdk_location = config['hostLevelParams']['jdk_location']
+
+credential_util_cmd = 'org.apache.ambari.server.credentialapi.CredentialUtil'
+credential_util_jar = 'CredentialUtil.jar'
+
+# Gets the hive metastore password from its JCEKS provider, if available.
+def getHiveMetastorePassword():
+  passwd = ''
+  if 'hadoop.security.credential.provider.path' in config['configurations']['hive-site']:
+    # Try to download CredentialUtil.jar from ambari-server resources
+    cs_lib_path = config['configurations']['hive-site']['credentialStoreClassPath']
+    credential_util_dir = cs_lib_path.split('*')[0] # Remove the trailing '*'
+    credential_util_path = os.path.join(credential_util_dir, credential_util_jar)
+    credential_util_url =  jdk_location + credential_util_jar
+    try:
+      download_file(credential_util_url, credential_util_path)
+    except Exception, e:
+      message = 'Error downloading {0} from Ambari Server resources. {1}'.format(credential_util_url, str(e))
+      Logger.error(message)
+      raise
+
+    # Execute a get command on the CredentialUtil CLI to get the password for the specified alias
+    java_home = config['hostLevelParams']['java_home']
+    java_bin = '{java_home}/bin/java'.format(java_home=java_home)
+    alias = 'javax.jdo.option.ConnectionPassword'
+    provider_path = config['configurations']['hive-site']['hadoop.security.credential.provider.path']
+    cmd = (java_bin, '-cp', cs_lib_path, credential_util_cmd, 'get', alias, '-provider', provider_path)
+    cmd_result, std_out_msg  = checked_call(cmd)
+    if cmd_result != 0:
+      message = 'The following error occurred while executing {0}: {1}'.format(' '.join(cmd), std_out_msg)
+      Logger.error(message)
+      raise
+    std_out_lines = std_out_msg.split('\n')
+    passwd = std_out_lines[-1] # Get the last line of the output, to skip warnings if any.
+  return passwd
+
+if credential_store_enabled:
+  hive_metastore_user_passwd = PasswordString(getHiveMetastorePassword())
+else:
+  hive_metastore_user_passwd = config['configurations']['hive-site']['javax.jdo.option.ConnectionPassword']
 hive_metastore_user_passwd = unicode(hive_metastore_user_passwd) if not is_empty(hive_metastore_user_passwd) else hive_metastore_user_passwd
 hive_metastore_db_type = config['configurations']['hive-env']['hive_database_type']
 
@@ -237,8 +285,6 @@ if 'roleCommand' in config and 'CUSTOM_COMMAND' == config['roleCommand']:
 
 #JDBC driver jar name
 hive_jdbc_driver = config['configurations']['hive-site']['javax.jdo.option.ConnectionDriverName']
-jdk_location = config['hostLevelParams']['jdk_location']
-
 java_share_dir = '/usr/share/java'
 hive_database_name = config['configurations']['hive-env']['hive_database_name']
 hive_database = config['configurations']['hive-env']['hive_database']
@@ -796,4 +842,4 @@ if enable_ranger_hive:
   if has_ranger_admin and stack_supports_ranger_audit_db and xa_audit_db_flavor.lower() == 'sqla':
     xa_audit_db_is_enabled = False
 
-# ranger hive plugin section end
+# ranger hive plugin section end
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/d340fe93/ambari-server/src/test/java/org/apache/ambari/server/credentialapi/CredentialUtilTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/credentialapi/CredentialUtilTest.java b/ambari-server/src/test/java/org/apache/ambari/server/credentialapi/CredentialUtilTest.java
new file mode 100644
index 0000000..abc7cfe
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/credentialapi/CredentialUtilTest.java
@@ -0,0 +1,644 @@
+/**
+ * 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.
+ */
+
+package org.apache.ambari.server.credentialapi;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.util.ToolRunner;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+
+/**
+ * Tests CredentialUtilTest.
+ */
+public class CredentialUtilTest {
+  /**
+   * Cleans up itself after a test method is run.
+   */
+  @Rule
+  public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+  /**
+   * Redirect System.out to a stream. CredentialShell() writes to System.out.
+   * We want to capture that.
+   */
+  private final ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+  /**
+   * Redirect System.err to a stream.
+   */
+  private final ByteArrayOutputStream err = new ByteArrayOutputStream();
+
+  /**
+   * CRUD command verbs
+   */
+  private static final String CREATE_VERB = "create";
+  private static final String DELETE_VERB = "delete";
+  private static final String LIST_VERB = "list";
+  private static final String GET_VERB = "get";
+
+
+  /**
+   * Gets a temporary folder name.
+   *
+   * @return
+   */
+  private String getTempFolderName() {
+    return temporaryFolder.getRoot().getAbsolutePath();
+  }
+
+  /**
+   * Constructs a valid JCEKS provider path from the specified file name.
+   *
+   * @param fileName
+   * @return
+   */
+  private String getProviderPath(String fileName) {
+    return CredentialUtil.jceksPrefix + getTempFolderName() + "/"  + fileName;
+  }
+
+  /**
+   * Constructs the create arguments to create a new credential.
+   *
+   * @param alias
+   * @param credential
+   * @param providerPath
+   * @return
+   */
+  private String[] getCreateArgs(String alias, String credential, String providerPath) {
+    List<String> args = new ArrayList<String>();
+
+    args.add(CREATE_VERB);
+    args.add(alias);
+    args.add("-value");
+    args.add(credential);
+    args.add("-provider");
+    args.add(providerPath);
+
+    return args.toArray(new String[args.size()]);
+  }
+
+  /**
+   * Constructs the create arguments with no overwrite existing option.
+   *
+   * @param alias
+   * @param credential
+   * @param providerPath
+   * @return
+   */
+  private String[] getSafeCreateArgs(String alias, String credential, String providerPath) {
+    List<String> args = new ArrayList<String>();
+
+    args.add(CREATE_VERB);
+    args.add(alias);
+    args.add("-value");
+    args.add(credential);
+    args.add("-provider");
+    args.add(providerPath);
+    args.add("-n"); /* do not overwrite if credential exists */
+
+    return args.toArray(new String[args.size()]);
+  }
+
+  /**
+   * Constructs the create arguments with overwrite.
+   *
+   * @param alias
+   * @param credential
+   * @param providerPath
+   * @return
+   */
+  private String[] getUpdateArgs(String alias, String credential, String providerPath) {
+    List<String> args = new ArrayList<String>();
+
+    args.add(CREATE_VERB);
+    args.add(alias);
+    args.add("-value");
+    args.add(credential);
+    args.add("-provider");
+    args.add(providerPath);
+    args.add("-f"); /* overwrite */
+
+    return args.toArray(new String[args.size()]);
+  }
+
+  /**
+   * Constructs the delete arguments.
+   *
+   * @param alias
+   * @param providerPath
+   * @return
+   */
+  private String[] getDeleteArgs(String alias, String providerPath) {
+    List<String> args = new ArrayList<String>();
+
+    args.add(DELETE_VERB);
+    args.add(alias);
+    args.add("-provider");
+    args.add(providerPath);
+    args.add("-f"); /* suppress prompt to confirm */
+
+    return args.toArray(new String[args.size()]);
+  }
+
+  /**
+   * List arguments.
+   *
+   * @param providerPath
+   * @return
+   */
+  private String[] getListArgs(String providerPath) {
+    List<String> args = new ArrayList<String>();
+
+    args.add(LIST_VERB);
+    args.add("-provider");
+    args.add(providerPath);
+
+    return args.toArray(new String[args.size()]);
+  }
+
+  /**
+   * Get arguments.
+   *
+   * @param alias
+   * @param providerPath
+   * @return
+   */
+  private String[] getGetArgs(String alias, String providerPath) {
+    List<String> args = new ArrayList<String>();
+
+    args.add(GET_VERB);
+    args.add(alias);
+    args.add("-provider");
+    args.add(providerPath);
+
+    return args.toArray(new String[args.size()]);
+  }
+
+  /**
+   * Executes the given arguments.
+   *
+   * @param args
+   * @return
+   * @throws Exception
+   */
+  private int executeCommand(String[] args) throws Exception {
+    return ToolRunner.run(new Configuration(), new CredentialUtil(), args);
+  }
+
+  /**
+   * Set up the streams before each test.
+   */
+  @Before
+  public void setupStreams() {
+    System.setOut(new PrintStream(out));
+    System.setErr(new PrintStream(err));
+  }
+
+  /**
+   * Clean up the stream after each test.
+   */
+  @After
+  public void teardownStreams() {
+    System.setOut(null);
+    System.setErr(null);
+  }
+
+  /**
+   * Creates a non-existing credential
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testCreateCommand() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args = getCreateArgs(alias, credential, providerPath);
+
+    int exitCode = executeCommand(args);
+
+    Assert.assertEquals(exitCode, 0);
+  }
+
+  /**
+   * Overwrites an existing credential.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testCreateCommandOverwriteExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Create a new credential
+     */
+    args = getCreateArgs(alias, credential, providerPath);
+    exitCode = ToolRunner.run(new Configuration(), new CredentialUtil(), args);
+    Assert.assertEquals(exitCode, 0);
+
+    /*
+     * Update the created credential
+     */
+    credential = "MyUpdatedTopSecretPassword";
+    args = getUpdateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+  }
+
+  /**
+   * Updates a non-existing credential. Should create it.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testCreateCommandOverwriteNonExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Update a non-existing credential. Should create it.
+     */
+    args = getUpdateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+  }
+
+  /**
+   * Safely creates a credential. If credential already exists, nothing is done.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testSafeCreateCommandExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Create a new credential
+     */
+    args = getCreateArgs(alias, credential, providerPath);
+    exitCode = ToolRunner.run(new Configuration(), new CredentialUtil(), args);
+    Assert.assertEquals(exitCode, 0);
+
+    /*
+     * Safely update the previously created credential. Nothing is done.
+     */
+    credential = "AnotherTopSecretPassword";
+    args = getSafeCreateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+  }
+
+  /**
+   * Safely creates a credential. If it does not exist, it will be created.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testSafeCreateCommandNotExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Safely update a non-existing credential. Should create the credential.
+     */
+    credential = "AnotherTopSecretPassword";
+    args = getSafeCreateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+  }
+
+  /**
+   * Delete an existing credential
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testDeleteCommandExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Create a new credential
+     */
+    args = getCreateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+
+    /*
+     * Delete the above credential
+     */
+    args = getDeleteArgs(alias, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+  }
+
+  /**
+   * Delete a non-existing credential
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testDeleteCommandNonExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Delete a non-existing credential. Should fail with exit code 1.
+     */
+    args = getDeleteArgs(alias, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 1);
+  }
+
+  /**
+   * Retrieve an existing credential.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testGetCommandExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Create a new credential
+     */
+    args = getCreateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    out.reset();
+
+    /*
+     * Get the existing credential.
+     */
+    args = getGetArgs(alias, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+
+    String retrievedCredential = out.toString().trim();
+    Assert.assertEquals(credential, retrievedCredential);
+  }
+
+  /**
+   * Retrieve a non-existing credential.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testGetCommandNonExisting() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Get a non-existing credential. Should fail with exit code 1.
+     */
+    args = getGetArgs(alias, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 1);
+  }
+
+  /**
+   * Create, delete and attempt to get the alias.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testGetCommandAfterDeletion() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Create a new credential
+     */
+    args = getCreateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+
+    /*
+     * Delete the above credential
+     */
+    args = getDeleteArgs(alias, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+
+    /*
+     * Get the existing credential. Should not be there.
+     */
+    args = getGetArgs(alias, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 1);
+  }
+
+  /**
+   * Execute get on an invalid provider path.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testGetCommandWithNonExistingProvider() throws Exception {
+    String alias = "javax.jdo.option.ConnectionPassword";
+    String credential = "MyTopSecretPassword";
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+
+    /*
+     * Create a new credential
+     */
+    args = getCreateArgs(alias, credential, providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+
+    /*
+     * Get a credential. Should not be there.
+     */
+    args = getGetArgs(alias, "BadProvider.jceks");
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 1);
+  }
+
+  /**
+   * List all aliases.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testListCommand() throws Exception {
+    String providerPath = getProviderPath("CreateCommandTest.jceks");
+    String[] args;
+    int exitCode;
+    final int numEntries = 5;
+    Properties properties = new Properties();
+
+    /*
+     * Create some alias password entries.
+     */
+    for (int i = 0; i < numEntries; ++i) {
+      String alias = String.format("alias_%d", i + 1);
+      String credential = String.format("credential_%d", i + 1);
+      properties.setProperty(alias, credential);
+      args = getCreateArgs(alias, credential, providerPath);
+      exitCode = executeCommand(args);
+      Assert.assertEquals(exitCode, 0);
+    }
+
+    out.reset();
+
+    /*
+     * List all aliases.
+     */
+    args = getListArgs(providerPath);
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    List<String> aliases = Arrays.asList(out.toString().split(System.getProperty("line.separator")));
+    Enumeration enumeration = properties.propertyNames();
+    while (enumeration.hasMoreElements()) {
+      String alias = (String)enumeration.nextElement();
+      Assert.assertTrue(aliases.contains(alias));
+    }
+  }
+
+  /**
+   * Prints the tool usage.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testToolUsage() throws Exception {
+    String[] args = new String[1];
+    int exitCode;
+
+    /*
+     * Invoke tool help
+     */
+    args[0] = "-help";
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    Assert.assertTrue(!out.toString().isEmpty());
+  }
+
+  /**
+   * Invoke Create command help
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testCreateCommandUsage() throws Exception {
+    String[] args = new String[2];
+    int exitCode;
+
+    args[0] = CREATE_VERB;
+    args[1] = "-help";
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    Assert.assertTrue(!out.toString().isEmpty());
+  }
+
+  /*
+   * Invoke Delete command help
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testDeleteCommandUsage() throws Exception {
+    String[] args = new String[2];
+    int exitCode;
+
+    args[0] = DELETE_VERB;
+    args[1] = "-help";
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    Assert.assertTrue(!out.toString().isEmpty());
+  }
+
+  /*
+  * Invoke List command help
+  *
+  * @throws Exception
+  */
+  @Test
+  public void testListCommandUsage() throws Exception {
+    String[] args = new String[2];
+    int exitCode;
+
+    args[0] = LIST_VERB;
+    args[1] = "-help";
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    Assert.assertTrue(!out.toString().isEmpty());
+  }
+
+  /*
+  * Invoke Get command help
+  *
+  * @throws Exception
+  */
+  @Test
+  public void testGetCommandUsage() throws Exception {
+    String[] args = new String[2];
+    int exitCode;
+
+    args[0] = GET_VERB;
+    args[1] = "-help";
+    exitCode = executeCommand(args);
+    Assert.assertEquals(exitCode, 0);
+    Assert.assertTrue(!out.toString().isEmpty());
+  }
+}
\ No newline at end of file


[21/50] [abbrv] ambari git commit: AMBARI-19816. Agent heartbeat lost due to dead service check process - addendum fix (Attila Doroszlai via smohanty)

Posted by nc...@apache.org.
AMBARI-19816. Agent heartbeat lost due to dead service check process - addendum fix (Attila Doroszlai via smohanty)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: c10fcc8f3682e7e4a2924e8a58fa895920fef908
Parents: d340fe9
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Feb 1 16:29:30 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Feb 1 16:30:04 2017 -0800

----------------------------------------------------------------------
 .../src/main/python/ambari_agent/Hardware.py    | 10 ++-
 .../test/python/ambari_agent/TestHardware.py    | 84 +++++++++-----------
 2 files changed, 44 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c10fcc8f/ambari-agent/src/main/python/ambari_agent/Hardware.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/Hardware.py b/ambari-agent/src/main/python/ambari_agent/Hardware.py
index 2233b0a..8cb8a28 100644
--- a/ambari-agent/src/main/python/ambari_agent/Hardware.py
+++ b/ambari-agent/src/main/python/ambari_agent/Hardware.py
@@ -21,6 +21,7 @@ limitations under the License.
 import os.path
 import logging
 import subprocess
+from resource_management.core import shell
 from resource_management.core.shell import call
 from resource_management.core.exceptions import ExecuteTimeoutException, Fail
 from ambari_commons.shell import shellRunner
@@ -136,8 +137,13 @@ class Hardware:
     if not cls._check_remote_mounts(config):
       command.append("-l")
 
-    df = subprocess.Popen(command, stdout=subprocess.PIPE)
-    dfdata = df.communicate()[0]
+    try:
+      code, out, err = shell.call(command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = int(timeout), quiet = True)
+      dfdata = out
+    except Exception as ex:
+      logger.warn("Checking disk usage failed: " + str(ex))
+      dfdata = ''
+
     mounts = [cls._parse_df_line(line) for line in dfdata.splitlines() if line]
     result_mounts = []
     ignored_mounts = []

http://git-wip-us.apache.org/repos/asf/ambari/blob/c10fcc8f/ambari-agent/src/test/python/ambari_agent/TestHardware.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHardware.py b/ambari-agent/src/test/python/ambari_agent/TestHardware.py
index 79205cf..d30020c 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHardware.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHardware.py
@@ -25,6 +25,7 @@ from mock.mock import patch, MagicMock, Mock
 import unittest
 import platform
 import socket
+import subprocess
 import os
 from only_for_platform import not_for_platform, PLATFORM_WINDOWS
 from ambari_agent import hostname
@@ -32,6 +33,7 @@ from ambari_agent.Hardware import Hardware
 from ambari_agent.AmbariConfig import AmbariConfig
 from ambari_agent.Facter import Facter, FacterLinux
 from ambari_commons import OSCheck
+from resource_management.core import shell
 
 
 @not_for_platform(PLATFORM_WINDOWS)
@@ -85,7 +87,8 @@ class TestHardware(TestCase):
 
   @patch.object(Hardware, "_chk_writable_mount")
   @patch("ambari_agent.Hardware.path_isfile")
-  def test_osdisks_parsing(self, isfile_mock, chk_writable_mount_mock):
+  @patch("resource_management.core.shell.call")
+  def test_osdisks_parsing(self, shell_call_mock, isfile_mock, chk_writable_mount_mock):
     df_output =\
                 """Filesystem                                                                                        Type  1024-blocks     Used Available Capacity Mounted on
                 /dev/mapper/docker-253:0-4980899-d45c264d37ab18c8ed14f890f4d59ac2b81e1c52919eb36a79419787209515f3 xfs      31447040  1282384  30164656       5% /
@@ -108,18 +111,9 @@ class TestHardware(TestCase):
 
     isfile_mock.side_effect = isfile_side_effect
     chk_writable_mount_mock.side_effect = chk_writable_mount_side_effect
+    shell_call_mock.return_value = (0, df_output, '')
 
-    with patch("subprocess.Popen") as open_mock:
-      proc_mock = Mock()
-      attr = {
-        'communicate.return_value': [
-          df_output
-        ]
-      }
-      proc_mock.configure_mock(**attr)
-      open_mock.return_value = proc_mock
-
-      result = Hardware.osdisks()
+    result = Hardware.osdisks()
 
     self.assertEquals(1, len(result))
 
@@ -130,39 +124,40 @@ class TestHardware(TestCase):
 
   @patch.object(OSCheck, "get_os_type")
   @patch.object(OSCheck, "get_os_version")
-  @patch("subprocess.Popen")
-  @patch("subprocess.Popen.communicate")
-  def test_osdisks_remote(self, communicate_mock, popen_mock,
-                          get_os_version_mock, get_os_type_mock):
+  @patch("resource_management.core.shell.call")
+  def test_osdisks_remote(self, shell_call_mock, get_os_version_mock, get_os_type_mock):
     get_os_type_mock.return_value = "suse"
     get_os_version_mock.return_value = "11"
     Hardware.osdisks()
-    popen_mock.assert_called_with(['timeout', '10', "df", "-kPT"], stdout=-1)
+    timeout = 10
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
     config = AmbariConfig()
     Hardware.osdisks(config)
-    popen_mock.assert_called_with(['timeout', '10', "df", "-kPT"], stdout=-1)
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
     config.add_section(AmbariConfig.AMBARI_PROPERTIES_CATEGORY)
     config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY, "true")
     Hardware.osdisks(config)
-    popen_mock.assert_called_with(['timeout', '10', "df", "-kPT"], stdout=-1)
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
     config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY, "false")
     Hardware.osdisks(config)
-    popen_mock.assert_called_with(['timeout', '10', "df", "-kPT", "-l"], stdout=-1)
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
     config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "0")
     Hardware.osdisks(config)
-    popen_mock.assert_called_with(['timeout', '10', "df", "-kPT", "-l"], stdout=-1)
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
-    config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "1")
+    timeout = 1
+    config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, str(timeout))
     Hardware.osdisks(config)
-    popen_mock.assert_called_with(["timeout", "1", "df", "-kPT", "-l"], stdout=-1)
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
-    config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "2")
+    timeout = 2
+    config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, str(timeout))
     Hardware.osdisks(config)
-    popen_mock.assert_called_with(["timeout", "2", "df", "-kPT", "-l"], stdout=-1)
+    shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
 
   def test_parse_df_line(self):
     df_line_sample = "device type size used available percent mountpoint"
@@ -382,7 +377,8 @@ SwapFree:        1598676 kB
 
   @patch.object(Hardware, "_chk_writable_mount")
   @patch("ambari_agent.Hardware.path_isfile")
-  def test_osdisks_blacklist(self, isfile_mock, chk_writable_mount_mock):
+  @patch("resource_management.core.shell.call")
+  def test_osdisks_blacklist(self, shell_call_mock, isfile_mock, chk_writable_mount_mock):
     df_output = \
       """Filesystem                                                                                        Type  1024-blocks     Used Available Capacity Mounted on
       /dev/mapper/docker-253:0-4980899-d45c264d37ab18c8ed14f890f4d59ac2b81e1c52919eb36a79419787209515f3 xfs      31447040  1282384  30164656       5% /
@@ -414,33 +410,25 @@ SwapFree:        1598676 kB
       }
     }
 
-    with patch("subprocess.Popen") as open_mock:
-      proc_mock = Mock()
-      attr = {
-        'communicate.return_value': [
-          df_output
-        ]
-      }
-      proc_mock.configure_mock(**attr)
-      open_mock.return_value = proc_mock
+    shell_call_mock.return_value = (0, df_output, '')
 
-      def conf_get(section, key, default=""):
-        if section in config_dict and key in config_dict[section]:
-          return config_dict[section][key]
+    def conf_get(section, key, default=""):
+      if section in config_dict and key in config_dict[section]:
+        return config_dict[section][key]
 
-        return default
+      return default
 
-      def has_option(section, key):
-        return section in config_dict and key in config_dict[section]
+    def has_option(section, key):
+      return section in config_dict and key in config_dict[section]
 
-      conf = Mock()
-      attr = {
-        'get.side_effect': conf_get,
-        'has_option.side_effect': has_option
-      }
-      conf.configure_mock(**attr)
+    conf = Mock()
+    attr = {
+      'get.side_effect': conf_get,
+      'has_option.side_effect': has_option
+    }
+    conf.configure_mock(**attr)
 
-      result = Hardware.osdisks(conf)
+    result = Hardware.osdisks(conf)
 
     self.assertEquals(1, len(result))
 


[42/50] [abbrv] ambari git commit: AMBARI-17722. Add some of value-attributes to property files in TEZ. (Masahiro Tanaka via yusaku)

Posted by nc...@apache.org.
AMBARI-17722. Add some of value-attributes to property files in TEZ. (Masahiro Tanaka via yusaku)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: ebc05a917597eaa0b9cba60bb205478143538a78
Parents: b457d7b
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Thu Feb 2 13:08:09 2017 -0800
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Thu Feb 2 13:08:34 2017 -0800

----------------------------------------------------------------------
 .../TEZ/0.4.0.2.1/configuration/tez-site.xml    | 27 +++++-
 .../services/TEZ/configuration/tez-site.xml     | 65 ++++++++++++++-
 .../2.2/services/TEZ/configuration/tez-site.xml | 83 ++++++++++++++++++
 .../2.3/services/TEZ/configuration/tez-site.xml |  6 ++
 .../2.5/services/TEZ/configuration/tez-site.xml |  6 ++
 .../2.2/services/TEZ/configuration/tez-site.xml | 88 +++++++++++++++++++-
 6 files changed, 272 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ebc05a91/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/configuration/tez-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/configuration/tez-site.xml b/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/configuration/tez-site.xml
index bf120e6..d7031e1 100644
--- a/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/configuration/tez-site.xml
+++ b/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/configuration/tez-site.xml
@@ -41,6 +41,7 @@
     <description>The amount of memory to be used by the AppMaster</description>
     <value-attributes>
       <type>int</type>
+      <unit>MB</unit>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
@@ -57,6 +58,9 @@
     <description>In case of a ScatterGather connection, the fraction of source tasks which should
       complete before tasks for the current vertex are schedule
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -72,6 +76,10 @@
     <name>tez.am.am-rm.heartbeat.interval-ms.max</name>
     <value>250</value>
     <description>The maximum heartbeat interval between the AM and RM in milliseconds</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -94,6 +102,7 @@
     </description>
     <value-attributes>
       <type>int</type>
+      <unit>Bytes</unit>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
@@ -105,6 +114,7 @@
     </description>
     <value-attributes>
       <type>int</type>
+      <unit>Bytes</unit>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
@@ -136,6 +146,10 @@
       it immediately. Only active when reuse is enabled. Set to -1 to never release a container
       in a session
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -149,9 +163,13 @@
   <property>
     <name>tez.task.get-task.sleep.interval-ms.max</name>
     <value>200</value>
-    <description>The maximum amount of time, in seconds, to wait before a task asks an AM for
+    <description>The maximum amount of time, in milliseconds, to wait before a task asks an AM for
       another task
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -170,6 +188,10 @@
     <description>Time (in seconds) to wait for AM to come up when trying to submit a DAG from
       the client
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -229,6 +251,9 @@
     <name>tez.yarn.ats.enabled</name>
     <value>true</value>
     <description>Whether to send history events to YARN Application Timeline Server</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ebc05a91/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/TEZ/configuration/tez-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/TEZ/configuration/tez-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/TEZ/configuration/tez-site.xml
index 704022c..3632318 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/TEZ/configuration/tez-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/TEZ/configuration/tez-site.xml
@@ -39,6 +39,10 @@
     <name>tez.am.resource.memory.mb</name>
     <value>1536</value>
     <description>The amount of memory to be used by the AppMaster</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <!-- tez picks the java opts from yarn.app.mapreduce.am.command-opts for MR tasks. Likewise for the AM memory MB -->
@@ -54,6 +58,9 @@
     <description>In case of a ScatterGather connection, the fraction of source tasks which should
       complete before tasks for the current vertex are schedule
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -63,12 +70,19 @@
       completed, all tasks on the current vertex can be scheduled. Number of tasks ready for
       scheduling on the current vertex scales linearly between min-fraction and max-fraction
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.am-rm.heartbeat.interval-ms.max</name>
     <value>250</value>
     <description>The maximum heartbeat interval between the AM and RM in milliseconds</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -78,6 +92,9 @@
       a Vertex. 1.4 with 100% queue available implies generating a number of tasks roughly equal
       to 140% of the available containers on the queue
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -86,6 +103,10 @@
     <description>Lower bound on the size (in bytes) of a grouped split, to avoid generating
       too many splits
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>Bytes</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -94,12 +115,19 @@
     <description>Upper bound on the size (in bytes) of a grouped split, to avoid generating
       excessively large split
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>Bytes</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.container.reuse.enabled</name>
     <value>true</value>
     <description>Configuration to specify whether container should be reused</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -107,6 +135,9 @@
     <value>true</value>
     <description>Whether to reuse containers for rack local tasks. Active only if reuse is enabled
     </description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -114,6 +145,9 @@
     <value>true</value>
     <description>Whether to reuse containers for non-local tasks. Active only if reuse is enabled
     </description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -124,6 +158,10 @@
       it immediately. Only active when reuse is enabled. Set to -1 to never release a container
       in a session
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -132,14 +170,22 @@
     <description>The amount of time to wait before assigning a container to the next level of
       locality. NODE -&gt; RACK -&gt; NON_LOCAL
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.task.get-task.sleep.interval-ms.max</name>
     <value>200</value>
-    <description>The maximum amount of time, in seconds, to wait before a task asks an AM for
+    <description>The maximum amount of time, in milliseconds, to wait before a task asks an AM for
       another task
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -158,6 +204,10 @@
     <description>Time (in seconds) to wait for AM to come up when trying to submit a DAG from
       the client
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -166,6 +216,10 @@
     <description>Time (in seconds) for which the Tez AM should wait for a DAG to be submitted
       before shutting down
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <!-- Configuration for runtime components -->
@@ -175,6 +229,9 @@
     <name>tez.runtime.intermediate-output.should-compress</name>
     <value>false</value>
     <description>Whether intermediate output should be compressed or not</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -189,6 +246,9 @@
     <name>tez.runtime.intermediate-input.is-compressed</name>
     <value>false</value>
     <description>Whether intermediate input is compressed</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -203,6 +263,9 @@
     <name>tez.yarn.ats.enabled</name>
     <value>true</value>
     <description>Whether to send history events to YARN Application Timeline Server</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ebc05a91/ambari-server/src/main/resources/stacks/HDP/2.2/services/TEZ/configuration/tez-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/TEZ/configuration/tez-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/TEZ/configuration/tez-site.xml
index a63cb03..1427a6f 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/TEZ/configuration/tez-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/TEZ/configuration/tez-site.xml
@@ -58,6 +58,7 @@
     </description>
     <value-attributes>
       <type>int</type>
+      <unit>MB</unit>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
@@ -101,6 +102,10 @@
         <name>yarn.scheduler.maximum-allocation-mb</name>
       </property>
     </depends-on>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -133,6 +138,9 @@
     <description>In case of a ScatterGather connection, the fraction of source tasks which should
       complete before tasks for the current vertex are schedule
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -142,12 +150,19 @@
       completed, all tasks on the current vertex can be scheduled. Number of tasks ready for
       scheduling on the current vertex scales linearly between min-fraction and max-fraction
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.am-rm.heartbeat.interval-ms.max</name>
     <value>250</value>
     <description>The maximum heartbeat interval between the AM and RM in milliseconds</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -157,6 +172,9 @@
       a Vertex. 1.7 with 100% queue available implies generating a number of tasks roughly equal
       to 170% of the available containers on the queue
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -165,6 +183,10 @@
     <description>Lower bound on the size (in bytes) of a grouped split, to avoid generating
       too many splits
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>Bytes</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -173,6 +195,10 @@
     <description>Upper bound on the size (in bytes) of a grouped split, to avoid generating
       excessively large split
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>Bytes</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -199,12 +225,20 @@
     <name>tez.am.container.idle.release-timeout-min.millis</name>
     <value>10000</value>
     <description>The minimum amount of time to hold on to a container that is idle. Only active when reuse is enabled.</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.container.idle.release-timeout-max.millis</name>
     <value>20000</value>
     <description>The maximum amount of time to hold on to a container if no task can be assigned to it immediately. Only active when reuse is enabled.</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -213,6 +247,10 @@
     <description>The amount of time to wait before assigning a container to the next level of
       locality. NODE -&gt; RACK -&gt; NON_LOCAL
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -227,12 +265,19 @@
     <description>The maximum number of allowed task attempt failures on a node before
       it gets marked as blacklisted
     </description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.task.am.heartbeat.counter.interval-ms.max</name>
     <value>4000</value>
     <description>Time interval at which task counters are sent to the AM</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -241,12 +286,19 @@
     <description>The maximum amount of time, in seconds, to wait before a task asks an AM for
       another task
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.task.max-events-per-heartbeat</name>
     <value>500</value>
     <description>Maximum number of of events to fetch from the AM by the tasks in a single heartbeat.</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -255,6 +307,10 @@
     <description>Time (in seconds) to wait for AM to come up when trying to submit a DAG from
       the client
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -263,18 +319,28 @@
     <description>Time (in seconds) for which the Tez AM should wait for a DAG to be submitted
       before shutting down
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.counters.max</name>
     <value>5000</value>
     <description>The number of allowed counters for the executing DAG</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.counters.max.groups</name>
     <value>1000</value>
     <description>The number of allowed counter groups for the executing DAG</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <!-- Configuration for runtime components -->
@@ -284,6 +350,9 @@
     <name>tez.runtime.compress</name>
     <value>true</value>
     <description>Whether intermediate data should be compressed or not</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -304,6 +373,10 @@
         <name>tez.task.resource.memory.mb</name>
       </property>
     </depends-on>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -316,6 +389,10 @@
         <name>tez.task.resource.memory.mb</name>
       </property>
     </depends-on>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -331,12 +408,18 @@
     <name>tez.runtime.convert.user-payload.to.history-text</name>
     <value>false</value>
     <description>Whether to publish configuration information to History logger</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.use.cluster.hadoop-libs</name>
     <value>false</value>
     <description>This being true implies that the deployment is relying on hadoop jars being available on the cluster on all nodes.</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ebc05a91/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/configuration/tez-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/configuration/tez-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/configuration/tez-site.xml
index 8c2c6cf..d0ff092 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/configuration/tez-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/configuration/tez-site.xml
@@ -106,12 +106,18 @@
     <name>tez.counters.max</name>
     <value>10000</value>
     <description>The number of allowed counters for the executing DAG</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.counters.max.groups</name>
     <value>3000</value>
     <description>The number of allowed counter groups for the executing DAG</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ebc05a91/ambari-server/src/main/resources/stacks/HDP/2.5/services/TEZ/configuration/tez-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/TEZ/configuration/tez-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/TEZ/configuration/tez-site.xml
index 382025e..fc301b7 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/TEZ/configuration/tez-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/TEZ/configuration/tez-site.xml
@@ -22,6 +22,9 @@
     <value>0.6</value>
     <description>Fraction (0-1) of the available memory which can be used to
       retain shuffled data</description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -30,6 +33,9 @@
     <description>This property determines the maximum size of a shuffle segment
       which can be fetched to memory. Fraction (0-1) of shuffle memory
       (after applying tez.runtime.shuffle.fetch.buffer.percent)</description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ebc05a91/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/TEZ/configuration/tez-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/TEZ/configuration/tez-site.xml b/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/TEZ/configuration/tez-site.xml
index d719322..19e6092 100644
--- a/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/TEZ/configuration/tez-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/TEZ/configuration/tez-site.xml
@@ -42,6 +42,9 @@
     <name>tez.generate.debug.artifacts</name>
     <value>false</value>
     <description>Generate debug artifacts such as a text representation of the submitted DAG plan</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -50,6 +53,10 @@
     <description>The amount of memory to be used by the AppMaster.
       Used only if the value is not specified explicitly by the DAG definition.
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -82,6 +89,10 @@
     <description>The amount of memory to be used by launched tasks.
       Used only if the value is not specified explicitly by the DAG definition.
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -114,6 +125,9 @@
     <description>In case of a ScatterGather connection, the fraction of source tasks which should
       complete before tasks for the current vertex are schedule
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -123,12 +137,19 @@
       completed, all tasks on the current vertex can be scheduled. Number of tasks ready for
       scheduling on the current vertex scales linearly between min-fraction and max-fraction
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.am-rm.heartbeat.interval-ms.max</name>
     <value>250</value>
     <description>The maximum heartbeat interval between the AM and RM in milliseconds</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -138,6 +159,9 @@
       a Vertex. 1.7 with 100% queue available implies generating a number of tasks roughly equal
       to 170% of the available containers on the queue
     </description>
+    <value-attributes>
+      <type>float</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -146,6 +170,10 @@
     <description>Lower bound on the size (in bytes) of a grouped split, to avoid generating
       too many splits
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>Bytes</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -154,6 +182,10 @@
     <description>Upper bound on the size (in bytes) of a grouped split, to avoid generating
       excessively large split
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>Bytes</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -180,12 +212,20 @@
     <name>tez.am.container.idle.release-timeout-min.millis</name>
     <value>10000</value>
     <description>The minimum amount of time to hold on to a container that is idle. Only active when reuse is enabled.</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.container.idle.release-timeout-max.millis</name>
     <value>20000</value>
     <description>The maximum amount of time to hold on to a container if no task can be assigned to it immediately. Only active when reuse is enabled.</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -194,12 +234,19 @@
     <description>The amount of time to wait before assigning a container to the next level of
       locality. NODE -&gt; RACK -&gt; NON_LOCAL
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.am.max.app.attempts</name>
     <value>2</value>
     <description>Specifies the total number of time the app master will run in case recovery is triggered</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -208,12 +255,19 @@
     <description>The maximum number of allowed task attempt failures on a node before
       it gets marked as blacklisted
     </description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.task.am.heartbeat.counter.interval-ms.max</name>
     <value>4000</value>
     <description>Time interval at which task counters are sent to the AM</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -222,12 +276,19 @@
     <description>The maximum amount of time, in seconds, to wait before a task asks an AM for
       another task
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>ms</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.task.max-events-per-heartbeat</name>
     <value>500</value>
-    <description>Maximum number of of events to fetch from the AM by the tasks in a single heartbeat.</description>
+    <description>Maximum number of events to fetch from the AM by the tasks in a single heartbeat.</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -236,6 +297,10 @@
     <description>Time (in seconds) to wait for AM to come up when trying to submit a DAG from
       the client
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -244,18 +309,28 @@
     <description>Time (in seconds) for which the Tez AM should wait for a DAG to be submitted
       before shutting down
     </description>
+    <value-attributes>
+      <type>int</type>
+      <unit>seconds</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.counters.max</name>
     <value>2000</value>
     <description>The number of allowed counters for the executing DAG</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.counters.max.groups</name>
     <value>1000</value>
     <description>The number of allowed counter groups for the executing DAG</description>
+    <value-attributes>
+      <type>int</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <!-- Configuration for runtime components -->
@@ -265,6 +340,9 @@
     <name>tez.runtime.compress</name>
     <value>true</value>
     <description>Whether intermediate data should be compressed or not</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -279,12 +357,20 @@
     <name>tez.runtime.io.sort.mb</name>
     <value>512</value>
     <description>The size of the sort buffer when output needs to be sorted</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
     <name>tez.runtime.unordered.output.buffer.size-mb</name>
     <value>100</value>
     <description>The size of the buffer when output does not require to be sorted</description>
+    <value-attributes>
+      <type>int</type>
+      <unit>MB</unit>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>


[27/50] [abbrv] ambari git commit: AMBARI-19792. Hive View 2.0: Jobs page shows 'Invalid date - Jan 24'. (dipayanb)

Posted by nc...@apache.org.
AMBARI-19792. Hive View 2.0: Jobs page shows 'Invalid date - Jan 24'. (dipayanb)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 318f352252d31e97d9110f0fb5013d006dd0adab
Parents: 1d17baf
Author: Dipayan Bhowmick <di...@gmail.com>
Authored: Thu Feb 2 12:05:14 2017 +0530
Committer: Dipayan Bhowmick <di...@gmail.com>
Committed: Thu Feb 2 12:05:46 2017 +0530

----------------------------------------------------------------------
 .../hive20/src/main/resources/ui/app/app.js     |  9 -------
 .../resources/ui/app/components/jobs-browser.js |  4 ----
 .../main/resources/ui/app/controllers/jobs.js   |  7 +++---
 .../src/main/resources/ui/app/routes/jobs.js    | 25 ++++++++++++--------
 .../app/templates/components/jobs-browser.hbs   |  1 +
 .../src/main/resources/ui/config/environment.js |  2 --
 6 files changed, 20 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/318f3522/contrib/views/hive20/src/main/resources/ui/app/app.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/app.js b/contrib/views/hive20/src/main/resources/ui/app/app.js
index 0f83ee5..af4fdc4 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/app.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/app.js
@@ -26,15 +26,6 @@ let App;
 Ember.MODEL_FACTORY_INJECTIONS = true;
 
 App = Ember.Application.extend({
-  // Basic logging, e.g. "Transitioned into 'post'"
-  LOG_TRANSITIONS: false,
-
-  // Extremely detailed logging, highlighting every internal
-  // step made while transitioning into a route, including
-  // `beforeModel`, `model`, and `afterModel` hooks, and
-  // information about redirects and aborted transitions
-  LOG_TRANSITIONS_INTERNAL: false,
-
   modulePrefix: config.modulePrefix,
   podModulePrefix: config.podModulePrefix,
   Resolver

http://git-wip-us.apache.org/repos/asf/ambari/blob/318f3522/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js b/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
index e3b22e9..b0a82b0 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
@@ -39,10 +39,6 @@ export default Ember.Component.extend({
   actions: {
     setDateRange(startDate, endDate) {
       this.sendAction('filterChanged', startDate, endDate);
-    },
-
-    expandJob(jobId) {
-      console.log("Job to be expanded", jobId);
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/318f3522/contrib/views/hive20/src/main/resources/ui/app/controllers/jobs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/controllers/jobs.js b/contrib/views/hive20/src/main/resources/ui/app/controllers/jobs.js
index 9ab46f3..2ca4474 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/controllers/jobs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/controllers/jobs.js
@@ -26,12 +26,13 @@ export default Ember.Controller.extend({
 
 
   startTimeText: Ember.computed('startTime', function() {
-    return this.get('moment').moment(this.get('startTime')).format('YYYY-MM-DD');
+    let st = typeof(this.get('startTime')) === 'string' ? parseInt(this.get('startTime')) : this.get('startTime');
+    return this.get('moment').moment(st).format('YYYY-MM-DD');
   }),
 
   endTimeText: Ember.computed('endTime', function() {
-    return this.get('moment').moment(this.get('endTime')).format('YYYY-MM-DD');
+    let et = typeof(this.get('endTime')) === 'string' ? parseInt(this.get('endTime')) : this.get('endTime');
+    return this.get('moment').moment(et).format('YYYY-MM-DD');
   })
 
-
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/318f3522/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
index a2ebc25..419fd07 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
@@ -34,22 +34,24 @@ export default Ember.Route.extend({
   model(params) {
     let now = this.get('moment').moment();
     if(Ember.isEmpty(params.startTime) || Ember.isEmpty(params.endTime)) {
-      let initialValue = now.clone();
-      params.endTime = now.valueOf();
-      params.startTime = now.subtract('7', 'days').valueOf();
-      this.set('timeInitializedTo', initialValue);
+      let clone = now.clone();
+      params.endTime = now.endOf('day').valueOf();
+      params.startTime = clone.subtract('7', 'days').startOf('day').valueOf();
+      this.set('startInitTo', params.startTime);
+      this.set('endInitTo', params.endTime);
     }
 
     return this.store.query('job', params);
   },
 
   setupController(controller, model) {
-    if(!Ember.isEmpty(this.get('timeInitializedTo'))) {
+    if(!(Ember.isEmpty(this.get('startInitTo')) || Ember.isEmpty(this.get('endInitTo')))) {
 
-      controller.set('endTime', this.get('timeInitializedTo').valueOf());
-      controller.set('startTime', this.get('timeInitializedTo').subtract('7', 'days').valueOf());
+      controller.set('endTime', this.get('endInitTo'));
+      controller.set('startTime', this.get('startInitTo'));
       //unset timeInitializedTo
-      this.set('timeInitializedTo');
+      this.set('endInitTo');
+      this.set('startInitTo');
     }
 
     this._super(...arguments);
@@ -58,9 +60,12 @@ export default Ember.Route.extend({
 
   actions: {
     dateFilterChanged(startTime, endTime) {
-      this.controller.set('startTime', this.get('moment').moment(startTime, 'YYYY-MM-DD').valueOf())
-      this.controller.set('endTime', this.get('moment').moment(endTime, 'YYYY-MM-DD').valueOf())
+      this.controller.set('startTime', this.get('moment').moment(startTime, 'YYYY-MM-DD').startOf('day').valueOf())
+      this.controller.set('endTime', this.get('moment').moment(endTime, 'YYYY-MM-DD').endOf('day').valueOf())
       this.refresh();
+    },
+    hideDatePicker() {
+      console.log("Hiddennnnn");
     }
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/318f3522/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
index 47b499a..abb4a97 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
@@ -32,6 +32,7 @@
         start=startTime
         end=endTime
         opens="left"
+        autoApply=true
         applyAction=(action "setDateRange")
       }}
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/318f3522/contrib/views/hive20/src/main/resources/ui/config/environment.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/config/environment.js b/contrib/views/hive20/src/main/resources/ui/config/environment.js
index 42dde20..9efd491 100644
--- a/contrib/views/hive20/src/main/resources/ui/config/environment.js
+++ b/contrib/views/hive20/src/main/resources/ui/config/environment.js
@@ -34,8 +34,6 @@ module.exports = function(environment) {
     APP: {
       // Here you can pass flags/options to your application instance
       // when it is created
-      LOG_VIEW_LOOKUPS: false,
-      LOG_ACTIVE_GENERATION: false
     }
   };
 


[07/50] [abbrv] ambari git commit: AMBARI-19814. 'num_llap_nodes' should show up as non-editable property when non-ambari managed queue is selected (onechiporenko)

Posted by nc...@apache.org.
AMBARI-19814. 'num_llap_nodes' should show up as non-editable property when non-ambari managed queue is selected (onechiporenko)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: b55ba18edd107a9439e24aafbe2167a76916b07f
Parents: 4e689af
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Wed Feb 1 11:43:37 2017 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Wed Feb 1 13:15:45 2017 +0200

----------------------------------------------------------------------
 ambari-web/app/mixins.js                        |  1 +
 .../configs/widgets/unique/num_llap_nodes.js    | 70 ++++++++++++++++++++
 .../common/configs/widgets/controls.hbs         |  2 +
 .../configs/service_config_layout_tab_view.js   | 23 ++++++-
 4 files changed, 93 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/mixins.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins.js b/ambari-web/app/mixins.js
index 7b4d6b4..9d833b5 100644
--- a/ambari-web/app/mixins.js
+++ b/ambari-web/app/mixins.js
@@ -53,6 +53,7 @@ require('mixins/wizard/addSecurityConfigs');
 require('mixins/wizard/wizard_menu_view');
 require('mixins/wizard/assign_master_components');
 require('mixins/wizard/wizardHostsLoading');
+require('mixins/common/configs/widgets/unique/num_llap_nodes');
 require('mixins/common/configs/config_recommendations');
 require('mixins/common/configs/config_recommendation_parser');
 require('mixins/common/configs/config_with_override_recommendation_parser');

http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js b/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js
new file mode 100644
index 0000000..a2df0fa
--- /dev/null
+++ b/ambari-web/app/mixins/common/configs/widgets/unique/num_llap_nodes.js
@@ -0,0 +1,70 @@
+/**
+ * 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');
+
+/**
+ * Slider for `num_llap_nodes` should have unique widget
+ *
+ * @type {Em.Mixin}
+ */
+App.NumLlapNodesWidgetMixin = Em.Mixin.create({
+
+  /**
+   * @type {boolean}
+   */
+  readOnly: Em.computed.alias('config.stackConfigProperty.valueAttributes.read_only'),
+
+  /**
+   * @type {boolean}
+   */
+  doNotShowWidget: function () {
+    if (this.get('readOnly')) {
+      return false;
+    }
+    return this.get('isPropertyUndefined') || this.get('config.showAsTextBox');
+  }.property('isPropertyUndefined', 'config.showAsTextBox', 'readOnly'),
+
+  handleReadOnlyAttribute: function () {
+    var readOnly = this.get('readOnly');
+    this.set('disabled', readOnly);
+    this.set('supportSwitchToTextBox', !readOnly);
+    if (readOnly) {
+      this.toggleSlider('disable');
+    }
+  }.observes('readOnly'),
+
+  toggleWidgetView: function() {
+    this._super();
+    var action = !this.get('config.showAsTextBox') && this.get('readOnly') ? 'disable' : 'enable';
+    this.toggleSlider(action);
+  },
+
+  toggleWidgetState: function () {
+    this.set('disabled', !this.get('config.isEditable'));
+  }.observes('config.isEditable'),
+
+  toggleSlider: function (action) {
+    var self = this;
+    Em.run.next(function () {
+      self.get('slider')[action]();
+    });
+  }
+
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/templates/common/configs/widgets/controls.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/controls.hbs b/ambari-web/app/templates/common/configs/widgets/controls.hbs
index 351d8ed..b7aff8e 100644
--- a/ambari-web/app/templates/common/configs/widgets/controls.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/controls.hbs
@@ -33,6 +33,7 @@
   {{/unless}}
 {{/if}}
 {{#if view.canEdit}}
+  {{#unless view.readOnly}}
   <div {{bindAttr class=":widget-config-controls view.referToSelectedGroup::clear-min-height"}}>
     <div {{bindAttr class=":widget-col :left view.config.isNotDefaultValue::hidden"}}>
       <a href="#"
@@ -98,6 +99,7 @@
       {{/if}}
     </div>
   </div>
+  {{/unless}}
 {{/if}}
 
 {{#if controller.selectedConfigGroup.isDefault}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b55ba18e/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
index 30ffadf..466a88d 100644
--- a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
+++ b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
@@ -67,6 +67,10 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
     'test-db-connection': App.TestDbConnectionWidgetView
   },
 
+  configNameWidgetMixinMap: {
+    num_llap_nodes: App.NumLlapNodesWidgetMixin
+  },
+
   /**
    * Prepare configs for render
    * <code>subsection.configs</code> is an array of App.StackConfigProperty, but not App.ConfigProperty,
@@ -108,9 +112,9 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
       if (!configProperty) return;
 
       containerObject.get('configs').pushObject(configProperty);
-      var configWidgetType = Em.get(config, 'widgetType');
-      var widget = self.get('widgetTypeMap')[configWidgetType];
-      Em.assert('Unknown config widget view for config ' + configProperty.get('id') + ' with type ' + configWidgetType, widget);
+
+      var widget = self.getWidgetView(config);
+      Em.assert('Unknown config widget view for config ' + configProperty.get('id') + ' with type ' +  Em.get(config, 'widgetType'), widget);
 
       var additionalProperties = {
         widget: widget,
@@ -161,6 +165,19 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
   },
 
   /**
+   *
+   * @param {object} config
+   * @returns {Em.View}
+   */
+  getWidgetView: function (config) {
+    var configWidgetType = Em.get(config, 'widgetType');
+    var name = Em.get(config, 'name');
+    var mixin = this.get('configNameWidgetMixinMap')[name];
+    var viewClass = this.get('widgetTypeMap')[configWidgetType];
+    return Em.isNone(mixin) ? viewClass : viewClass.extend(mixin);
+  },
+
+  /**
    * changes active subsection tab
    * @param event
    */


[26/50] [abbrv] ambari git commit: AMBARI-19798. Hive View 2.0: Tab switching on in table view broken. (dipayanb)

Posted by nc...@apache.org.
AMBARI-19798. Hive View 2.0: Tab switching on in table view broken. (dipayanb)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 1d17baf9f8cb6f89cc3b2c316b4a5603f1b111d5
Parents: a9ddb2f
Author: Dipayan Bhowmick <di...@gmail.com>
Authored: Thu Feb 2 12:02:12 2017 +0530
Committer: Dipayan Bhowmick <di...@gmail.com>
Committed: Thu Feb 2 12:02:55 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/tabs-item.js    | 20 +-------------------
 .../ui/app/styles/bootstrap-overrides.scss      | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/1d17baf9/contrib/views/hive20/src/main/resources/ui/app/components/tabs-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/tabs-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/tabs-item.js
index e790c55..16dacac 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/tabs-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/tabs-item.js
@@ -32,30 +32,12 @@ export default Ember.Component.extend({
     }
   }),
 
-  didInsertElement: function() {
-    Ember.run.later(() => this.send('changeActiveState'));
-    this.$('a').click(() => {
-      Ember.run.later(() => {
-        this.send('changeActiveState');
-      });
-    });
-  },
 
   actions : {
     selected() {
-      this.get('tabs').forEach((x) => x.set('active', false));
+      this.get('tabs').setEach('active', false);
       this.set('active', true);
       this.sendAction('activate', this.get('tab.link'));
-    },
-
-    changeActiveState: function() {
-      if(this.get('shouldTransition')) {
-        let classes = this.$('a').attr('class').split(' ');
-        if(classes.contains('active')) {
-          this.get('tabs').forEach((x) => x.set('active', false));
-          this.set('active', true);
-        }
-      }
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/1d17baf9/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
index ee9d373..b06db65 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
@@ -35,10 +35,14 @@ $nav-tabs-active-link-hover-border-color:   darken($body-bg, 15%);
 
 .nav-tabs {
   &.inverse {
-    li.active {
+    li {
        a {
-         background-color: $gray-dark;
-         color: #fff;
+         &.active {
+           background-color: $gray-dark;
+           color: #fff;
+           border: 1px solid darken($body-bg, 15%);
+           border-bottom: none;
+         }
        }
     }
   }
@@ -46,6 +50,11 @@ $nav-tabs-active-link-hover-border-color:   darken($body-bg, 15%);
     a {
       font-weight: bold;
       color: darken($body-bg, 50%);
+      &.active {
+        background-color: #fff;
+        border: 1px solid darken($body-bg, 15%);
+        border-bottom: none;
+      }
     }
   }
 }


[48/50] [abbrv] ambari git commit: AMBARI-19851. ambari-server start failed with exit code 1. (aonishuk)

Posted by nc...@apache.org.
AMBARI-19851. ambari-server start failed with exit code 1. (aonishuk)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: f2561c48f71614d56fd747239cdd16bf5a6ef9ea
Parents: 4ad3a2b
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Fri Feb 3 15:03:40 2017 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Fri Feb 3 15:03:40 2017 +0200

----------------------------------------------------------------------
 .../src/main/python/ambari_server/serverConfiguration.py    | 9 +++++++--
 ambari-server/src/main/python/ambari_server/serverSetup.py  | 6 +++---
 2 files changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f2561c48/ambari-server/src/main/python/ambari_server/serverConfiguration.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/serverConfiguration.py b/ambari-server/src/main/python/ambari_server/serverConfiguration.py
index ebd4807..c771b1e 100644
--- a/ambari-server/src/main/python/ambari_server/serverConfiguration.py
+++ b/ambari-server/src/main/python/ambari_server/serverConfiguration.py
@@ -207,6 +207,11 @@ REQUIRED_PROPERTIES = [OS_FAMILY_PROPERTY, OS_TYPE_PROPERTY, COMMON_SERVICES_PAT
                        BOOTSTRAP_SETUP_AGENT_SCRIPT, STACKADVISOR_SCRIPT, BOOTSTRAP_DIR_PROPERTY, PID_DIR_PROPERTY,
                        MPACKS_STAGING_PATH_PROPERTY]
 
+# if these properties are available 'ambari-server setup -s' is not triggered again.
+SETUP_DONE_PROPERTIES = [OS_FAMILY_PROPERTY, OS_TYPE_PROPERTY, JDK_NAME_PROPERTY, JDBC_DATABASE_PROPERTY,
+                         NR_USER_PROPERTY, PERSISTENCE_TYPE_PROPERTY
+]
+
 def get_conf_dir():
   try:
     conf_dir = os.environ[AMBARI_CONF_VAR]
@@ -1461,9 +1466,9 @@ def get_server_temp_location(properties):
     server_tmp_dir = configDefaults.SERVER_TMP_DIR_DEFAULT
   return server_tmp_dir
 
-def get_missing_properties(properties):
+def get_missing_properties(properties, property_set=REQUIRED_PROPERTIES):
   missing_propertiers = []
-  for property in REQUIRED_PROPERTIES:
+  for property in property_set:
     value = properties[property]
     if not value:
       missing_propertiers.append(property)

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2561c48/ambari-server/src/main/python/ambari_server/serverSetup.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/serverSetup.py b/ambari-server/src/main/python/ambari_server/serverSetup.py
index adb5885..8a06034 100644
--- a/ambari-server/src/main/python/ambari_server/serverSetup.py
+++ b/ambari-server/src/main/python/ambari_server/serverSetup.py
@@ -37,11 +37,11 @@ from ambari_commons.os_utils import copy_files, run_os_command, is_root
 from ambari_commons.str_utils import compress_backslashes
 from ambari_server.dbConfiguration import DBMSConfigFactory, TAR_GZ_ARCHIVE_TYPE, default_connectors_map, check_jdbc_drivers
 from ambari_server.serverConfiguration import configDefaults, JDKRelease, \
-  get_ambari_properties, get_is_secure, get_is_persisted, get_java_exe_path, get_JAVA_HOME, \
+  get_ambari_properties, get_is_secure, get_is_persisted, get_java_exe_path, get_JAVA_HOME, get_missing_properties, \
   get_resources_location, get_value_from_properties, read_ambari_user, update_properties, validate_jdk, write_property, \
   JAVA_HOME, JAVA_HOME_PROPERTY, JCE_NAME_PROPERTY, JDBC_RCA_URL_PROPERTY, JDBC_URL_PROPERTY, \
   JDK_NAME_PROPERTY, JDK_RELEASES, NR_USER_PROPERTY, OS_FAMILY, OS_FAMILY_PROPERTY, OS_TYPE, OS_TYPE_PROPERTY, OS_VERSION, \
-  VIEWS_DIR_PROPERTY, JDBC_DATABASE_PROPERTY, JDK_DOWNLOAD_SUPPORTED_PROPERTY, JCE_DOWNLOAD_SUPPORTED_PROPERTY
+  VIEWS_DIR_PROPERTY, JDBC_DATABASE_PROPERTY, JDK_DOWNLOAD_SUPPORTED_PROPERTY, JCE_DOWNLOAD_SUPPORTED_PROPERTY, SETUP_DONE_PROPERTIES
 from ambari_server.serverUtils import is_server_runing
 from ambari_server.setupSecurity import adjust_directory_permissions
 from ambari_server.userInput import get_YN_input, get_validated_string_input
@@ -1082,7 +1082,7 @@ def check_setup_already_done():
     print_error_msg("Error getting ambari properties")
     return -1
 
-  return properties.get_property(JDK_NAME_PROPERTY) and properties.get_property(JDBC_DATABASE_PROPERTY)
+  return not bool(get_missing_properties(properties, property_set=SETUP_DONE_PROPERTIES))
 
 #
 # Setup the Ambari Server.


[19/50] [abbrv] ambari git commit: AMBARI-19789. Hive LLAP and Hive2 log4j changes should be removed from upgrade packs hdp 2.3 and hdp 2.4 (Madhuvanthi Radhakrishnan via smohanty)

Posted by nc...@apache.org.
AMBARI-19789. Hive LLAP and Hive2 log4j changes should be removed from upgrade packs hdp 2.3 and hdp 2.4 (Madhuvanthi Radhakrishnan via smohanty)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: f36af3da4598db52b2e67fd22c85b5d5a436c00c
Parents: 0458add
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Feb 1 13:56:13 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Feb 1 13:56:13 2017 -0800

----------------------------------------------------------------------
 .../stacks/HDP/2.3/upgrades/config-upgrade.xml  | 27 ------------------
 .../HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml | 18 +-----------
 .../HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml | 18 ------------
 .../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml | 17 -----------
 .../stacks/HDP/2.3/upgrades/upgrade-2.4.xml     | 14 +--------
 .../stacks/HDP/2.3/upgrades/upgrade-2.5.xml     | 14 +--------
 .../stacks/HDP/2.3/upgrades/upgrade-2.6.xml     | 14 +--------
 .../stacks/HDP/2.4/upgrades/config-upgrade.xml  | 30 +-------------------
 .../HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml | 20 +------------
 .../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml | 18 +-----------
 .../stacks/HDP/2.4/upgrades/upgrade-2.5.xml     | 14 +--------
 .../stacks/HDP/2.4/upgrades/upgrade-2.6.xml     | 13 +--------
 12 files changed, 9 insertions(+), 208 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
index 238f3be..f96b246 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml
@@ -195,33 +195,6 @@
             <regex-replace key="content" find="#log4j.appender.DRFA.MaxBackupIndex=([0-9]+)" replace-with="#log4j.appender.DRFA.MaxBackupIndex={{hive_log_maxbackupindex}}"/>
             <replace key="content" find="log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender" replace-with="log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender&#xA;log4j.appender.DRFA.MaxFileSize = {{hive_log_maxfilesize}}MB"/>
           </definition>
-          <definition xsi:type="configure" id="hive_llap_log4j_parameterize" summary="Parameterizing Hive llap Log4J Properties">
-            <type>llap-daemon-log4j</type>
-            <set key="hive_llap_log_maxfilesize" value="256"/>
-            <set key = "hive_llap_log_maxbackupindex" value="240"/>
-            <regex-replace key="content" find="property.llap.daemon.log.maxfilesize = ([0-9]+)MB" replace-with="property.llap.daemon.log.maxfilesize = {{hive_llap_log_maxfilesize}}MB"/>
-            <regex-replace key="content" find="property.llap.daemon.log.maxbackupindex = ([0-9]+)" replace-with="property.llap.daemon.log.maxbackupindex = {{hive_llap_log_maxbackupindex}}"/>
-          </definition>
-        </changes>
-      </component>
-
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <changes>
-          <definition xsi:type="configure" id="hive_log4j2_parameterize" summary="Parameterizing Hive Log4J2 Properties">
-            <type>hive-log4j2</type>
-            <set key="hive2_log_maxfilesize" value="256"/>
-            <set key = "hive2_log_maxbackupindex" value="30"/>
-            <regex-replace key="content" find="appender.DRFA.strategy.max = ([0-9]+)" replace-with="appender.DRFA.strategy.max = {{hive2_log_maxbackupindex}}"/>
-            <replace key="content" find="appender.DRFA.strategy.type = DefaultRolloverStrategy" replace-with="appender.DRFA.strategy.type = DefaultRolloverStrategy&#xA;appender.DRFA.policies.fsize.type = SizeBasedTriggeringPolicy&#xA;appender.DRFA.policies.fsize.size = {{hive2_log_maxfilesize}}MB"/>
-          </definition>
-
-          <definition xsi:type="configure" id="llap_cli_log4j2_parameterize" summary="Parameterizing LLAP Cli Log4J2 Properties">
-            <type>llap-cli-log4j2</type>
-            <set key="llap_cli_log_maxfilesize" value="256"/>
-            <set key = "llap_cli_log_maxbackupindex" value="30"/>
-            <regex-replace key="content" find="appender.DRFA.strategy.max = ([0-9]+)" replace-with="appender.DRFA.strategy.max = {{llap_cli_log_maxbackupindex}}"/>
-            <replace key="content" find="appender.DRFA.strategy.type = DefaultRolloverStrategy" replace-with="appender.DRFA.strategy.type = DefaultRolloverStrategy&#xA;appender.DRFA.policies.fsize.type = SizeBasedTriggeringPolicy&#xA;appender.DRFA.policies.fsize.size = {{llap_cli_log_maxfilesize}}MB"/>
-          </definition>
         </changes>
       </component>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
index 9e13036..52421d9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
@@ -323,11 +323,7 @@
           <summary>Updating the Hive Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
-      <execute-stage service="HIVE" component="HIVE_SERVER" title="Parameterizing Hive LLAP Log4J Properties">
-        <task xsi:type="configure" id="hive_llap_log4j_parameterize">
-          <summary>Updating the Hive llap Log4J properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
+
       <execute-stage service="HIVE" component="WEBHCAT_SERVER" title="Parameterizing WebHCat Log4J Properties">
         <task xsi:type="configure" id="webhcat_log4j_parameterize">
           <summary>Updating the Webhcat Log4J properties to include parameterizations</summary>
@@ -338,18 +334,6 @@
         <task xsi:type="configure" id="hdp_2_4_0_0_hive_server_configure_authentication"/>
       </execute-stage>
 
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing LLAP Cli Log4J2 Properties">
-        <task xsi:type="configure" id="llap_cli_log4j2_parameterize">
-          <summary>Updating the LLAP Cli Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing Hive Log4J2 Properties">
-        <task xsi:type="configure" id="hive_log4j2_parameterize">
-          <summary>Updating the Hive Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
       <!--OOZIE-->
       <execute-stage service="OOZIE" component="OOZIE_SERVER" title="Apply config changes for Oozie Server">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.OozieConfigCalculation">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml
index a3407e0..280000d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml
@@ -368,24 +368,6 @@
         </task>
       </execute-stage>
 
-      <execute-stage service="HIVE" component="HIVE_SERVER" title="Parameterizing Hive LLAP Log4J Properties">
-        <task xsi:type="configure" id="hive_llap_log4j_parameterize">
-          <summary>Updating the Hive llap Log4J properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing LLAP Cli Log4J2 Properties">
-        <task xsi:type="configure" id="llap_cli_log4j2_parameterize">
-          <summary>Updating the LLAP Cli Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing Hive Log4J2 Properties">
-        <task xsi:type="configure" id="hive_log4j2_parameterize">
-          <summary>Updating the Hive Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
       <execute-stage service="HIVE" component="WEBHCAT_SERVER" title="Parameterizing WebHCat Log4J Properties">
         <task xsi:type="configure" id="webhcat_log4j_parameterize">
           <summary>Updating the Webhcat Log4J properties to include parameterizations</summary>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml
index 2beb708..2bb2a72 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml
@@ -399,23 +399,6 @@
           <summary>Updating the Hive Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
-      <execute-stage service="HIVE" component="HIVE_SERVER" title="Parameterizing Hive LLAP Log4J Properties">
-        <task xsi:type="configure" id="hive_llap_log4j_parameterize">
-          <summary>Updating the Hive llap Log4J properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing LLAP Cli Log4J2 Properties">
-        <task xsi:type="configure" id="llap_cli_log4j2_parameterize">
-          <summary>Updating the LLAP Cli Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing Hive Log4J2 Properties">
-        <task xsi:type="configure" id="hive_log4j2_parameterize">
-          <summary>Updating the Hive Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
 
       <!--OOZIE-->
       <execute-stage service="OOZIE" component="OOZIE_SERVER" title="Apply config changes for Oozie Server">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
index 57f7984..b662b28 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
@@ -755,8 +755,7 @@
         <pre-upgrade>
           <task xsi:type="configure" id="hdp_2_4_0_0_hive_server_configure_authentication"/>
           <task xsi:type="configure" id="hive_log4j_parameterize" />
-          <task xsi:type="configure" id="hive_llap_log4j_parameterize" />
-        </pre-upgrade>
+         </pre-upgrade>
 
         <pre-downgrade/>
 
@@ -789,17 +788,6 @@
           <task xsi:type="restart-task" />
         </upgrade>
       </component>
-
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hive_log4j2_parameterize"/>
-          <task xsi:type="configure" id="llap_cli_log4j2_parameterize"/>
-        </pre-upgrade>
-        <pre-downgrade/>
-        <upgrade>
-	   <task xsi:type="restart-task" />
-        </upgrade>
-      </component>
     </service>
 
     <service name="SLIDER">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
index 6d45362..b53ff23 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
@@ -875,7 +875,6 @@
           <task xsi:type="configure" id="hdp_2_4_0_0_hive_server_configure_authentication"/>
           <task xsi:type="configure" id="hdp_2_5_0_0_remove_ranger_hive_audit_db" />
           <task xsi:type="configure" id="hive_log4j_parameterize" />
-          <task xsi:type="configure" id="hive_llap_log4j_parameterize" />
 
           <!-- Remove Atlas configs that were incorrectly added to hive-site instead of Atlas' application.properties. -->
           <task xsi:type="configure" id="hdp_2_5_0_0_remove_hive_atlas_configs" />
@@ -916,18 +915,7 @@
           <task xsi:type="restart-task" />
         </upgrade>
       </component>
-
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hive_log4j2_parameterize"/>
-          <task xsi:type="configure" id="llap_cli_log4j2_parameterize"/>
-        </pre-upgrade>
-        <pre-downgrade/>
-        <upgrade>
-	  <task xsi:type="restart-task" />
-        </upgrade>
-      </component>
-    </service>
+   </service>
 
     <service name="SLIDER">
       <component name="SLIDER">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
index 24bf816..290d3c5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
@@ -888,7 +888,6 @@
             <summary>Update hive-env content</summary>
           </task>
           <task xsi:type="configure" id="hive_log4j_parameterize" />
-          <task xsi:type="configure" id="hive_llap_log4j_parameterize" />
         </pre-upgrade>
 
         <pre-downgrade/>
@@ -922,18 +921,7 @@
           <task xsi:type="restart-task" />
         </upgrade>
       </component>
-
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hive_log4j2_parameterize"/>
-          <task xsi:type="configure" id="llap_cli_log4j2_parameterize"/>
-        </pre-upgrade>
-        <pre-downgrade/>
-        <upgrade>
-	<task xsi:type="restart-task" />
-        </upgrade>
-      </component>
-    </service>
+   </service>
 
     <service name="SLIDER">
       <component name="SLIDER">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
index b929539..4c17177 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml
@@ -96,35 +96,7 @@
             <regex-replace key="content" find="#log4j.appender.DRFA.MaxBackupIndex=([0-9]+)" replace-with="#log4j.appender.DRFA.MaxBackupIndex={{hive_log_maxbackupindex}}"/>
             <replace key="content" find="log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender" replace-with="log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender&#xA;log4j.appender.DRFA.MaxFileSize = {{hive_log_maxfilesize}}MB"/>
           </definition>
-          <definition xsi:type="configure" id="hive_llap_log4j_parameterize" summary="Parameterizing Hive llap Log4J Properties">
-            <type>llap-daemon-log4j</type>
-            <set key="hive_llap_log_maxfilesize" value="256"/>
-            <set key = "hive_llap_log_maxbackupindex" value="240"/>
-            <regex-replace key="content" find="property.llap.daemon.log.maxfilesize = ([0-9]+)MB" replace-with="property.llap.daemon.log.maxfilesize = {{hive_llap_log_maxfilesize}}MB"/>
-            <regex-replace key="content" find="property.llap.daemon.log.maxbackupindex = ([0-9]+)" replace-with="property.llap.daemon.log.maxbackupindex = {{hive_llap_log_maxbackupindex}}"/>
-          </definition>
-        </changes>
-      </component>
-
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <changes>
-          <definition xsi:type="configure" id="hive_log4j2_parameterize" summary="Parameterizing Hive Log4J2 Properties">
-            <type>hive-log4j2</type>
-            <set key="hive2_log_maxfilesize" value="256"/>
-            <set key = "hive2_log_maxbackupindex" value="30"/>
-            <regex-replace key="content" find="appender.DRFA.strategy.max = ([0-9]+)" replace-with="appender.DRFA.strategy.max = {{hive2_log_maxbackupindex}}"/>
-            <replace key="content" find="appender.DRFA.strategy.type = DefaultRolloverStrategy" replace-with="appender.DRFA.strategy.type = DefaultRolloverStrategy&#xA;appender.DRFA.policies.fsize.type = SizeBasedTriggeringPolicy&#xA;appender.DRFA.policies.fsize.size = {{hive2_log_maxfilesize}}MB"/>
-          </definition>
-
-          <definition xsi:type="configure" id="llap_cli_log4j2_parameterize" summary="Parameterizing LLAP Cli Log4J2 Properties">
-            <type>llap-cli-log4j2</type>
-            <set key="llap_cli_log_maxfilesize" value="256"/>
-            <set key = "llap_cli_log_maxbackupindex" value="30"/>
-            <regex-replace key="content" find="appender.DRFA.strategy.max = ([0-9]+)" replace-with="appender.DRFA.strategy.max = {{llap_cli_log_maxbackupindex}}"/>
-            <replace key="content" find="appender.DRFA.strategy.type = DefaultRolloverStrategy" replace-with="appender.DRFA.strategy.type = DefaultRolloverStrategy&#xA;appender.DRFA.policies.fsize.type = SizeBasedTriggeringPolicy&#xA;appender.DRFA.policies.fsize.size = {{llap_cli_log_maxfilesize}}MB"/>
-          </definition>
-
-        </changes>
+         </changes>
       </component>
 
       <component name="WEBHCAT_SERVER">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml
index 67e9314..f093cb1 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml
@@ -429,31 +429,13 @@
         </task>
       </execute-stage>
 
-      <execute-stage service="HIVE" component="HIVE_SERVER" title="Parameterizing Hive LLAP Log4J Properties">
-        <task xsi:type="configure" id="hive_llap_log4j_parameterize">
-          <summary>Updating the Hive llap Log4J properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
       <execute-stage service="HIVE" component="WEBHCAT_SERVER" title="Parameterizing WebHCat Log4J Properties">
         <task xsi:type="configure" id="webhcat_log4j_parameterize">
           <summary>Updating the Webhcat Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
 
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing LLAP Cli Log4J2 Properties">
-        <task xsi:type="configure" id="llap_cli_log4j2_parameterize">
-          <summary>Updating the LLAP Cli Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing Hive Log4J2 Properties">
-        <task xsi:type="configure" id="hive_log4j2_parameterize">
-          <summary>Updating the Hive Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <!-- HBASE -->
+     <!-- HBASE -->
       <execute-stage service="HBASE" component="HBASE_MASTER" title="Apply config changes for Hbase Master">
         <task xsi:type="configure" id="hdp_2_5_0_0_remove_ranger_hbase_audit_db"/>
       </execute-stage>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml
index 0344236..ea3de50 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml
@@ -438,29 +438,13 @@
           <summary>Updating the Hive Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
-      <execute-stage service="HIVE" component="HIVE_SERVER" title="Parameterizing Hive LLAP Log4J Properties">
-        <task xsi:type="configure" id="hive_llap_log4j_parameterize">
-          <summary>Updating the Hive llap Log4J properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
+
       <execute-stage service="HIVE" component="WEBHCAT_SERVER" title="Parameterizing WebHCat Log4J Properties">
         <task xsi:type="configure" id="webhcat_log4j_parameterize">
           <summary>Updating the Webhcat Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
 
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing LLAP Cli Log4J2 Properties">
-        <task xsi:type="configure" id="llap_cli_log4j2_parameterize">
-          <summary>Updating the LLAP Cli Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_SERVER_INTERACTIVE" title="Parameterizing Hive Log4J2 Properties">
-        <task xsi:type="configure" id="hive_log4j2_parameterize">
-          <summary>Updating the Hive Log4J2 properties to include parameterizations</summary>
-        </task>
-      </execute-stage>
-
       <!-- HBASE -->
       <execute-stage service="HBASE" component="HBASE_MASTER" title="Apply config changes for Hbase Master">
         <task xsi:type="configure" id="hdp_2_5_0_0_remove_ranger_hbase_audit_db"/>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
index 1ee9ea2..2a3e6b2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
@@ -876,7 +876,6 @@
             <summary>Update hive-env content</summary>
           </task>
           <task xsi:type="configure" id="hive_log4j_parameterize" />
-          <task xsi:type="configure" id="hive_llap_log4j_parameterize" />
         </pre-upgrade>
 
         <pre-downgrade/>
@@ -907,18 +906,7 @@
           <task xsi:type="restart-task" />
         </upgrade>
       </component>
-
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hive_log4j2_parameterize"/>
-          <task xsi:type="configure" id="llap_cli_log4j2_parameterize"/>
-        </pre-upgrade>
-        <pre-downgrade/>
-        <upgrade>
-	<task xsi:type="restart-task" />
-        </upgrade>
-      </component>
-    </service>
+     </service>
 
     <service name="SLIDER">
       <component name="SLIDER">

http://git-wip-us.apache.org/repos/asf/ambari/blob/f36af3da/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
index 04d8d6e..5371d3e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
@@ -886,7 +886,6 @@
             <summary>Update hive-env content</summary>
           </task>
           <task xsi:type="configure" id="hive_log4j_parameterize" />
-          <task xsi:type="configure" id="hive_llap_log4j_parameterize" />
 
         </pre-upgrade>
 
@@ -919,17 +918,7 @@
         </upgrade>
       </component>
 
-      <component name="HIVE_SERVER_INTERACTIVE">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hive_log4j2_parameterize"/>
-          <task xsi:type="configure" id="llap_cli_log4j2_parameterize"/>
-        </pre-upgrade>
-        <pre-downgrade/>
-        <upgrade>
-	<task xsi:type="restart-task" />
-        </upgrade>
-      </component>
-    </service>
+   </service>
 
     <service name="SLIDER">
       <component name="SLIDER">


[38/50] [abbrv] ambari git commit: AMBARI-19746 Ambari HDFS Metric alerts turns to UNKNOWN status with error "argument of type 'NoneType' is not iterable" (dsen)

Posted by nc...@apache.org.
AMBARI-19746 Ambari HDFS Metric alerts turns to UNKNOWN status with error "argument of type 'NoneType' is not iterable" (dsen)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 5d4d99efbd1a7de059c1257c09b396b90bade83e
Parents: f297c48
Author: Dmytro Sen <ds...@apache.org>
Authored: Thu Feb 2 20:12:30 2017 +0200
Committer: Dmytro Sen <ds...@apache.org>
Committed: Thu Feb 2 20:12:30 2017 +0200

----------------------------------------------------------------------
 .../src/main/python/ambari_agent/ActionQueue.py  |  5 +++++
 .../ambari_commons/ambari_metrics_helper.py      | 19 +++++++++++++------
 2 files changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5d4d99ef/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/ActionQueue.py b/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
index 8514a88..5300b52 100644
--- a/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
+++ b/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
@@ -36,6 +36,7 @@ from CommandStatusDict import CommandStatusDict
 from CustomServiceOrchestrator import CustomServiceOrchestrator
 from ambari_agent.BackgroundCommandExecutionHandle import BackgroundCommandExecutionHandle
 from ambari_commons.str_utils import split_on_chunks
+from resource_management.libraries.script import Script
 
 
 logger = logging.getLogger()
@@ -549,6 +550,10 @@ class ActionQueue(threading.Thread):
       else:
         globalConfig = {}
 
+      if not Script.config :
+        logger.debug('Setting Script.config to last status command configuration')
+        Script.config = command
+
       livestatus = LiveStatus(cluster, service, component,
                               globalConfig, self.config, self.configTags)
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5d4d99ef/ambari-common/src/main/python/ambari_commons/ambari_metrics_helper.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/ambari_metrics_helper.py b/ambari-common/src/main/python/ambari_commons/ambari_metrics_helper.py
index 7841bde..6444dfd 100644
--- a/ambari-common/src/main/python/ambari_commons/ambari_metrics_helper.py
+++ b/ambari-common/src/main/python/ambari_commons/ambari_metrics_helper.py
@@ -24,7 +24,6 @@ from resource_management.libraries.functions import conf_select
 
 DEFAULT_COLLECTOR_SUFFIX = '.sink.timeline.collector.hosts'
 DEFAULT_METRICS2_PROPERTIES_FILE_NAME = 'hadoop-metrics2.properties'
-DEFAULT_HADOOP_CONF_DIR_PATH = '/usr/hdp/current/hadoop-client/conf/'
 
 def select_metric_collector_for_sink(sink_name):
   # TODO check '*' sink_name
@@ -46,10 +45,18 @@ def get_metric_collectors_from_properties_file(sink_name):
   try:
     hadoop_conf_dir = conf_select.get_hadoop_conf_dir()
   except Exception as e:
-    print "Can't get hadoop conf directory from conf_select.get_hadoop_conf_dir() - " + str(e)
-    hadoop_conf_dir = DEFAULT_HADOOP_CONF_DIR_PATH
-  props = load_properties_from_file(os.path.join(hadoop_conf_dir, DEFAULT_METRICS2_PROPERTIES_FILE_NAME))
-  return props.get(sink_name + DEFAULT_COLLECTOR_SUFFIX)
+    raise Exception("Couldn't define hadoop_conf_dir: {0}".format(e))
+  properties_filepath = os.path.join(hadoop_conf_dir, DEFAULT_METRICS2_PROPERTIES_FILE_NAME)
+
+  if not os.path.exists(properties_filepath):
+    raise Exception("Properties file doesn't exist : {0}. Can't define metric collector hosts".format(properties_filepath))
+  props = load_properties_from_file(properties_filepath)
+
+  property_key = sink_name + DEFAULT_COLLECTOR_SUFFIX
+  if property_key in props:
+    return props.get(property_key)
+  else:
+    raise Exception("Properties file doesn't contain {0}. Can't define metric collector hosts".format(property_key))
 
 def load_properties_from_file(filepath, sep='=', comment_char='#'):
   """
@@ -64,4 +71,4 @@ def load_properties_from_file(filepath, sep='=', comment_char='#'):
         key = key_value[0].strip()
         value = sep.join(key_value[1:]).strip('" \t')
         props[key] = value
-  return props
+  return props
\ No newline at end of file


[36/50] [abbrv] ambari git commit: AMBARI-19849. Recent workflows in Workflow designer should be in descending order of time of updation (Venkata Sairam via pallavkul)

Posted by nc...@apache.org.
AMBARI-19849. Recent workflows in Workflow designer should be in descending order of time of updation (Venkata Sairam via pallavkul)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 98608ce71594a10338b42f41f127ac5e797876ca
Parents: ce82235
Author: pallavkul <pa...@gmail.com>
Authored: Thu Feb 2 23:10:35 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Thu Feb 2 23:10:35 2017 +0530

----------------------------------------------------------------------
 .../src/main/resources/ui/app/components/designer-workspace.js  | 5 +++--
 .../wfmanager/src/main/resources/ui/app/components/drafts-wf.js | 3 ++-
 2 files changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/98608ce7/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
index 16fca55..0b689b0 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
@@ -169,8 +169,9 @@ export default Ember.Component.extend({
   generateTabId(){
     return 'tab-'+ Math.ceil(Math.random() * 100000);
   },
-  recentFilesSorted: Ember.computed.sort("recentFiles", "['updatedAt:desc']"),
-  projList:Ember.computed("recentFilesSorted", function() {
+  sortProp: ['updatedAt:desc'],
+  recentFilesSorted: Ember.computed.sort("recentFiles", "sortProp"),
+  projList: Ember.computed("recentFilesSorted", function() {
      return this.get("recentFilesSorted").slice(0, 10);
   }),
   actions : {

http://git-wip-us.apache.org/repos/asf/ambari/blob/98608ce7/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
index 02483d4..33533db 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/drafts-wf.js
@@ -23,6 +23,7 @@ export default Ember.Component.extend({
   "isBundle": true,
   "isCoordinator": true,
   "isWorkflow": true,
+  "sortProp": ['updatedAt:desc'],
   "filteredModels": Ember.computed("model", "search", "isBundle", "isCoordinator", "isWorkflow", function(){
 	Ember.run.later(()=>{
       this.$('.actions').hide();
@@ -61,7 +62,7 @@ export default Ember.Component.extend({
 	  return eval(condition);
 	});
   }),
-  modelSorted : Ember.computed.sort("filteredModels", "['updatedAt:desc']"),
+  modelSorted : Ember.computed.sort("filteredModels", "sortProp"),
   "isDeleteDraftConformation": false,
   "currentDraft": undefined,
   "deleteInProgress": false,


[05/50] [abbrv] ambari git commit: AMBARI-19791 Log Search "Preview" should have a "Select for Copy" button (mgergely)

Posted by nc...@apache.org.
AMBARI-19791 Log Search "Preview" should have a "Select for Copy" button (mgergely)

Change-Id: I99b2b10d83d2f2f4cb88637721bfd32a23668b44


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: c4f59ef71dad456538818f0392c229fd381e62b4
Parents: 8ece8aa
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Wed Feb 1 10:49:43 2017 +0100
Committer: Miklos Gergely <mg...@hortonworks.com>
Committed: Wed Feb 1 10:49:43 2017 +0100

----------------------------------------------------------------------
 .../webapp/scripts/views/tabs/LogFileView.js    | 47 +++++++++++++++-----
 1 file changed, 37 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c4f59ef7/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
index 57d4acd..c7e1cba 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/LogFileView.js
@@ -352,16 +352,16 @@ define(['require',
                 });
             },
             getIdRowForTableLayout : function(){
-            	var IdRow =  Backgrid.Row.extend({
-				    render: function() {
-				        IdRow.__super__.render.apply(this, arguments);
-				        if (this.model.has("id")) {
-				            this.$el.attr("data-id", this.model.get('id'));
-				        }
-				        return this;
-				    }
-				});
-            	return IdRow;
+                var IdRow =  Backgrid.Row.extend({
+                    render: function() {
+                        IdRow.__super__.render.apply(this, arguments);
+                        if (this.model.has("id")) {
+                            this.$el.attr("data-id", this.model.get('id'));
+                        }
+                        return this;
+                    }
+                });
+            return IdRow;
             },
             renderTableLikeLogFile: function() {
                 var that = this;
@@ -821,6 +821,33 @@ define(['require',
                         click: function() {
                             that.onDialogClosed();
                         }
+                    },
+                    {
+                        id: "copyBtn",
+                        text: "Select for Copy",
+                        "class": "btn btn-default",
+                        click: function() {
+                            if ($('.logsContainer-clipboard').length != 0)
+                                return;
+                            
+                            var logElement = $(".logsContainer");
+                            var logElementRect = logElement[0].getBoundingClientRect();
+                            logElement.css("display", "none");
+                            
+                            var text = '';
+                            logElement.find('div').each(function(){
+                                text += this.innerText + '\n';
+                            });
+                            
+                            var textarea = $('<textarea class="logsContainer-clipboard"></textarea>');
+                            $(".logsDetail").append(textarea);
+                            textarea
+                            .text(text)
+                            .css('display', 'block')
+                            .width(logElementRect.width)
+                            .height(logElementRect.height)
+                            .select();
+                        }
                     }]
                 };
                 var dialog = that.dialog = new JBDialog(opts).render();


[04/50] [abbrv] ambari git commit: AMBARI-19740 Ambari upgrade to Ambari 2.5 causes start DB check failure on Zeppelin configs (r-kamath)

Posted by nc...@apache.org.
AMBARI-19740 Ambari upgrade to Ambari 2.5 causes start DB check failure on Zeppelin configs (r-kamath)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 8ece8aa6cd91f3abad4f1ec3c72a5320fb1278cc
Parents: 0dfe8b6
Author: Renjith Kamath <re...@gmail.com>
Authored: Wed Feb 1 14:46:43 2017 +0530
Committer: Renjith Kamath <re...@gmail.com>
Committed: Wed Feb 1 14:46:43 2017 +0530

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog250.java       | 27 ++++++++++++++++++++
 .../server/upgrade/UpgradeCatalog250Test.java   |  5 ++++
 2 files changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8ece8aa6/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
index 6c90262..71cde7e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog250.java
@@ -164,6 +164,7 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
     updateTEZInteractiveConfigs();
     updateHiveLlapConfigs();
     updateTablesForZeppelinViewRemoval();
+    updateZeppelinConfigs();
     updateAtlasConfigs();
     updateLogSearchConfigs();
     updateAmbariInfraConfigs();
@@ -351,6 +352,32 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
     dbAccessor.executeQuery("DELETE from viewparameter WHERE view_name='ZEPPELIN{1.0.0}'", true);
   }
 
+  /**
+   * Updates Zeppelin configs.
+   *
+   * @throws AmbariException
+   */
+  protected void updateZeppelinConfigs() throws AmbariException {
+    AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
+    Clusters clusters = ambariManagementController.getClusters();
+    if (clusters != null) {
+      Map<String, Cluster> clusterMap = clusters.getClusters();
+
+      if (clusterMap != null && !clusterMap.isEmpty()) {
+        for (final Cluster cluster : clusterMap.values()) {
+          Config zeppelinEnvProperties = cluster.getDesiredConfigByType("zeppelin-env");
+          if (zeppelinEnvProperties != null) {
+            String log4jPropertiesContent = zeppelinEnvProperties.getProperties().get("log4j_properties_content");
+            String shiroIniContent = zeppelinEnvProperties.getProperties().get("shiro_ini_content");
+
+            updateConfigurationProperties("zeppelin-log4j-properties", Collections.singletonMap("log4j_properties_content", log4jPropertiesContent), true, true);
+            updateConfigurationProperties("zeppelin-shiro-ini", Collections.singletonMap("shiro_ini_content", shiroIniContent), true, true);
+          }
+        }
+      }
+    }
+  }
+
   protected String updateAmsEnvContent(String content) {
     if (content == null) {
       return null;

http://git-wip-us.apache.org/repos/asf/ambari/blob/8ece8aa6/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
index 725928b..1cabe47 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog250Test.java
@@ -281,6 +281,7 @@ public class UpgradeCatalog250Test {
     Method addManageServiceAutoStartPermissions = UpgradeCatalog250.class.getDeclaredMethod("addManageServiceAutoStartPermissions");
     Method addNewConfigurationsFromXml = AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml");
     Method updateTablesForZeppelinViewRemoval = UpgradeCatalog250.class.getDeclaredMethod("updateTablesForZeppelinViewRemoval");
+    Method updateZeppelinConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateZeppelinConfigs");
     Method updateAtlasConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateAtlasConfigs");
     Method updateLogSearchConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateLogSearchConfigs");
     Method updateAmbariInfraConfigs = UpgradeCatalog250.class.getDeclaredMethod("updateAmbariInfraConfigs");
@@ -297,6 +298,7 @@ public class UpgradeCatalog250Test {
         .addMockedMethod(updateHIVEInteractiveConfigs)
         .addMockedMethod(updateTEZInteractiveConfigs)
         .addMockedMethod(updateTablesForZeppelinViewRemoval)
+        .addMockedMethod(updateZeppelinConfigs)
         .addMockedMethod(updateAtlasConfigs)
         .addMockedMethod(updateLogSearchConfigs)
         .addMockedMethod(updateAmbariInfraConfigs)
@@ -328,6 +330,9 @@ public class UpgradeCatalog250Test {
     upgradeCatalog250.updateTablesForZeppelinViewRemoval();
     expectLastCall().once();
 
+    upgradeCatalog250.updateZeppelinConfigs();
+    expectLastCall().once();
+
     upgradeCatalog250.updateAtlasConfigs();
     expectLastCall().once();
 


[45/50] [abbrv] ambari git commit: AMBARI-19847 Improve Log Feeder simulation to help scale testing (mgergely)

Posted by nc...@apache.org.
AMBARI-19847 Improve Log Feeder simulation to help scale testing (mgergely)

Change-Id: I8a53b3285b919523a929656c10d4d1215169fbab


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 61f8f6d56937996ea7ca2f64b8961e83b72422fd
Parents: 14cd837
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Fri Feb 3 09:56:10 2017 +0100
Committer: Miklos Gergely <mg...@hortonworks.com>
Committed: Fri Feb 3 09:56:10 2017 +0100

----------------------------------------------------------------------
 .../ambari/logfeeder/input/InputSimulate.java   | 52 ++++++++++++--------
 .../ambari/logfeeder/util/LogFeederUtil.java    | 12 +++++
 2 files changed, 44 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/61f8f6d5/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
index 743be69..be97a52 100644
--- a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
+++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
@@ -21,24 +21,25 @@ package org.apache.ambari.logfeeder.input;
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
 
 import org.apache.ambari.logfeeder.filter.Filter;
 import org.apache.ambari.logfeeder.filter.FilterJSON;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.common.util.Base64;
 
+import com.google.common.base.Joiner;
+
 public class InputSimulate extends Input {
 
-  private static final String LOG_MESSAGE_PREFIX = "Simulated log message for testing, line";
-  
-  private static final String LOG_TEXT_PATTERN =
-      "{ logtime=\"%d\", level=\"%s\", log_message=\"<LOG_MESSAGE_PATTERN>\"}";
+  private static final String LOG_TEXT_PATTERN = "{ logtime=\"%d\", level=\"%s\", log_message=\"%s\"}";
   
   private static final Map<String, String> typeToFilePath = new HashMap<>();
   public static void loadTypeToFilePath(List<Map<String, Object>> inputList) {
@@ -55,16 +56,21 @@ public class InputSimulate extends Input {
   
   private final List<String> types;
   private final String level;
-  private final String logText;
+  private final int numberOfWords;
+  private final int minLogWords;
+  private final int maxLogWords;
   private final long sleepMillis;
   
   public InputSimulate() throws Exception {
     this.types = getSimulatedLogTypes();
     this.level = LogFeederUtil.getStringProperty("logfeeder.simulate.log_level", "WARN");
-    this.logText = getLogText();
+    this.numberOfWords = LogFeederUtil.getIntProperty("logfeeder.simulate.number_of_words", 1000, 50, 1000000);
+    this.minLogWords = LogFeederUtil.getIntProperty("logfeeder.simulate.min_log_words", 5, 1, 10);
+    this.maxLogWords = LogFeederUtil.getIntProperty("logfeeder.simulate.max_log_words", 10, 10, 20);
     this.sleepMillis = LogFeederUtil.getIntProperty("logfeeder.simulate.sleep_milliseconds", 10000);
     
     Filter filter = new FilterJSON();
+    filter.loadConfig(Collections.<String, Object> emptyMap());
     filter.setInput(this);
     addFilter(filter);
   }
@@ -80,15 +86,6 @@ public class InputSimulate extends Input {
     }
   }
 
-  private String getLogText() {
-    int logTextSize = LogFeederUtil.getIntProperty("logfeeder.simulate.log_message_size", 100);
-    int fillerSize = Math.max(logTextSize - LOG_MESSAGE_PREFIX.length() - 10, 0);
-    String filler = StringUtils.repeat("X", fillerSize);
-    String logMessagePattern = LOG_MESSAGE_PREFIX + " %08d " + filler;
-    
-    return LOG_TEXT_PATTERN.replaceAll("<LOG_MESSAGE_PATTERN>", logMessagePattern);
-  }
-
   @Override
   public boolean isReady() {
     return true;
@@ -103,12 +100,12 @@ public class InputSimulate extends Input {
     while (true) {
       String type = imitateRandomLogFile();
       
+      String line = getLine();
       InputMarker marker = getInputMarker(type);
-      String line = getLine(marker);
       
       outputLine(line, marker);
       
-      try { Thread.sleep(sleepMillis); } catch(Exception e) {}
+      try { Thread.sleep(sleepMillis); } catch(Exception e) { /* Ignore */ }
     }
   }
 
@@ -143,9 +140,24 @@ public class InputSimulate extends Input {
     return Base64.byteArrayToBase64(fileKey.getBytes());
   }
 
-  private String getLine(InputMarker marker) {
+  private String getLine() {
     Date d = new Date();
-    return String.format(logText, d.getTime(), level, marker.lineNumber);
+    String logMessage = createLogMessage();
+    return String.format(LOG_TEXT_PATTERN, d.getTime(), level, logMessage);
+  }
+  
+  private String createLogMessage() {
+    int logMessageLength = minLogWords + random.nextInt(maxLogWords - minLogWords + 1);
+    Set<Integer> words = new TreeSet<>();
+    List<String> logMessage = new ArrayList<>();
+    while (words.size() < logMessageLength) {
+      int word = random.nextInt(numberOfWords);
+      if (words.add(word)) {
+        logMessage.add(String.format("Word%06d", word));
+      }
+    }
+    
+    return Joiner.on(' ').join(logMessage);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/61f8f6d5/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
index 5bf600e..73cf449 100644
--- a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
+++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
@@ -171,8 +171,20 @@ public class LogFeederUtil {
   }
 
   public static int getIntProperty(String key, int defaultValue) {
+    return getIntProperty(key, defaultValue, null, null);
+  }
+
+  public static int getIntProperty(String key, int defaultValue, Integer minValue, Integer maxValue) {
     String value = getStringProperty(key);
     int retValue = objectToInt(value, defaultValue, ", key=" + key);
+    if (minValue != null && retValue < minValue) {
+      LOG.info("Minimum rule was applied for " + key + ": " + retValue + " < " + minValue);
+      retValue = minValue;
+    }
+    if (maxValue != null && retValue > maxValue) {
+      LOG.info("Maximum rule was applied for " + key + ": " + retValue + " > " + maxValue);
+      retValue = maxValue;
+    }
     return retValue;
   }
 


[40/50] [abbrv] ambari git commit: AMBARI-19828. UI changes to resolve discrepancies between what the stack vs Ambari reports as "live" for NodeManagers. (Vivek Subramanian via yusaku)

Posted by nc...@apache.org.
AMBARI-19828. UI changes to resolve discrepancies between what the stack vs Ambari reports as "live" for NodeManagers. (Vivek Subramanian via yusaku)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 69c8389ef8d76e8a7a41a8a796f51be044033026
Parents: 9c1b153
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Thu Feb 2 10:36:48 2017 -0800
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Thu Feb 2 10:36:48 2017 -0800

----------------------------------------------------------------------
 ambari-web/app/messages.js                             | 13 ++++++++++++-
 ambari-web/app/views/main/service/services/hdfs.js     | 10 ++++++----
 ambari-web/app/views/main/service/services/yarn.js     |  2 +-
 .../test/views/main/service/services/hdfs_test.js      |  6 ++++--
 .../test/views/main/service/services/yarn_test.js      |  2 +-
 5 files changed, 24 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/69c8389e/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 9644edb..6f8f435 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -2930,7 +2930,18 @@ Em.I18n.translations = {
   'dashboard.services.yarn.resourceManager.standby':'Standby ResourceManager',
   'dashboard.services.resourceManager.nodes.heap':'ResourceManager Heap',
   'dashboard.services.yarn.nodeManagers.status': 'NodeManagers Status',
-  'dashboard.services.yarn.nodeManagers.status.msg': '{0} active / {1} lost / {2} unhealthy / {3} rebooted / {4} decommissioned',
+  'dashboard.services.yarn.nodeManagers.status.active': 'active',
+  'dashboard.services.yarn.nodeManagers.status.lost': 'lost',
+  'dashboard.services.yarn.nodeManagers.status.unhealthy': 'unhealthy',
+  'dashboard.services.yarn.nodeManagers.status.rebooted': 'rebooted',
+  'dashboard.services.yarn.nodeManagers.status.decommissioned': 'decommissioned',
+  'dashboard.services.yarn.nodeManagers.status.tooltip.active': 'This is the number of NodeManagers that are active as reported from the ResourceManager',
+  'dashboard.services.yarn.nodeManagers.status.tooltip.lost': 'This is the number of NodeManagers that are lost as reported from the ResourceManager. ' +
+    'Even if a NodeManager process is up, the ResourceManager might see the status as lost if the NodeManager is not communicating with the ' +
+    'ResourceManager as expected. This can be due to situations such as a network issue or a hanging NodeManager process due to excessive garbage collection.',
+  'dashboard.services.yarn.nodeManagers.status.tooltip.unhealthy': 'This is the number of NodeManagers that are unhealthy as reported from the ResourceManager.',
+  'dashboard.services.yarn.nodeManagers.status.tooltip.rebooted': 'This is the number of NodeManagers that are in the rebooted state as reported from the ResourceManager.',
+  'dashboard.services.yarn.nodeManagers.status.tooltip.decommissioned': 'This is the number of NodeManagers that are decommissioned as reported from the ResourceManager.',
   'dashboard.services.yarn.containers': 'Containers',
   'dashboard.services.yarn.containers.msg': '{0} allocated / {1} pending / {2} reserved',
   'dashboard.services.yarn.apps': 'Applications',

http://git-wip-us.apache.org/repos/asf/ambari/blob/69c8389e/ambari-web/app/views/main/service/services/hdfs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/services/hdfs.js b/ambari-web/app/views/main/service/services/hdfs.js
index 40fb761..f85e095 100644
--- a/ambari-web/app/views/main/service/services/hdfs.js
+++ b/ambari-web/app/views/main/service/services/hdfs.js
@@ -74,10 +74,12 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
       $('[rel=healthTooltip]').tooltip('destroy')
     }
   }),
-
-  didInsertElement: function() {
-    App.tooltip($("[rel='tooltip']"));
-  },
+  
+  metricsNotAvailableObserver: function () {
+    if(!this.get("service.metricsNotAvailable")) {
+      App.tooltip($("[rel='tooltip']"));
+    }
+  }.observes("service.metricsNotAvailable"),
 
   willDestroyElement: function() {
     $("[rel='tooltip']").tooltip('destroy');

http://git-wip-us.apache.org/repos/asf/ambari/blob/69c8389e/ambari-web/app/views/main/service/services/yarn.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/services/yarn.js b/ambari-web/app/views/main/service/services/yarn.js
index cf8adeb..84ba520 100644
--- a/ambari-web/app/views/main/service/services/yarn.js
+++ b/ambari-web/app/views/main/service/services/yarn.js
@@ -55,7 +55,6 @@ App.MainDashboardServiceYARNView = App.MainDashboardServiceView.extend({
   _nmUnhealthy: Em.computed.formatUnavailable('service.nodeManagersCountUnhealthy'),
   _nmRebooted: Em.computed.formatUnavailable('service.nodeManagersCountRebooted'),
   _nmDecom: Em.computed.formatUnavailable('service.nodeManagersCountDecommissioned'),
-  nodeManagersStatus: Em.computed.i18nFormat('dashboard.services.yarn.nodeManagers.status.msg', '_nmActive', '_nmLost', '_nmUnhealthy', '_nmRebooted', '_nmDecom'),
 
   _allocated: Em.computed.formatUnavailable('service.containersAllocated'),
   _pending: Em.computed.formatUnavailable('service.containersPending'),
@@ -82,6 +81,7 @@ App.MainDashboardServiceYARNView = App.MainDashboardServiceView.extend({
 
   didInsertElement: function(){
     App.tooltip($("[rel='queue-tooltip']"), {html: true, placement: "right"});
+    App.tooltip($("[rel='tooltip']"));
   },
 
   willDestroyElement: function(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/69c8389e/ambari-web/test/views/main/service/services/hdfs_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/services/hdfs_test.js b/ambari-web/test/views/main/service/services/hdfs_test.js
index 06d0e01..efa0e3b 100644
--- a/ambari-web/test/views/main/service/services/hdfs_test.js
+++ b/ambari-web/test/views/main/service/services/hdfs_test.js
@@ -124,7 +124,7 @@ describe('App.MainDashboardServiceHdfsView', function () {
     });
   });
 
-  describe("#didInsertElement()", function() {
+  describe("#metricsNotAvailableObserver()", function() {
 
     beforeEach(function() {
       sinon.stub(App, 'tooltip');
@@ -134,7 +134,9 @@ describe('App.MainDashboardServiceHdfsView', function () {
     });
 
     it("App.tooltip should be called", function() {
-      view.didInsertElement();
+      view.set("service", Em.Object.create({
+        metricsNotAvailable: false
+      }));
       expect(App.tooltip.calledOnce).to.be.true;
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/69c8389e/ambari-web/test/views/main/service/services/yarn_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/services/yarn_test.js b/ambari-web/test/views/main/service/services/yarn_test.js
index 9c1cf7a..57b3b05 100644
--- a/ambari-web/test/views/main/service/services/yarn_test.js
+++ b/ambari-web/test/views/main/service/services/yarn_test.js
@@ -127,7 +127,7 @@ describe('App.MainDashboardServiceYARNView', function () {
 
     it("App.tooltip should be called", function() {
       view.didInsertElement();
-      expect(App.tooltip.calledOnce).to.be.true;
+      expect(App.tooltip.calledTwice).to.be.true;
     });
   });
 


[35/50] [abbrv] ambari git commit: AMBARI-19852. Workflow name mandatory for save in Coordinator and Bundle (Venkata Sairam via pallavkul)

Posted by nc...@apache.org.
AMBARI-19852. Workflow name mandatory for save in Coordinator and Bundle (Venkata Sairam via pallavkul)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: ce822359b3199ac62cfb7b3fed00333ea780e734
Parents: 7c8931a
Author: pallavkul <pa...@gmail.com>
Authored: Thu Feb 2 23:07:05 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Thu Feb 2 23:07:05 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/bundle-config.js   |  5 ++++-
 .../resources/ui/app/components/coord-config.js    | 17 ++++++++++-------
 .../resources/ui/app/components/flow-designer.js   |  5 +++++
 3 files changed, 19 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ce822359/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
index 7b24d34..445b86e 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
@@ -390,9 +390,12 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
       this.set('showVersionSettings', value);
     },
     save(){
+      if (Ember.isBlank(this.$('[name=bundle_title]').val())) {
+        return;
+      }
       var isDraft = false, bundleXml;
       if(this.get('validations.isInvalid')) {
-       isDraft = true;
+        isDraft = true;
       }else{
         var bundleGenerator = BundleGenerator.create({bundle:this.get("bundle")});
         bundleXml = bundleGenerator.process();

http://git-wip-us.apache.org/repos/asf/ambari/blob/ce822359/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
index 57dbeb0..b045798 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
@@ -147,7 +147,7 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
     if(Ember.isBlank(this.get('coordinator.name'))){
       this.set('coordinator.name', Ember.copy(this.get('tabInfo.name')));
     }
-    this.schedulePersistWorkInProgress();    
+    this.schedulePersistWorkInProgress();
   },
   coordinatorFilePath : Ember.computed('tabInfo.filePath', function(){
     return this.get('tabInfo.filePath');
@@ -344,12 +344,12 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
       this.set('inputLogicEnabled', true);
     }
   },
-  validateChildComponents(){
+  validateChildComponents(showErrorMessage){
     var isChildComponentsValid = true;
     this.get('childComponents').forEach((context)=>{
       if(context.get('validations') && context.get('validations.isInvalid')){
         isChildComponentsValid =  false;
-        context.set('showErrorMessage', true);
+        context.set('showErrorMessage', showErrorMessage);
       }
     }.bind(this));
     return isChildComponentsValid;
@@ -457,7 +457,7 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
       this.send('submit');
     },
     submit(){
-      var isChildComponentsValid = this.validateChildComponents();
+      var isChildComponentsValid = this.validateChildComponents(true);
       if(this.get('validations.isInvalid') || !isChildComponentsValid) {
         this.set('showErrorMessage', true);
         return;
@@ -539,7 +539,7 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
       this.set('inputLogicExists', false);
     },
     preview(){
-      var isChildComponentsValid = this.validateChildComponents();
+      var isChildComponentsValid = this.validateChildComponents(true);
       if(this.get('validations.isInvalid') || !isChildComponentsValid) {
         this.set('showErrorMessage', true);
         return;
@@ -637,10 +637,13 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
       this.set('showVersionSettings', value);
     },
     save(){
+      if (Ember.isBlank(this.$('[name=coord_title]').val())) {
+        return;
+      }
       var isDraft = false, coordinatorXml;
-      var isChildComponentsValid = this.validateChildComponents();
+      var isChildComponentsValid = this.validateChildComponents(false);
       if(this.get('validations.isInvalid') || !isChildComponentsValid) {
-       isDraft = true;
+        isDraft = true;
       }else{
         var coordGenerator = CoordinatorGenerator.create({coordinator:this.get("coordinator")});
         coordinatorXml = coordGenerator.process();

http://git-wip-us.apache.org/repos/asf/ambari/blob/ce822359/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
index 4618ab6..90fba0d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
@@ -695,9 +695,14 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     }, 1000);
   },
   openSaveWorkflow() {
+    if(Ember.isBlank(this.$('[name=wf_title]').val())) {
+      this.set('errors',[{"message":"Workflow name is mandatory"}]);
+      return;
+    }
     var workflowGenerator = WorkflowGenerator.create({workflow:this.get("workflow"), workflowContext:this.get('workflowContext')});
     var workflowXml = workflowGenerator.process();
     var workflowJson = this.getWorkflowAsJson();
+    this.set('errors', []);
     var isDraft = this.get('workflowContext').hasErrors()? true: false;
     this.set("configForSave", {json : workflowJson, xml : workflowXml,isDraft : isDraft});
     this.set("showingSaveWorkflow",true);


[18/50] [abbrv] ambari git commit: AMBARI-19816. Agent heartbeat lost due to dead service check process. (Attila Doroszlai via stoader)

Posted by nc...@apache.org.
AMBARI-19816. Agent heartbeat lost due to dead service check process. (Attila Doroszlai via stoader)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 0458addaaa3b99943e3e3ecf93483f4009b2c120
Parents: a8a43bc
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Wed Feb 1 19:21:32 2017 +0100
Committer: Toader, Sebastian <st...@hortonworks.com>
Committed: Wed Feb 1 19:21:54 2017 +0100

----------------------------------------------------------------------
 .../src/main/python/ambari_agent/HostInfo.py    | 19 ++++---
 .../test/python/ambari_agent/TestHostInfo.py    | 45 +++++++++--------
 .../python/ambari_agent/TestRegistration.py     |  2 +-
 ambari-agent/src/test/python/unitTests.py       |  3 ++
 .../src/main/python/ambari_commons/firewall.py  | 21 ++++----
 .../src/test/python/TestAmbariServer.py         | 52 +++++++-------------
 6 files changed, 68 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0458adda/ambari-agent/src/main/python/ambari_agent/HostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/HostInfo.py b/ambari-agent/src/main/python/ambari_agent/HostInfo.py
index 3810b52..7f041eb 100644
--- a/ambari-agent/src/main/python/ambari_agent/HostInfo.py
+++ b/ambari-agent/src/main/python/ambari_agent/HostInfo.py
@@ -30,6 +30,7 @@ import time
 from ambari_commons import OSCheck, OSConst
 from ambari_commons.firewall import Firewall
 from ambari_commons.os_family_impl import OsFamilyImpl
+from resource_management.core import shell
 
 from ambari_agent.HostCheckReportFileHandler import HostCheckReportFileHandler
 
@@ -169,6 +170,7 @@ class HostInfoLinux(HostInfo):
 
   DEFAULT_SERVICE_NAME = "ntpd"
   SERVICE_STATUS_CMD = "%s %s status" % (SERVICE_CMD, DEFAULT_SERVICE_NAME)
+  SERVICE_STATUS_CMD_LIST = shlex.split(SERVICE_STATUS_CMD)
 
   THP_FILE_REDHAT = "/sys/kernel/mm/redhat_transparent_hugepage/enabled"
   THP_FILE_UBUNTU = "/sys/kernel/mm/transparent_hugepage/enabled"
@@ -333,13 +335,16 @@ class HostInfoLinux(HostInfo):
 
     pass
 
-  def getServiceStatus(self, serivce_name):
-    service_check_live = shlex.split(self.SERVICE_STATUS_CMD)
-    service_check_live[1] = serivce_name
-    osStat = subprocess.Popen(service_check_live, stdout=subprocess.PIPE,
-                              stderr=subprocess.PIPE)
-    out, err = osStat.communicate()
-    return out, err, osStat.returncode
+  def getServiceStatus(self, service_name):
+    service_check_live = list(self.SERVICE_STATUS_CMD_LIST)
+    service_check_live[1] = service_name
+    try:
+      code, out, err = shell.call(service_check_live, stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = 5, quiet = True)
+      return out, err, code
+    except Exception as ex:
+      logger.warn("Checking service {0} status failed".format(service_name))
+      return '', str(ex), 1
+
 
 
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)

http://git-wip-us.apache.org/repos/asf/ambari/blob/0458adda/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
index fcfbc85..67294e0 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
@@ -22,7 +22,6 @@ limitations under the License.
 from unittest import TestCase
 import logging
 import unittest
-import subprocess
 import socket
 import platform
 from mock.mock import patch
@@ -38,6 +37,7 @@ from ambari_agent.HostCheckReportFileHandler import HostCheckReportFileHandler
 from ambari_agent.HostInfo import HostInfo, HostInfoLinux
 from ambari_agent.Hardware import Hardware
 from ambari_agent.AmbariConfig import AmbariConfig
+from resource_management.core import shell
 from resource_management.core.system import System
 from resource_management.libraries.functions import packages_analyzer
 
@@ -360,25 +360,20 @@ class TestHostInfo(TestCase):
     self.assertEquals(list[0]['user'], 'user')
 
   @patch.object(OSCheck, "get_os_type")
-  @patch("subprocess.Popen")
-  def test_checkLiveServices(self, subproc_popen, get_os_type_method):
+  @patch("resource_management.core.shell.call")
+  def test_checkLiveServices(self, shell_call, get_os_type_method):
+    get_os_type_method.return_value = 'redhat'
     hostInfo = HostInfoLinux()
-    p = MagicMock()
-    p.returncode = 0
-    p.communicate.return_value = ('', 'err')
-    subproc_popen.return_value = p
+
+    shell_call.return_value = (0, '', 'err')
     result = []
-    get_os_type_method.return_value = 'redhat'
     hostInfo.checkLiveServices([('service1',)], result)
 
+    self.assertEquals(result[0]['desc'], '')
     self.assertEquals(result[0]['status'], 'Healthy')
     self.assertEquals(result[0]['name'], 'service1')
-    self.assertEquals(result[0]['desc'], '')
-    self.assertEquals(str(subproc_popen.call_args_list),
-                      "[call(['service', 'service1', 'status'], stderr=-1, stdout=-1)]")
 
-    p.returncode = 1
-    p.communicate.return_value = ('out', 'err')
+    shell_call.return_value = (1, 'out', 'err')
     result = []
     hostInfo.checkLiveServices([('service1',)], result)
 
@@ -386,7 +381,7 @@ class TestHostInfo(TestCase):
     self.assertEquals(result[0]['name'], 'service1')
     self.assertEquals(result[0]['desc'], 'out')
 
-    p.communicate.return_value = ('', 'err')
+    shell_call.return_value = (1, '', 'err')
     result = []
     hostInfo.checkLiveServices([('service1',)], result)
 
@@ -394,7 +389,7 @@ class TestHostInfo(TestCase):
     self.assertEquals(result[0]['name'], 'service1')
     self.assertEquals(result[0]['desc'], 'err')
 
-    p.communicate.return_value = ('', 'err', '')
+    shell_call.return_value = (1, '', 'err')
     result = []
     hostInfo.checkLiveServices([('service1',)], result)
 
@@ -402,8 +397,7 @@ class TestHostInfo(TestCase):
     self.assertEquals(result[0]['name'], 'service1')
     self.assertTrue(len(result[0]['desc']) > 0)
 
-    p.returncode = 0
-    p.communicate.return_value = ('', 'err')
+    shell_call.return_value = (0, '', 'err')
     result = []
     hostInfo.checkLiveServices([('service1', 'service2',)], result)
 
@@ -411,8 +405,7 @@ class TestHostInfo(TestCase):
     self.assertEquals(result[0]['name'], 'service1 or service2')
     self.assertEquals(result[0]['desc'], '')
 
-    p.returncode = 1
-    p.communicate.return_value = ('out', 'err')
+    shell_call.return_value = (1, 'out', 'err')
     result = []
     hostInfo.checkLiveServices([('service1', 'service2',)], result)
 
@@ -420,6 +413,16 @@ class TestHostInfo(TestCase):
     self.assertEquals(result[0]['name'], 'service1 or service2')
     self.assertEquals(result[0]['desc'], 'out\nout')
 
+    msg = 'thrown by shell call'
+    shell_call.side_effect = Exception(msg)
+    result = []
+    hostInfo.checkLiveServices([('service1',)], result)
+
+    self.assertEquals(result[0]['status'], 'Unhealthy')
+    self.assertEquals(result[0]['name'], 'service1')
+    self.assertEquals(result[0]['desc'], msg)
+
+
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('redhat','11','Final')))
   @patch("os.path.exists")
   @patch("os.listdir", create=True, autospec=True)
@@ -445,7 +448,7 @@ class TestHostInfo(TestCase):
   @patch.object(OSCheck, "get_os_family")
   @patch.object(OSCheck, "get_os_type")
   @patch.object(OSCheck, "get_os_major_version")
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   def test_FirewallRunning(self, run_os_command_mock, get_os_major_version_mock, get_os_type_mock, get_os_family_mock):
     get_os_type_mock.return_value = ""
     get_os_family_mock.return_value = OSConst.REDHAT_FAMILY
@@ -480,7 +483,7 @@ class TestHostInfo(TestCase):
   @patch.object(OSCheck, "get_os_family")
   @patch.object(OSCheck, "get_os_type")
   @patch.object(OSCheck, "get_os_major_version")
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   def test_FirewallStopped(self, run_os_command_mock, get_os_major_version_mock, get_os_type_mock, get_os_family_mock):
     get_os_type_mock.return_value = ""
     get_os_family_mock.return_value = OSConst.REDHAT_FAMILY

http://git-wip-us.apache.org/repos/asf/ambari/blob/0458adda/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
index f5e0288..a5c23fa 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
@@ -37,7 +37,7 @@ class TestRegistration(TestCase):
   @patch.object(Hardware, "_chk_writable_mount", new = MagicMock(return_value=True))
   @patch.object(FacterLinux, "facterInfo", new = MagicMock(return_value={}))
   @patch.object(FacterLinux, "__init__", new = MagicMock(return_value = None))
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   @patch.object(OSCheck, "get_os_type")
   @patch.object(OSCheck, "get_os_version")
   def test_registration_build(self, get_os_version_mock, get_os_type_mock, run_os_cmd_mock, Popen_mock):

http://git-wip-us.apache.org/repos/asf/ambari/blob/0458adda/ambari-agent/src/test/python/unitTests.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/unitTests.py b/ambari-agent/src/test/python/unitTests.py
index b70d226..785699f 100644
--- a/ambari-agent/src/test/python/unitTests.py
+++ b/ambari-agent/src/test/python/unitTests.py
@@ -47,6 +47,7 @@ import fnmatch
 from os.path import isdir
 import logging
 from only_for_platform import get_platform, PLATFORM_WINDOWS
+from resource_management.core.logger import Logger
 #TODO Add an option to randomize the tests' execution
 #from random import shuffle
 
@@ -182,4 +183,6 @@ if __name__ == '__main__':
   consoleLog = logging.StreamHandler(file)
   consoleLog.setFormatter(formatter)
   logger.addHandler(consoleLog)
+  Logger.initialize_logger(logging_level = logging.WARNING)
+
   main()

http://git-wip-us.apache.org/repos/asf/ambari/blob/0458adda/ambari-common/src/main/python/ambari_commons/firewall.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/firewall.py b/ambari-common/src/main/python/ambari_commons/firewall.py
index 6868d3f..43983ca 100644
--- a/ambari-common/src/main/python/ambari_commons/firewall.py
+++ b/ambari-common/src/main/python/ambari_commons/firewall.py
@@ -18,11 +18,11 @@ See the License for the specific language governing permissions and
 limitations under the License.
 '''
 
+import subprocess
 from ambari_commons import OSCheck, OSConst
 from ambari_commons.logging_utils import print_warning_msg
 from ambari_commons.os_family_impl import OsFamilyImpl
-from ambari_commons.os_utils import run_os_command
-
+from resource_management.core import shell
 
 class Firewall(object):
   def __init__(self):
@@ -81,10 +81,13 @@ class FirewallChecks(object):
     return result
 
   def run_command(self):
-    retcode, out, err = run_os_command(self.get_command())
-    self.returncode = retcode
-    self.stdoutdata = out
-    self.stderrdata = err
+    try:
+      retcode, out, err = shell.call(self.get_command(), stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = 5, quiet = True)
+      self.returncode = retcode
+      self.stdoutdata = out
+      self.stderrdata = err
+    except Exception as ex:
+      print_warning_msg("Unable to check firewall status: {0}".format(ex))
 
   def check_firewall(self):
     try:
@@ -129,12 +132,6 @@ class RedHat7FirewallChecks(FirewallChecks):
     return False
 
 
-  def run_command(self):
-    retcode, out, err = run_os_command(self.get_command())
-    self.returncode = retcode
-    self.stdoutdata = out
-    self.stderrdata = err
-
 class Fedora18FirewallChecks(FirewallChecks):
   def __init__(self):
     super(Fedora18FirewallChecks, self).__init__()

http://git-wip-us.apache.org/repos/asf/ambari/blob/0458adda/ambari-server/src/test/python/TestAmbariServer.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestAmbariServer.py b/ambari-server/src/test/python/TestAmbariServer.py
index 81e1a22..7dae7c0 100644
--- a/ambari-server/src/test/python/TestAmbariServer.py
+++ b/ambari-server/src/test/python/TestAmbariServer.py
@@ -1920,25 +1920,21 @@ class TestAmbariServer(TestCase):
     self.assertTrue(set_file_permissions_mock.called)
     pass
 
-  @patch("subprocess.Popen")
+  @patch("resource_management.core.shell.call")
   @patch.object(OSCheck, "get_os_family")
   @patch.object(OSCheck, "get_os_type")
   @patch.object(OSCheck, "get_os_major_version")
-  def test_check_firewall_is_running(self, get_os_major_version_mock, get_os_type_mock, get_os_family_mock, popen_mock):
+  def test_check_firewall_is_running(self, get_os_major_version_mock, get_os_type_mock, get_os_family_mock, shell_call_mock):
 
     get_os_major_version_mock.return_value = 18
     get_os_type_mock.return_value = OSConst.OS_FEDORA
     get_os_family_mock.return_value = OSConst.REDHAT_FAMILY
 
     firewall_obj = Firewall().getFirewallObject()
-    p = MagicMock()
-    p.communicate.return_value = ("active", "err")
-    p.returncode = 0
-    popen_mock.return_value = p
+    shell_call_mock.return_value = (0, "active", "err")
     self.assertEqual("Fedora18FirewallChecks", firewall_obj.__class__.__name__)
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("", "err")
-    p.returncode = 3
+    shell_call_mock.return_value = (3, "", "err")
     self.assertFalse(firewall_obj.check_firewall())
     self.assertEqual("err", firewall_obj.stderrdata)
 
@@ -1947,12 +1943,10 @@ class TestAmbariServer(TestCase):
     get_os_family_mock.return_value = OSConst.UBUNTU_FAMILY
 
     firewall_obj = Firewall().getFirewallObject()
-    p.communicate.return_value = ("Status: active", "err")
-    p.returncode = 0
+    shell_call_mock.return_value = (0, "Status: active", "err")
     self.assertEqual("UbuntuFirewallChecks", firewall_obj.__class__.__name__)
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("Status: inactive", "err")
-    p.returncode = 0
+    shell_call_mock.return_value = (0, "Status: inactive", "err")
     self.assertFalse(firewall_obj.check_firewall())
     self.assertEqual("err", firewall_obj.stderrdata)
 
@@ -1960,12 +1954,10 @@ class TestAmbariServer(TestCase):
     get_os_family_mock.return_value = OSConst.SUSE_FAMILY
 
     firewall_obj = Firewall().getFirewallObject()
-    p.communicate.return_value = ("running", "err")
-    p.returncode = 0
+    shell_call_mock.return_value = (0, "running", "err")
     self.assertEqual("SuseFirewallChecks", firewall_obj.__class__.__name__)
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("unused", "err")
-    p.returncode = 0
+    shell_call_mock.return_value = (0, "unused", "err")
     self.assertFalse(firewall_obj.check_firewall())
     self.assertEqual("err", firewall_obj.stderrdata)
 
@@ -1974,12 +1966,10 @@ class TestAmbariServer(TestCase):
     get_os_major_version_mock.return_value = 6
 
     firewall_obj = Firewall().getFirewallObject()
-    p.communicate.return_value = ("Table: filter", "err")
-    p.returncode = 0
+    shell_call_mock.return_value = (0, "Table: filter", "err")
     self.assertEqual("FirewallChecks", firewall_obj.__class__.__name__)
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("", "err")
-    p.returncode = 3
+    shell_call_mock.return_value = (3, "", "err")
     self.assertFalse(firewall_obj.check_firewall())
     self.assertEqual("err", firewall_obj.stderrdata)
 
@@ -1988,18 +1978,14 @@ class TestAmbariServer(TestCase):
     get_os_family_mock.return_value = OSConst.REDHAT_FAMILY
 
     firewall_obj = Firewall().getFirewallObject()
-    p.communicate.return_value = ("active\nactive", "err")
-    p.returncode = 0
+    shell_call_mock.return_value = (0, "active\nactive", "err")
     self.assertEqual("RedHat7FirewallChecks", firewall_obj.__class__.__name__)
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("inactive\nactive", "err")
-    p.returncode = 3
+    shell_call_mock.return_value = (3, "inactive\nactive", "err")
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("active\ninactive", "err")
-    p.returncode = 3
+    shell_call_mock.return_value = (3, "active\ninactive", "err")
     self.assertTrue(firewall_obj.check_firewall())
-    p.communicate.return_value = ("inactive\ninactive", "err")
-    p.returncode = 3
+    shell_call_mock.return_value = (3, "inactive\ninactive", "err")
     self.assertFalse(firewall_obj.check_firewall())
     self.assertEqual("err", firewall_obj.stderrdata)
 
@@ -3666,7 +3652,7 @@ class TestAmbariServer(TestCase):
   @not_for_platform(PLATFORM_WINDOWS)
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
   @patch("pwd.getpwnam")
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   @patch("os.path.exists")
   @patch("os.path.isfile")
   @patch("ambari_commons.os_utils.remove_file")
@@ -3901,7 +3887,7 @@ class TestAmbariServer(TestCase):
 
   @only_for_platform(PLATFORM_WINDOWS)
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   @patch("os.path.exists")
   @patch("os.path.isfile")
   @patch("ambari_commons.os_utils.remove_file")
@@ -6224,7 +6210,7 @@ class TestAmbariServer(TestCase):
 
   @not_for_platform(PLATFORM_WINDOWS)
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   @patch("ambari_server.serverSetup.verify_setup_allowed")
   @patch("sys.exit")
   @patch("ambari_server.serverSetup.get_YN_input")
@@ -6293,7 +6279,7 @@ class TestAmbariServer(TestCase):
 
   @not_for_platform(PLATFORM_WINDOWS)
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   @patch("sys.exit")
   @patch("ambari_server.userInput.get_YN_input")
   @patch("ambari_commons.os_utils.is_root")
@@ -8067,7 +8053,7 @@ class TestAmbariServer(TestCase):
 
   @not_for_platform(PLATFORM_WINDOWS)
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch("ambari_commons.firewall.run_os_command")
+  @patch("resource_management.core.shell.call")
   @patch("ambari_server.dbConfiguration_linux.PGConfig._is_jdbc_user_changed")
   @patch("ambari_server.serverSetup.verify_setup_allowed")
   @patch("ambari_server.serverSetup.get_YN_input")


[14/50] [abbrv] ambari git commit: AMBARI-19821 Recommendations for non-editable properties should be listed as 'Required Changes'. (ababiichuk)

Posted by nc...@apache.org.
AMBARI-19821 Recommendations for non-editable properties should be listed as 'Required Changes'. (ababiichuk)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 0ec0597d37abb22f5a21408fe24af3c7b64b2c9d
Parents: 144449c
Author: ababiichuk <ab...@hortonworks.com>
Authored: Wed Feb 1 18:37:42 2017 +0200
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Wed Feb 1 19:41:10 2017 +0200

----------------------------------------------------------------------
 .../configs/config_recommendation_parser.js     |   6 +-
 .../common/configs/config_recommendations.js    |  11 +-
 ...onfig_with_override_recommendation_parser.js |   3 +-
 .../mixins/common/configs/enhanced_configs.js   |   6 +-
 .../dependent_configs_list_popup.js             |  12 +-
 .../configs/config_recommendations_test.js      | 600 ++++++++++---------
 .../common/configs/enhanced_configs_test.js     |   2 +-
 .../dependent_configs_list_popup_test.js        |   2 +-
 8 files changed, 337 insertions(+), 305 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/config_recommendation_parser.js b/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
index b014ede..b8845a0 100644
--- a/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
+++ b/ambari-web/app/mixins/common/configs/config_recommendation_parser.js
@@ -173,7 +173,7 @@ App.ConfigRecommendationParser = Em.Mixin.create(App.ConfigRecommendations, {
       if (!Em.isNone(recommendedValue) && !Em.get(config, 'hiddenBySection')) {
         Em.set(config, 'isVisible', true);
       }
-      this.applyRecommendation(Em.get(config, 'name'), Em.get(config, 'filename'), Em.get(config, 'group.name'), recommendedValue, this._getInitialValue(config), parentProperties);
+      this.applyRecommendation(Em.get(config, 'name'), Em.get(config, 'filename'), Em.get(config, 'group.name'), recommendedValue, this._getInitialValue(config), parentProperties, Em.get(config, 'isEditable'));
     }
     if (this.updateInitialOnRecommendations(Em.get(config, 'serviceName'))) {
       Em.set(config, 'initialValue', recommendedValue);
@@ -202,7 +202,7 @@ App.ConfigRecommendationParser = Em.Mixin.create(App.ConfigRecommendations, {
       addedPropertyObject = App.ServiceConfigProperty.create(newConfig);
 
     this.applyRecommendation(name, fileName, "Default",
-      recommendedValue, null, parentProperties);
+      recommendedValue, null, parentProperties, true);
 
     return addedPropertyObject;
   },
@@ -245,7 +245,7 @@ App.ConfigRecommendationParser = Em.Mixin.create(App.ConfigRecommendations, {
     configsCollection.removeObject(config);
 
     this.applyRecommendation(Em.get(config, 'name'), Em.get(config, 'filename'), Em.get(config, 'group.name'),
-      null, this._getInitialValue(config), parentProperties);
+      null, this._getInitialValue(config), parentProperties, Em.get(config, 'isEditable'));
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/app/mixins/common/configs/config_recommendations.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/config_recommendations.js b/ambari-web/app/mixins/common/configs/config_recommendations.js
index 7427a54..bccf3b7 100644
--- a/ambari-web/app/mixins/common/configs/config_recommendations.js
+++ b/ambari-web/app/mixins/common/configs/config_recommendations.js
@@ -54,16 +54,17 @@ App.ConfigRecommendations = Em.Mixin.create({
    * @param {string} recommendedValue
    * @param {string} initialValue
    * @param {Object[]} parentProperties
+   * @param {boolean} isEditable
    * @returns {recommendation}
    */
-  applyRecommendation: function (name, fileName, configGroupName, recommendedValue, initialValue, parentProperties) {
+  applyRecommendation: function (name, fileName, configGroupName, recommendedValue, initialValue, parentProperties, isEditable) {
     try {
       var parentPropertyIds = this.formatParentProperties(parentProperties);
       var recommendation = this.getRecommendation(name, fileName, configGroupName);
       if (recommendation) {
         return this.updateRecommendation(recommendation, recommendedValue, parentPropertyIds);
       }
-      return this.addRecommendation(name, fileName, configGroupName, recommendedValue, initialValue, parentPropertyIds);
+      return this.addRecommendation(name, fileName, configGroupName, recommendedValue, initialValue, parentPropertyIds, isEditable);
     } catch(e) {
       console.error(e.message);
     }
@@ -90,9 +91,10 @@ App.ConfigRecommendations = Em.Mixin.create({
    * @param {string} recommendedValue
    * @param {string} initialValue
    * @param {string[]} parentPropertyIds
+   * @param {boolean} isEditable
    * @returns {recommendation}
    */
-  addRecommendation: function (name, fileName, configGroupName, recommendedValue, initialValue, parentPropertyIds) {
+  addRecommendation: function (name, fileName, configGroupName, recommendedValue, initialValue, parentPropertyIds, isEditable) {
     Em.assert('name and fileName should be defined', name && fileName);
     var site = App.config.getConfigTagFromFileName(fileName);
     var service = App.config.get('serviceByConfigTypeMap')[site];
@@ -113,7 +115,8 @@ App.ConfigRecommendations = Em.Mixin.create({
       allowChangeGroup: false,//TODO groupName!= "Default" && (service.get('serviceName') != this.get('selectedService.serviceName'))
       //TODO&& (App.ServiceConfigGroup.find().filterProperty('serviceName', service.get('serviceName')).length > 1), //TODO
       serviceDisplayName: service.get('displayName'),
-      recommendedValue: recommendedValue
+      recommendedValue: recommendedValue,
+      isEditable: isEditable !== false
     };
     this.get('recommendations').pushObject(recommendation);
     return recommendation;

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/app/mixins/common/configs/config_with_override_recommendation_parser.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/config_with_override_recommendation_parser.js b/ambari-web/app/mixins/common/configs/config_with_override_recommendation_parser.js
index 86ccb65..732cf60 100644
--- a/ambari-web/app/mixins/common/configs/config_with_override_recommendation_parser.js
+++ b/ambari-web/app/mixins/common/configs/config_with_override_recommendation_parser.js
@@ -98,7 +98,8 @@ App.ConfigWithOverrideRecommendationParser = Em.Mixin.create(App.ConfigRecommend
                              configGroup.get('name'),
                              recommendedValue,
                              this._getInitialValue(override),
-                             parentProperties);
+                             parentProperties,
+                             Em.get(config, 'isEditable'));
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/app/mixins/common/configs/enhanced_configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/enhanced_configs.js b/ambari-web/app/mixins/common/configs/enhanced_configs.js
index c86f132..4561f77 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -462,9 +462,11 @@ App.EnhancedConfigsMixin = Em.Mixin.create(App.ConfigWithOverrideRecommendationP
    */
   showChangedDependentConfigs: function(event, callback, secondary) {
     var self = this;
-    var recommendations = event ? this.get('changedProperties') : this.get('recommendations');
+    var recommendations = event ? this.get('changedProperties') : this.get('recommendations'),
+      recommendedChanges = recommendations.filterProperty('isEditable'),
+      requiredChanges = recommendations.filterProperty('isEditable', false);
     if (recommendations.length > 0) {
-      App.showDependentConfigsPopup(recommendations, function() {
+      App.showDependentConfigsPopup(recommendedChanges, requiredChanges, function() {
         self.onSaveRecommendedPopup(recommendations);
         if (callback) callback();
       }, secondary);

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/app/views/common/modal_popups/dependent_configs_list_popup.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/modal_popups/dependent_configs_list_popup.js b/ambari-web/app/views/common/modal_popups/dependent_configs_list_popup.js
index ffb3add..24c7577 100644
--- a/ambari-web/app/views/common/modal_popups/dependent_configs_list_popup.js
+++ b/ambari-web/app/views/common/modal_popups/dependent_configs_list_popup.js
@@ -66,13 +66,14 @@ App.DependentConfigsListView = Em.View.extend({
 
 /**
  * Show confirmation popup
- * @param {[Object]} recommendations
+ * @param {[Object]} recommendedChanges
+ * @param {[Object]} requiredChanges
  * @param {function} [primary=null]
  * @param {function} [secondary=null]
  * we use this parameter to defer saving configs before we make some decisions.
  * @return {App.ModalPopup}
  */
-App.showDependentConfigsPopup = function (recommendations, primary, secondary) {
+App.showDependentConfigsPopup = function (recommendedChanges, requiredChanges, primary, secondary) {
   return App.ModalPopup.show({
     encodeBody: false,
     header: Em.I18n.t('popup.dependent.configs.header'),
@@ -80,15 +81,16 @@ App.showDependentConfigsPopup = function (recommendations, primary, secondary) {
     modalDialogClasses: ['modal-lg'],
     secondaryClass: 'cancel-button',
     bodyClass: App.DependentConfigsListView.extend({
-      recommendations: recommendations
+      recommendations: recommendedChanges,
+      requiredChanges: requiredChanges
     }),
     saveChanges: function() {
-      recommendations.forEach(function (c) {
+      recommendedChanges.forEach(function (c) {
         Em.set(c, 'saveRecommendedDefault', Em.get(c, 'saveRecommended'));
       })
     },
     discardChanges: function() {
-      recommendations.forEach(function(c) {
+      recommendedChanges.forEach(function(c) {
         Em.set(c, 'saveRecommended', Em.get(c, 'saveRecommendedDefault'));
       });
     },

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/test/mixins/common/configs/config_recommendations_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/configs/config_recommendations_test.js b/ambari-web/test/mixins/common/configs/config_recommendations_test.js
index baa8ed6..a72f6d3 100644
--- a/ambari-web/test/mixins/common/configs/config_recommendations_test.js
+++ b/ambari-web/test/mixins/common/configs/config_recommendations_test.js
@@ -19,29 +19,29 @@
 var App = require('app');
 
 describe('App.ConfigRecommendations', function() {
-	var mixinObject = Em.Controller.extend(App.ConfigRecommendations, {});
-	var instanceObject = mixinObject.create({});
+  var mixinObject = Em.Controller.extend(App.ConfigRecommendations, {});
+  var instanceObject = mixinObject.create({});
 
-	beforeEach(function() {
-		instanceObject.set('recommendations', []);
-	});
+  beforeEach(function() {
+    instanceObject.set('recommendations', []);
+  });
 
-	describe('#applyRecommendation', function() {
+  describe('#applyRecommendation', function() {
     beforeEach(function() {
       sinon.stub(instanceObject, 'formatParentProperties', function(parentProperties) { return parentProperties} );
       sinon.stub(App.config, 'get').withArgs('serviceByConfigTypeMap').returns({
         'pFile': Em.Object.create({serviceName: 'sName', displayName: 'sDisplayName'})
       });
-	  sinon.stub(Handlebars, 'SafeString');
+    sinon.stub(Handlebars, 'SafeString');
     });
     afterEach(function() {
       instanceObject.formatParentProperties.restore();
       App.config.get.restore();
-	  Handlebars.SafeString.restore();
+    Handlebars.SafeString.restore();
     });
 
     it('adds new recommendation', function() {
-      var res = instanceObject.applyRecommendation('pName', 'pFile', 'pGroup', 'pRecommended', 'pInitial', ['p_id']);
+      var res = instanceObject.applyRecommendation('pName', 'pFile', 'pGroup', 'pRecommended', 'pInitial', ['p_id'], true);
       expect(res).to.eql({
         saveRecommended: true,
         saveRecommendedDefault: true,
@@ -56,26 +56,27 @@ describe('App.ConfigRecommendations', function() {
         allowChangeGroup: false,
         serviceDisplayName: 'sDisplayName',
         recommendedValue: 'pRecommended',
+        isEditable: true
       });
       expect(instanceObject.getRecommendation('pName', 'pFile', 'pGroup')).to.eql(res);
     });
 
     it('updates recommendation', function() {
-			instanceObject.set('recommendations', [{
-				saveRecommended: true,
-				saveRecommendedDefault: true,
-				propertyFileName: 'pFile',
-				propertyName: 'pName',
-				isDeleted: false,
-				notDefined: false,
-				configGroup: 'pGroup',
-				initialValue: 'pInitial',
-				parentConfigs: ['p_id'],
-				serviceName: 'sName',
-				allowChangeGroup: false,
-				serviceDisplayName: 'sDisplayName',
-				recommendedValue: 'pRecommended'
-			}]);
+      instanceObject.set('recommendations', [{
+        saveRecommended: true,
+        saveRecommendedDefault: true,
+        propertyFileName: 'pFile',
+        propertyName: 'pName',
+        isDeleted: false,
+        notDefined: false,
+        configGroup: 'pGroup',
+        initialValue: 'pInitial',
+        parentConfigs: ['p_id'],
+        serviceName: 'sName',
+        allowChangeGroup: false,
+        serviceDisplayName: 'sDisplayName',
+        recommendedValue: 'pRecommended'
+      }]);
       expect(instanceObject.applyRecommendation('pName', 'pFile', 'pGroup', 'pRecommended1', 'pInitial', ['p_id1'])).to.eql({
         saveRecommended: true,
         saveRecommendedDefault: true,
@@ -92,7 +93,7 @@ describe('App.ConfigRecommendations', function() {
         recommendedValue: 'pRecommended1'
       });
     });
-	});
+  });
 
   describe('#formatParentProperties', function() {
     beforeEach(function() {
@@ -111,152 +112,175 @@ describe('App.ConfigRecommendations', function() {
     });
   });
 
-	describe('#addRecommendation', function() {
-		var cases = [
-			{
-				title: 'add recommendation with full info',
-				name: 'pName', file: 'pFile.xml', group: 'pGroup', recommended: 'pRecommended', initial: 'pInitial', parent: ['p_id'],
-				service: Em.Object.create({serviceName: 'sName', displayName: 'sDisplayName'}),
-				result: {
-					saveRecommended: true,
-					saveRecommendedDefault: true,
-					propertyFileName: 'pFile',
-					propertyName: 'pName',
-					isDeleted: false,
-					notDefined: false,
-					configGroup: 'pGroup',
-					initialValue: 'pInitial',
-					parentConfigs: ['p_id'],
-					serviceName: 'sName',
-					allowChangeGroup: false,
-					serviceDisplayName: 'sDisplayName',
-					recommendedValue: 'pRecommended'
-				}
-			},
-			{
-				title: 'add recommendation with min info',
-				name: 'pName', file: 'pFile.xml',
-				service: Em.Object.create({serviceName: 'sName', displayName: 'sDisplayName'}),
-				result: {
-					saveRecommended: true,
-					saveRecommendedDefault: true,
-					propertyFileName: 'pFile',
-					propertyName: 'pName',
-					isDeleted: true,
-					notDefined: true,
-					configGroup: 'Default',
-					initialValue: undefined,
-					parentConfigs: [],
-					serviceName: 'sName',
-					allowChangeGroup: false,
-					serviceDisplayName: 'sDisplayName',
-					recommendedValue: undefined
-				}
-			}
-		];
-		cases.forEach(function(c) {
-			describe('successful add recommendation', function() {
-				var recommendation;
-				beforeEach(function() {
-					instanceObject.set('recommendations', []);
-					sinon.stub(App.config, 'get').withArgs('serviceByConfigTypeMap').returns({
-						'pFile': c.service
-					});
-					sinon.stub(Handlebars, 'SafeString');
-					recommendation = instanceObject.addRecommendation(c.name, c.file, c.group, c.recommended, c.initial, c.parent);
-				});
-
-				afterEach(function() {
-					App.config.get.restore();
-					Handlebars.SafeString.restore();
-				});
-
-				it(c.title, function() {
-					expect(recommendation).to.eql(c.result);
-				});
-
-				it(c.title + ' check recommendations collection', function() {
-					expect(instanceObject.get('recommendations.0')).to.eql(c.result);
-				});
-			})
-		});
-
-		it('throw exception when name, fileName', function() {
-			expect(instanceObject.addRecommendation.bind()).to.throw(Error, 'name and fileName should be defined');
-			expect(instanceObject.addRecommendation.bind(null, 'fname')).to.throw(Error, 'name and fileName should be defined');
-			expect(instanceObject.addRecommendation.bind('name', null)).to.throw(Error, 'name and fileName should be defined');
-		});
-	});
-
-	describe('#removeRecommendationObject', function () {
-		var recommendations = [
-			{
-				propertyName: 'p1',
-				propertyFileName: 'f1'
-			},
-			{
-				propertyName: 'p2',
-				propertyFileName: 'f2'
-			}
-		];
-
-		beforeEach(function () {
-			instanceObject.set('recommendations', recommendations);
-		});
-
-		it('remove recommendation', function () {
-			instanceObject.removeRecommendationObject(recommendations[1]);
-
-			expect(instanceObject.get('recommendations.length')).to.equal(1);
-			expect(instanceObject.get('recommendations.0')).to.eql({
-				propertyName: 'p1',
-				propertyFileName: 'f1'
-			});
-		});
-
-		it('remove recommendation that is not exist (don\'t do anything)', function () {
-			instanceObject.removeRecommendationObject({propertyName: 'any', 'propertyFileName': 'aby'});
-			expect(instanceObject.get('recommendations')).to.eql(recommendations);
-		});
-
-		it('throw error if recommendation is undefined ', function () {
-			expect(instanceObject.removeRecommendationObject.bind()).to.throw(Error, 'recommendation should be defined object');
-			expect(instanceObject.removeRecommendationObject.bind(null)).to.throw(Error, 'recommendation should be defined object');
-		});
-
-		it('throw error if recommendation is not an object ', function () {
-			expect(instanceObject.removeRecommendationObject.bind('recommendation')).to.throw(Error, 'recommendation should be defined object');
-			expect(instanceObject.removeRecommendationObject.bind(['recommendation'])).to.throw(Error, 'recommendation should be defined object');
-		});
-	});
-
-	describe('#updateRecommendation', function () {
-		it('update recommended value and parent properties', function () {
-			expect(instanceObject.updateRecommendation({'recommendedValue': 'v2', parentConfigs: ['id1']}, 'v1', ['id2']))
-				.to.eql({'recommendedValue': 'v1', parentConfigs: ['id2', 'id1']});
-		});
-
-		it('update recommended value and add parent properties', function () {
-			expect(instanceObject.updateRecommendation({}, 'v1', ['id1'])).to.eql({'recommendedValue': 'v1', parentConfigs: ['id1']});
-		});
-
-		it('update recommended value', function () {
-			expect(instanceObject.updateRecommendation({}, 'v1')).to.eql({'recommendedValue': 'v1'});
-			expect(instanceObject.updateRecommendation({'recommendedValue': 'v1'}, 'v2')).to.eql({'recommendedValue': 'v2'});
-		});
-
-		it('throw error if recommendation is undefined ', function () {
-			expect(instanceObject.updateRecommendation.bind()).to.throw(Error, 'recommendation should be defined object');
-			expect(instanceObject.updateRecommendation.bind(null)).to.throw(Error, 'recommendation should be defined object');
-		});
-
-		it('throw error if recommendation is not an object ', function () {
-			expect(instanceObject.updateRecommendation.bind('recommendation')).to.throw(Error, 'recommendation should be defined object');
-			expect(instanceObject.updateRecommendation.bind(['recommendation'])).to.throw(Error, 'recommendation should be defined object');
-		});
-	});
-
-	describe('#saveRecommendation', function() {
+  describe('#addRecommendation', function() {
+    var cases = [
+      {
+        title: 'add recommendation for editable property with full info',
+        name: 'pName', file: 'pFile.xml', group: 'pGroup', recommended: 'pRecommended', initial: 'pInitial', parent: ['p_id'], isEditable: true,
+        service: Em.Object.create({serviceName: 'sName', displayName: 'sDisplayName'}),
+        result: {
+          saveRecommended: true,
+          saveRecommendedDefault: true,
+          propertyFileName: 'pFile',
+          propertyName: 'pName',
+          isDeleted: false,
+          notDefined: false,
+          configGroup: 'pGroup',
+          initialValue: 'pInitial',
+          parentConfigs: ['p_id'],
+          serviceName: 'sName',
+          allowChangeGroup: false,
+          serviceDisplayName: 'sDisplayName',
+          recommendedValue: 'pRecommended',
+          isEditable: true
+        }
+      },
+      {
+        title: 'add recommendation for read-only property with full info',
+        name: 'pName', file: 'pFile.xml', group: 'pGroup', recommended: 'pRecommended', initial: 'pInitial', parent: ['p_id'], isEditable: false,
+        service: Em.Object.create({serviceName: 'sName', displayName: 'sDisplayName'}),
+        result: {
+          saveRecommended: true,
+          saveRecommendedDefault: true,
+          propertyFileName: 'pFile',
+          propertyName: 'pName',
+          isDeleted: false,
+          notDefined: false,
+          configGroup: 'pGroup',
+          initialValue: 'pInitial',
+          parentConfigs: ['p_id'],
+          serviceName: 'sName',
+          allowChangeGroup: false,
+          serviceDisplayName: 'sDisplayName',
+          recommendedValue: 'pRecommended',
+          isEditable: false
+        }
+      },
+      {
+        title: 'add recommendation with min info',
+        name: 'pName', file: 'pFile.xml',
+        service: Em.Object.create({serviceName: 'sName', displayName: 'sDisplayName'}),
+        result: {
+          saveRecommended: true,
+          saveRecommendedDefault: true,
+          propertyFileName: 'pFile',
+          propertyName: 'pName',
+          isDeleted: true,
+          notDefined: true,
+          configGroup: 'Default',
+          initialValue: undefined,
+          parentConfigs: [],
+          serviceName: 'sName',
+          allowChangeGroup: false,
+          serviceDisplayName: 'sDisplayName',
+          recommendedValue: undefined,
+          isEditable: true
+        }
+      }
+    ];
+    cases.forEach(function(c) {
+      describe('successful add recommendation', function() {
+        var recommendation;
+        beforeEach(function() {
+          instanceObject.set('recommendations', []);
+          sinon.stub(App.config, 'get').withArgs('serviceByConfigTypeMap').returns({
+            'pFile': c.service
+          });
+          sinon.stub(Handlebars, 'SafeString');
+          recommendation = instanceObject.addRecommendation(c.name, c.file, c.group, c.recommended, c.initial, c.parent, c.isEditable);
+        });
+
+        afterEach(function() {
+          App.config.get.restore();
+          Handlebars.SafeString.restore();
+        });
+
+        it(c.title, function() {
+          expect(recommendation).to.eql(c.result);
+        });
+
+        it(c.title + ' check recommendations collection', function() {
+          expect(instanceObject.get('recommendations.0')).to.eql(c.result);
+        });
+      })
+    });
+
+    it('throw exception when name, fileName', function() {
+      expect(instanceObject.addRecommendation.bind()).to.throw(Error, 'name and fileName should be defined');
+      expect(instanceObject.addRecommendation.bind(null, 'fname')).to.throw(Error, 'name and fileName should be defined');
+      expect(instanceObject.addRecommendation.bind('name', null)).to.throw(Error, 'name and fileName should be defined');
+    });
+  });
+
+  describe('#removeRecommendationObject', function () {
+    var recommendations = [
+      {
+        propertyName: 'p1',
+        propertyFileName: 'f1'
+      },
+      {
+        propertyName: 'p2',
+        propertyFileName: 'f2'
+      }
+    ];
+
+    beforeEach(function () {
+      instanceObject.set('recommendations', recommendations);
+    });
+
+    it('remove recommendation', function () {
+      instanceObject.removeRecommendationObject(recommendations[1]);
+
+      expect(instanceObject.get('recommendations.length')).to.equal(1);
+      expect(instanceObject.get('recommendations.0')).to.eql({
+        propertyName: 'p1',
+        propertyFileName: 'f1'
+      });
+    });
+
+    it('remove recommendation that is not exist (don\'t do anything)', function () {
+      instanceObject.removeRecommendationObject({propertyName: 'any', 'propertyFileName': 'aby'});
+      expect(instanceObject.get('recommendations')).to.eql(recommendations);
+    });
+
+    it('throw error if recommendation is undefined ', function () {
+      expect(instanceObject.removeRecommendationObject.bind()).to.throw(Error, 'recommendation should be defined object');
+      expect(instanceObject.removeRecommendationObject.bind(null)).to.throw(Error, 'recommendation should be defined object');
+    });
+
+    it('throw error if recommendation is not an object ', function () {
+      expect(instanceObject.removeRecommendationObject.bind('recommendation')).to.throw(Error, 'recommendation should be defined object');
+      expect(instanceObject.removeRecommendationObject.bind(['recommendation'])).to.throw(Error, 'recommendation should be defined object');
+    });
+  });
+
+  describe('#updateRecommendation', function () {
+    it('update recommended value and parent properties', function () {
+      expect(instanceObject.updateRecommendation({'recommendedValue': 'v2', parentConfigs: ['id1']}, 'v1', ['id2']))
+        .to.eql({'recommendedValue': 'v1', parentConfigs: ['id2', 'id1']});
+    });
+
+    it('update recommended value and add parent properties', function () {
+      expect(instanceObject.updateRecommendation({}, 'v1', ['id1'])).to.eql({'recommendedValue': 'v1', parentConfigs: ['id1']});
+    });
+
+    it('update recommended value', function () {
+      expect(instanceObject.updateRecommendation({}, 'v1')).to.eql({'recommendedValue': 'v1'});
+      expect(instanceObject.updateRecommendation({'recommendedValue': 'v1'}, 'v2')).to.eql({'recommendedValue': 'v2'});
+    });
+
+    it('throw error if recommendation is undefined ', function () {
+      expect(instanceObject.updateRecommendation.bind()).to.throw(Error, 'recommendation should be defined object');
+      expect(instanceObject.updateRecommendation.bind(null)).to.throw(Error, 'recommendation should be defined object');
+    });
+
+    it('throw error if recommendation is not an object ', function () {
+      expect(instanceObject.updateRecommendation.bind('recommendation')).to.throw(Error, 'recommendation should be defined object');
+      expect(instanceObject.updateRecommendation.bind(['recommendation'])).to.throw(Error, 'recommendation should be defined object');
+    });
+  });
+
+  describe('#saveRecommendation', function() {
 
     it('skip update since values are same', function() {
       expect(instanceObject.saveRecommendation({saveRecommended: false, saveRecommendedDefault: false}, false)).to.be.false;
@@ -282,122 +306,122 @@ describe('App.ConfigRecommendations', function() {
       expect(instanceObject.updateRecommendation.bind('recommendation')).to.throw(Error, 'recommendation should be defined object');
       expect(instanceObject.updateRecommendation.bind(['recommendation'])).to.throw(Error, 'recommendation should be defined object');
     });
-	});
-
-	describe('#getRecommendation', function () {
-		var recommendations = [
-			{
-				propertyName: 'p1',
-				propertyFileName: 'f1',
-				configGroup: 'Default'
-			},
-			{
-				propertyName: 'p2',
-				propertyFileName: 'f2',
-				configGroup: 'group1'
-			},
-			{
-				propertyName: 'p1',
-				propertyFileName: 'f1',
-				configGroup: 'group1'
-			}
-		];
-
-		beforeEach(function () {
-			instanceObject.set('recommendations', recommendations);
-		});
-
-		it('get recommendation for default group', function () {
-			expect(instanceObject.getRecommendation('p1', 'f1')).to.eql(recommendations[0]);
-		});
-
-		it('get recommendation for default group (2)', function () {
-			expect(instanceObject.getRecommendation('p1', 'f1', 'group1')).to.eql(recommendations[2]);
-		});
-
-		it('get recommendation for wrong group', function () {
-			expect(instanceObject.getRecommendation('p2', 'f2', 'group2')).to.equal(null);
-		});
-
-		it('get undefined recommendation', function () {
-			expect(instanceObject.getRecommendation('some', 'amy')).to.equal(null);
-		});
-
-		it('get throw error if undefined name or fileName passed', function () {
-			expect(instanceObject.getRecommendation.bind()).to.throw(Error, 'name and fileName should be defined');
-			expect(instanceObject.getRecommendation.bind('name')).to.throw(Error, 'name and fileName should be defined');
-			expect(instanceObject.getRecommendation.bind(null, 'fileName')).to.throw(Error, 'name and fileName should be defined');
-		});
-	});
-
-	describe('#cleanUpRecommendations', function() {
-		var cases = [
-			{
-				title: 'remove recommendations with same init and recommended values',
-				recommendations: [{
-					initialValue: 'v1', recommendedValue: 'v1'
-				}, {
-						initialValue: 'v1', recommendedValue: 'v2'
-				}],
-				cleanUpRecommendations: [{
-					initialValue: 'v1', recommendedValue: 'v2'
-				}]
-			},
-			{
-				title: 'remove recommendations with null init and recommended values',
-				recommendations: [{
-					initialValue: null, recommendedValue: null
-				}, {
-					recommendedValue: null
-				}, {
-					initialValue: null
-				},{
-					initialValue: null, recommendedValue: 'v1'
-				}, {
-					initialValue: 'v1', recommendedValue: null
-				}],
-				cleanUpRecommendations: [{
-					initialValue: null, recommendedValue: 'v1'
-				}, {
-					initialValue: 'v1', recommendedValue: null
-				}
-				]
-			}
-		];
-
-		cases.forEach(function(c) {
-			describe(c.title, function() {
-				beforeEach(function() {
-					instanceObject.set('recommendations', c.recommendations);
-					instanceObject.cleanUpRecommendations()
-				});
-				it('do clean up', function() {
-					expect(instanceObject.get('recommendations')).to.eql(c.cleanUpRecommendations);
-				});
-			});
-		});
-	});
-
-	describe('#clearRecommendationsByServiceName', function () {
-		beforeEach(function () {
-			instanceObject.set('recommendations', [{serviceName: 's1'}, {serviceName: 's2'}, {serviceName: 's3'}]);
-		});
-
-		it('remove with specific service names ', function () {
-			instanceObject.clearRecommendationsByServiceName(['s2','s3']);
-			expect(instanceObject.get('recommendations')).to.eql([{serviceName: 's1'}]);
-		});
-	});
-
-	describe('#clearAllRecommendations', function () {
-		beforeEach(function () {
-			instanceObject.set('recommendations', [{anyObject: 'o1'}, {anyObject: 'o2'}]);
-		});
-
-		it('remove all recommendations', function () {
-			instanceObject.clearAllRecommendations();
-			expect(instanceObject.get('recommendations.length')).to.equal(0);
-		});
-	});
+  });
+
+  describe('#getRecommendation', function () {
+    var recommendations = [
+      {
+        propertyName: 'p1',
+        propertyFileName: 'f1',
+        configGroup: 'Default'
+      },
+      {
+        propertyName: 'p2',
+        propertyFileName: 'f2',
+        configGroup: 'group1'
+      },
+      {
+        propertyName: 'p1',
+        propertyFileName: 'f1',
+        configGroup: 'group1'
+      }
+    ];
+
+    beforeEach(function () {
+      instanceObject.set('recommendations', recommendations);
+    });
+
+    it('get recommendation for default group', function () {
+      expect(instanceObject.getRecommendation('p1', 'f1')).to.eql(recommendations[0]);
+    });
+
+    it('get recommendation for default group (2)', function () {
+      expect(instanceObject.getRecommendation('p1', 'f1', 'group1')).to.eql(recommendations[2]);
+    });
+
+    it('get recommendation for wrong group', function () {
+      expect(instanceObject.getRecommendation('p2', 'f2', 'group2')).to.equal(null);
+    });
+
+    it('get undefined recommendation', function () {
+      expect(instanceObject.getRecommendation('some', 'amy')).to.equal(null);
+    });
+
+    it('get throw error if undefined name or fileName passed', function () {
+      expect(instanceObject.getRecommendation.bind()).to.throw(Error, 'name and fileName should be defined');
+      expect(instanceObject.getRecommendation.bind('name')).to.throw(Error, 'name and fileName should be defined');
+      expect(instanceObject.getRecommendation.bind(null, 'fileName')).to.throw(Error, 'name and fileName should be defined');
+    });
+  });
+
+  describe('#cleanUpRecommendations', function() {
+    var cases = [
+      {
+        title: 'remove recommendations with same init and recommended values',
+        recommendations: [{
+          initialValue: 'v1', recommendedValue: 'v1'
+        }, {
+            initialValue: 'v1', recommendedValue: 'v2'
+        }],
+        cleanUpRecommendations: [{
+          initialValue: 'v1', recommendedValue: 'v2'
+        }]
+      },
+      {
+        title: 'remove recommendations with null init and recommended values',
+        recommendations: [{
+          initialValue: null, recommendedValue: null
+        }, {
+          recommendedValue: null
+        }, {
+          initialValue: null
+        },{
+          initialValue: null, recommendedValue: 'v1'
+        }, {
+          initialValue: 'v1', recommendedValue: null
+        }],
+        cleanUpRecommendations: [{
+          initialValue: null, recommendedValue: 'v1'
+        }, {
+          initialValue: 'v1', recommendedValue: null
+        }
+        ]
+      }
+    ];
+
+    cases.forEach(function(c) {
+      describe(c.title, function() {
+        beforeEach(function() {
+          instanceObject.set('recommendations', c.recommendations);
+          instanceObject.cleanUpRecommendations()
+        });
+        it('do clean up', function() {
+          expect(instanceObject.get('recommendations')).to.eql(c.cleanUpRecommendations);
+        });
+      });
+    });
+  });
+
+  describe('#clearRecommendationsByServiceName', function () {
+    beforeEach(function () {
+      instanceObject.set('recommendations', [{serviceName: 's1'}, {serviceName: 's2'}, {serviceName: 's3'}]);
+    });
+
+    it('remove with specific service names ', function () {
+      instanceObject.clearRecommendationsByServiceName(['s2','s3']);
+      expect(instanceObject.get('recommendations')).to.eql([{serviceName: 's1'}]);
+    });
+  });
+
+  describe('#clearAllRecommendations', function () {
+    beforeEach(function () {
+      instanceObject.set('recommendations', [{anyObject: 'o1'}, {anyObject: 'o2'}]);
+    });
+
+    it('remove all recommendations', function () {
+      instanceObject.clearAllRecommendations();
+      expect(instanceObject.get('recommendations.length')).to.equal(0);
+    });
+  });
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
index 0955a8f..c0d332c 100644
--- a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
+++ b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js
@@ -1090,7 +1090,7 @@ describe('App.EnhancedConfigsMixin', function () {
     };
 
     beforeEach(function() {
-      sinon.stub(App, 'showDependentConfigsPopup', function(r, callback) {
+      sinon.stub(App, 'showDependentConfigsPopup', function(rec, req, callback) {
         callback();
       });
       sinon.stub(mixin, 'onSaveRecommendedPopup');

http://git-wip-us.apache.org/repos/asf/ambari/blob/0ec0597d/ambari-web/test/views/common/modal_popups/dependent_configs_list_popup_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/modal_popups/dependent_configs_list_popup_test.js b/ambari-web/test/views/common/modal_popups/dependent_configs_list_popup_test.js
index 9dc4bf6..b38666d 100644
--- a/ambari-web/test/views/common/modal_popups/dependent_configs_list_popup_test.js
+++ b/ambari-web/test/views/common/modal_popups/dependent_configs_list_popup_test.js
@@ -40,7 +40,7 @@ describe('App.showDependentConfigsPopup', function () {
     beforeEach(function () {
       this.ff = function () {};
       sinon.spy(this, 'ff');
-      view = App.showDependentConfigsPopup([], Em.K, this.ff);
+      view = App.showDependentConfigsPopup([], [], Em.K, this.ff);
     });
 
     afterEach(function () {


[06/50] [abbrv] ambari git commit: AMBARI-19796 Log Search portal date range picker - fix minor issues (mgergely)

Posted by nc...@apache.org.
AMBARI-19796 Log Search portal date range picker - fix minor issues (mgergely)

Change-Id: I39ad475f1a7a91cd0b477b2847b3db8679ea67b0


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 4e689afe5a5bbc04d893b16f1d117988efa3ff3e
Parents: c4f59ef
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Wed Feb 1 10:53:04 2017 +0100
Committer: Miklos Gergely <mg...@hortonworks.com>
Committed: Wed Feb 1 10:53:04 2017 +0100

----------------------------------------------------------------------
 .../other/daterangepicker/js/daterangepicker.js | 90 ++++----------------
 .../src/main/webapp/scripts/utils/ViewUtils.js  |  2 +-
 .../scripts/views/common/DatePickerLayout.js    | 40 ++++-----
 3 files changed, 36 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4e689afe/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/libs/other/daterangepicker/js/daterangepicker.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/libs/other/daterangepicker/js/daterangepicker.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/libs/other/daterangepicker/js/daterangepicker.js
index dc571e8..e88b45f 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/libs/other/daterangepicker/js/daterangepicker.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/libs/other/daterangepicker/js/daterangepicker.js
@@ -49,7 +49,6 @@
         this.linkedCalendars = true;
         this.autoUpdateInput = true;
         this.alwaysShowCalendars = false;
-        this.ranges = {};
 
         this.opens = 'right';
         if (this.element.hasClass('pull-right'))
@@ -301,45 +300,8 @@
         }
 
         if (typeof options.ranges === 'object') {
-            for (range in options.ranges) {
-
-                if (typeof options.ranges[range][0] === 'string')
-                    start = moment(options.ranges[range][0], this.locale.format);
-                else
-                    start = moment(options.ranges[range][0]);
-
-                if (typeof options.ranges[range][1] === 'string')
-                    end = moment(options.ranges[range][1], this.locale.format);
-                else
-                    end = moment(options.ranges[range][1]);
-
-                // If the start or end date exceed those allowed by the minDate or dateLimit
-                // options, shorten the range to the allowable period.
-                if (this.minDate && start.isBefore(this.minDate))
-                    start = this.minDate.clone();
-
-                var maxDate = this.maxDate;
-                if (this.dateLimit && maxDate && start.clone().add(this.dateLimit).isAfter(maxDate))
-                    maxDate = start.clone().add(this.dateLimit);
-                if (maxDate && end.isAfter(maxDate))
-                    end = maxDate.clone();
-
-                // If the end of the range is before the minimum or the start of the range is
-                // after the maximum, don't display this range option at all.
-                if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day')) 
-                  || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))
-                    continue;
-
-                //Support unicode chars in the range names.
-                var elem = document.createElement('textarea');
-                elem.innerHTML = range;
-                var rangeHtml = elem.value;
-
-                this.ranges[rangeHtml] = [start, end];
-            }
-
             var list = '<ul>';
-            for (range in this.ranges) {
+            for (range of options.ranges) {
                 list += '<li data-range-key="' + range + '">' + range + '</li>';
             }
             if (this.showCustomRangeLabel) {
@@ -614,9 +576,9 @@
 
             //highlight any predefined range matching the current start and end dates
             this.container.find('.ranges li').removeClass('active');
+            this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();
             if (this.endDate == null) return;
-
-            this.calculateChosenLabel();
+            this.showCalendars();
         },
 
         renderCalendar: function(side) {
@@ -649,11 +611,14 @@
             }
 
             //populate the calendar with date objects
+            var curDate;
             var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;
-            if (startDay > daysInLastMonth + 1)
-                startDay -= 7;
-
-            var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);
+            if (startDay == daysInLastMonth + 1)
+                curDate = moment([year, month, 1, 12, minute, second]);
+            else if (startDay > daysInLastMonth )
+                curDate = moment([lastYear, lastMonth, startDay-7, 12, minute, second]);
+            else
+                curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);
 
             var col, row;
             for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {
@@ -1180,7 +1145,6 @@
         },
 
         hoverRange: function(e) {
-
             //ignore mouse movements while an above-calendar text input has focus
             if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
                 return;
@@ -1190,7 +1154,8 @@
             if (label == this.locale.customRangeLabel) {
                 this.updateView();
             } else {
-                var dates = this.ranges[label];
+                var Utils = require('utils/Utils');
+                var dates = Utils.dateUtil.getRelativeDateFromString(label);
                 this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));
                 this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));
             }
@@ -1203,7 +1168,8 @@
             if (label == this.locale.customRangeLabel) {
                 this.showCalendars();
             } else {
-                var dates = this.ranges[label];
+                var Utils = require('utils/Utils');
+                var dates = Utils.dateUtil.getRelativeDateFromString(label);
                 this.startDate = dates[0];
                 this.endDate = dates[1];
 
@@ -1346,7 +1312,7 @@
                 }
                 this.setEndDate(date.clone());
                 if (this.autoApply) {
-                  this.calculateChosenLabel();
+                  this.showCalendars();
                   this.clickApply();
                 }
             }
@@ -1364,32 +1330,6 @@
 
         },
 
-        calculateChosenLabel: function() {
-          var customRange = true;
-          var i = 0;
-          for (var range in this.ranges) {
-              if (this.timePicker) {
-                  if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) {
-                      customRange = false;
-                      this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();
-                      break;
-                  }
-              } else {
-                  //ignore times when comparing dates if time picker is not enabled
-                  if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {
-                      customRange = false;
-                      this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();
-                      break;
-                  }
-              }
-              i++;
-          }
-          if (customRange && this.showCustomRangeLabel) {
-              this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();
-              this.showCalendars();
-          }
-        },
-
         clickApply: function(e) {
             this.hide();
             this.element.trigger('apply.daterangepicker', this);

http://git-wip-us.apache.org/repos/asf/ambari/blob/4e689afe/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js
index 6d587cd..9934572 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js
@@ -33,7 +33,7 @@ define(['require',
     var params = Utils.getQueryParams(window.location.search);
     this.defaultParams = {
       q: "*:*",
-      from: moment().hours("00").minutes("00").seconds("01").milliseconds("000").toJSON(),
+      from: moment().hours("00").minutes("00").seconds("00").milliseconds("000").toJSON(),
       to: moment().hours("23").minutes("59").seconds("59").milliseconds("999").toJSON(),
       unit: "+1HOUR",
       level: "FATAL,ERROR,WARN"

http://git-wip-us.apache.org/repos/asf/ambari/blob/4e689afe/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/common/DatePickerLayout.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/common/DatePickerLayout.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/common/DatePickerLayout.js
index 3beb776..22a9b30 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/common/DatePickerLayout.js
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/common/DatePickerLayout.js
@@ -69,22 +69,22 @@ define(['require',
                     this.setValues(options);
                 }, this);
                 this.listenTo(this.vent, "date:click", function(options) {
-                	this.isEventTriggerdFromVent = true;
+                    this.isEventTriggerdFromVent = true;
                     this.setValues(options);
                     this.ui.dateRange.data('daterangepicker').clickApply();
                 }, this);
                 this.listenTo(this.vent, "date:getValues", function(obj) {
-                	var dates = this.getValues();
-                	obj.dates = [dates[0], dates[1]];
-                	obj.dateRangeLabel = this.dateRangeLabel;
-                	obj.unit = this.unit;
+                    var dates = this.getValues();
+                    obj.dates = [dates[0], dates[1]];
+                    obj.dateRangeLabel = this.dateRangeLabel;
+                    obj.unit = this.unit;
                 }, this);
 
             },
             onRender: function() {
                 var that = this;
                 if(this.hideFireButton){
-                	this.$(".goBtn").hide();
+                    this.$(".goBtn").hide();
                 }
                 if(this.buttonLabel){
                 	this.$(".goBtn").text(this.buttonLabel);
@@ -128,10 +128,10 @@ define(['require',
                 this.dateRangeLabel = val.dateRangeLabel;
             },
             getValues : function(){
-            	var obj = this.ui.dateRange.data("daterangepicker");
-            	if(obj){
-            		return [obj.startDate, obj.endDate];
-            	}
+                var obj = this.ui.dateRange.data("daterangepicker");
+                if(obj){
+                    return [obj.startDate, obj.endDate];
+                }
             },
             initializeDateRangePicker: function() {
                 var that = this,
@@ -141,7 +141,7 @@ define(['require',
                     ranges[k.text] = [];
                 })
                 this.ui.dateRange.daterangepicker(_.extend({
-                    'ranges': ranges
+                    'ranges': Object.keys(ranges)
                 }, {
                     "timePicker": true,
                     "timePickerIncrement": 1,
@@ -167,15 +167,15 @@ define(['require',
 
 
                 this.ui.dateRange.on('apply.daterangepicker ', function(ev, picker) {
-                	if(! that.isEventTriggerdFromVent && !(_.isUndefined(picker.chosenLabel)) ){
-                		that.dateRangeLabel = picker.chosenLabel;
-                	}else{
-                		that.isEventTriggerdFromVent = false;
-                	}
-                	if (that.dateRangeLabel !== "Custom Range") {
-                		var last1Hour = that.dateUtil.getRelativeDateFromString(that.dateRangeLabel);
-                		that.setDateText(last1Hour[0], last1Hour[1]);  
-                	}
+                    if(! that.isEventTriggerdFromVent && !(_.isUndefined(picker.chosenLabel)) ){
+                        that.dateRangeLabel = picker.chosenLabel;
+                    }else{
+                        that.isEventTriggerdFromVent = false;
+                    }
+                    if (that.dateRangeLabel !== "Custom Range") {
+                        var range = that.dateUtil.getRelativeDateFromString(that.dateRangeLabel);
+                        that.setDateText(range[0], range[1]);  
+                    }
                     that.ui.dateRangeTitle.html(that.dateRangeLabel);
                     that.unit = that.checkDateRange(picker);
                     var options = {


[31/50] [abbrv] ambari git commit: AMBARI-19842. Custom Action should be created without prompting for the action type.(Padma Priya N via gauravn7)

Posted by nc...@apache.org.
AMBARI-19842. Custom Action should be created without prompting for the action type.(Padma Priya N via gauravn7)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: b5ee4c57a0d462e10a753b4613c5c8b118865b19
Parents: db36bd9
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Thu Feb 2 18:12:00 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Thu Feb 2 18:14:10 2017 +0530

----------------------------------------------------------------------
 .../ui/app/components/flow-designer.js          | 11 --------
 .../ui/app/components/workflow-action-editor.js | 14 +++++++++-
 .../ui/app/domain/workflow-importer.js          |  3 +++
 .../app/templates/components/flow-designer.hbs  | 27 +-------------------
 .../components/workflow-action-editor.hbs       |  4 +++
 .../main/resources/ui/app/utils/constants.js    |  2 +-
 6 files changed, 22 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b5ee4c57/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
index ad5f3f8..4618ab6 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
@@ -855,17 +855,6 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
       this.$("#kill-node-dialog").modal("hide");
       this.set('showCreateKillNode', false);
     },
-    addNode(type){
-      if(type === 'custom'){
-        this.$('#customTypeModal').modal('show');
-      }else{
-        this.send('addAction', type);
-      }
-    },
-    createCustomAction(type){
-      this.send('addAction', type);
-      this.set('customActionType', '');
-    },
     addAction(type){
       this.createSnapshot();
       var currentTransition=this.get("currentTransition");

http://git-wip-us.apache.org/repos/asf/ambari/blob/b5ee4c57/contrib/views/wfmanager/src/main/resources/ui/app/components/workflow-action-editor.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/workflow-action-editor.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/workflow-action-editor.js
index 43eeb5b..d09de7d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/workflow-action-editor.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/workflow-action-editor.js
@@ -92,7 +92,19 @@ export default Ember.Component.extend( Ember.Evented,{
       this.set('errors', Ember.A([]));
       let temp = x2js.xml_str2json(vkbeautify.xmlmin(value));
       if(temp){
-        this.set('actionModel', temp[this.get('actionType')]);
+        let tempKeys = Object.keys(temp);
+        let actionType = tempKeys && tempKeys.get('firstObject')? tempKeys.get('firstObject') : this.get('actionType');
+        if(CommonUtils.isSupportedAction(actionType)){
+          this.get('errors').pushObject({message: `Looks like you are creating "${actionType}" action. Please use the ${actionType} action editor.`});
+        }else{
+          this.set('currentNode.actionType', actionType);
+          this.set('actionType', actionType);
+        }
+        if(Ember.isBlank(temp[actionType])){
+          this.set('actionModel', {});
+        }else{
+          this.set('actionModel', temp[actionType]);
+        }
       }else{
         this.get('errors').pushObject({message:'Action Xml is syntatically incorrect'});
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b5ee4c57/contrib/views/wfmanager/src/main/resources/ui/app/domain/workflow-importer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/domain/workflow-importer.js b/contrib/views/wfmanager/src/main/resources/ui/app/domain/workflow-importer.js
index ff75e7e..ae566f2 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/domain/workflow-importer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/domain/workflow-importer.js
@@ -77,6 +77,9 @@ var WorkflowImporter= Ember.Object.extend({
     });
 
     importedWfActionVersions._keys.forEach(function(wfActionType){
+      if(!CommonUtils.isSupportedAction(wfActionType)){
+        return;
+      }
       var maxImportedActionVersion = Math.max(...importedWfActionVersions.get(wfActionType));
       var supportedVersions = this.get('schemaVersions').getSupportedVersions(wfActionType);
       importedWfActionVersions.get(wfActionType).forEach((version)=>{

http://git-wip-us.apache.org/repos/asf/ambari/blob/b5ee4c57/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
index df0a9ba..b9ecb11 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
@@ -268,7 +268,7 @@
         {{/if}}
       </div>
       <div id="workflow-actions" class="hidden">
-        {{workflow-actions element=popOverElement addNode="addNode" pasteNode="pasteNode" showImportActionNodeFileBrowser="showImportActionNodeFileBrowser" importActionNodeLocalFS="importActionNodeLocalFS" showAssetNodeList="showAssetNodeList" clipboard=clipboard}}
+        {{workflow-actions element=popOverElement addNode="addAction" pasteNode="pasteNode" showImportActionNodeFileBrowser="showImportActionNodeFileBrowser" importActionNodeLocalFS="importActionNodeLocalFS" showAssetNodeList="showAssetNodeList" clipboard=clipboard}}
       </div>
     </div>
   </div>
@@ -379,28 +379,3 @@
 {{#if showKillNodeManager}}
   {{#killnode-manager killNodes=workflow.killNodes killNode=killNode createKillnodeError=createKillnodeError createKillNode="createKillNode" deleteNode="deleteNode" addKillNodeMode=addKillNodeMode editMode=editMode closeKillNodeManager="closeKillNodeManager"}}{{/killnode-manager}}
 {{/if}}
-
-<div id="customTypeModal" class="modal fade" role="dialog">
-  <div class="modal-dialog">
-    <div class="modal-content">
-      <div class="modal-header">
-        <button type="button" class="close" data-dismiss="modal">&times;</button>
-        <h4 class="modal-title">Custom Action</h4>
-      </div>
-      <div class="modal-body">
-        <form class="form-horizontal">
-          <div class="form-group">
-            <label for="inputEmail" class="control-label col-xs-2">Type</label>
-            <div class="col-xs-7">
-              {{input type="text" class="form-control" name="job-tracker" value=customActionType placeholder="Custom Action Type"}}
-            </div>
-          </div>
-        </form>
-      </div>
-      <div class="modal-footer">
-        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-        <button type="button" class="btn btn-primary" data-dismiss="modal" {{action 'createCustomAction' customActionType}}>OK</button>
-      </div>
-    </div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b5ee4c57/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
index 0c569ec..0810f64 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-action-editor.hbs
@@ -68,6 +68,10 @@
                     <div class="panel panel-default">
                       <div class="panel-heading">Action XML</div>
                       <div class="panel-body handlerPanel">
+                        <div class="alert alert-info alert-dismissible" role="alert">
+                          <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                           Action extension should be configured in Oozie for the custom action to work.
+                        </div>
                         {{designer-errors errors=errors}}
                         {{textarea class="custom-action-xml" value=actionXml}}
                       </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b5ee4c57/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js b/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
index 1dd1c31..e410262 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
@@ -89,5 +89,5 @@ export default Ember.Object.create({
   elConstants : [
     '${YEAR}', '${MONTH}', '${DAY}', '${HOUR}', '${MINUTE}'
   ],
-  customActionEnabled : false
+  customActionEnabled : true
 });


[39/50] [abbrv] ambari git commit: AMBARI-19825 : Metrics data is not getting collected for different services when AMS HTTPS is enabled. (avijayan)

Posted by nc...@apache.org.
AMBARI-19825 : Metrics data is not getting collected for different services when AMS HTTPS is enabled. (avijayan)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: 9c1b153e21f04d96f0afa806436c8e4d702be0cc
Parents: 5d4d99e
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Thu Feb 2 10:29:14 2017 -0800
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Thu Feb 2 10:29:14 2017 -0800

----------------------------------------------------------------------
 .../metrics2/sink/flume/FlumeTimelineMetricsSink.java     |  3 ++-
 .../metrics2/sink/timeline/HadoopTimelineMetricsSink.java |  6 +++---
 .../server/metrics/system/impl/AmbariMetricSinkImpl.java  | 10 ++++++++++
 3 files changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9c1b153e/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java b/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
index c1b684b..86e092a 100644
--- a/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
+++ b/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
@@ -107,13 +107,14 @@ public class FlumeTimelineMetricsSink extends AbstractTimelineMetricsSink implem
     // Initialize the collector write strategy
     super.init();
 
-    collectorUri = constructTimelineMetricUri(protocol, findPreferredCollectHost(), port);
     if (protocol.contains("https")) {
       String trustStorePath = configuration.getProperty(SSL_KEYSTORE_PATH_PROPERTY).trim();
       String trustStoreType = configuration.getProperty(SSL_KEYSTORE_TYPE_PROPERTY).trim();
       String trustStorePwd = configuration.getProperty(SSL_KEYSTORE_PASSWORD_PROPERTY).trim();
       loadTruststore(trustStorePath, trustStoreType, trustStorePwd);
     }
+    collectorUri = constructTimelineMetricUri(protocol, findPreferredCollectHost(), port);
+
     pollFrequency = Long.parseLong(configuration.getProperty("collectionFrequency"));
 
     String[] metrics = configuration.getProperty(COUNTER_METRICS_PROPERTY).trim().split(",");

http://git-wip-us.apache.org/repos/asf/ambari/blob/9c1b153e/ambari-metrics/ambari-metrics-hadoop-sink/src/main/java/org/apache/hadoop/metrics2/sink/timeline/HadoopTimelineMetricsSink.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-hadoop-sink/src/main/java/org/apache/hadoop/metrics2/sink/timeline/HadoopTimelineMetricsSink.java b/ambari-metrics/ambari-metrics-hadoop-sink/src/main/java/org/apache/hadoop/metrics2/sink/timeline/HadoopTimelineMetricsSink.java
index 7c85171..14df30c 100644
--- a/ambari-metrics/ambari-metrics-hadoop-sink/src/main/java/org/apache/hadoop/metrics2/sink/timeline/HadoopTimelineMetricsSink.java
+++ b/ambari-metrics/ambari-metrics-hadoop-sink/src/main/java/org/apache/hadoop/metrics2/sink/timeline/HadoopTimelineMetricsSink.java
@@ -107,15 +107,15 @@ public class HadoopTimelineMetricsSink extends AbstractTimelineMetricsSink imple
     if (collectorHosts.isEmpty()) {
       LOG.error("No Metric collector configured.");
     } else {
-      String preferredCollectorHost = findPreferredCollectHost();
-      collectorUri = constructTimelineMetricUri(protocol, preferredCollectorHost, port);
-      containerMetricsUri = constructContainerMetricUri(protocol, preferredCollectorHost, port);
       if (protocol.contains("https")) {
         String trustStorePath = conf.getString(SSL_KEYSTORE_PATH_PROPERTY).trim();
         String trustStoreType = conf.getString(SSL_KEYSTORE_TYPE_PROPERTY).trim();
         String trustStorePwd = conf.getString(SSL_KEYSTORE_PASSWORD_PROPERTY).trim();
         loadTruststore(trustStorePath, trustStoreType, trustStorePwd);
       }
+      String preferredCollectorHost = findPreferredCollectHost();
+      collectorUri = constructTimelineMetricUri(protocol, preferredCollectorHost, port);
+      containerMetricsUri = constructContainerMetricUri(protocol, preferredCollectorHost, port);
     }
 
     LOG.info("Collector Uri: " + collectorUri);

http://git-wip-us.apache.org/repos/asf/ambari/blob/9c1b153e/ambari-server/src/main/java/org/apache/ambari/server/metrics/system/impl/AmbariMetricSinkImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/metrics/system/impl/AmbariMetricSinkImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/metrics/system/impl/AmbariMetricSinkImpl.java
index 71142d7..a666e6e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/metrics/system/impl/AmbariMetricSinkImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/metrics/system/impl/AmbariMetricSinkImpl.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 
+import org.apache.ambari.server.configuration.ComponentSSLConfiguration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.internal.AbstractControllerResourceProvider;
 import org.apache.ambari.server.controller.internal.ServiceConfigVersionResourceProvider;
@@ -156,6 +157,15 @@ public class AmbariMetricSinkImpl extends AbstractTimelineMetricsSink implements
 
     hostName = configuration.getProperty("ambariserver.hostname.override", getDefaultLocalHostName());
     LOG.info("Hostname used for ambari server metrics : " + hostName);
+
+    if (protocol.contains("https")) {
+      ComponentSSLConfiguration sslConfiguration = ComponentSSLConfiguration.instance();
+      String trustStorePath = sslConfiguration.getTruststorePath();
+      String trustStoreType = sslConfiguration.getTruststoreType();
+      String trustStorePwd = sslConfiguration.getTruststorePassword();
+      loadTruststore(trustStorePath, trustStoreType, trustStorePwd);
+    }
+
     collectorUri = getCollectorUri(findPreferredCollectHost());
 
     int maxRowCacheSize = Integer.parseInt(configuration.getProperty(MAX_METRIC_ROW_CACHE_SIZE,