You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2017/03/09 16:39:30 UTC

[01/50] [abbrv] ambari git commit: Revert "AMBARI-20275. Credential Store should be enabled by default on fresh installs (Madhuvanthi Radhakrishnan via smohanty)" [Forced Update!]

Repository: ambari
Updated Branches:
  refs/heads/branch-dev-logsearch 80094e91b -> 245fd5cf3 (forced update)


Revert "AMBARI-20275. Credential Store should be enabled by default on fresh installs (Madhuvanthi Radhakrishnan via smohanty)"

This reverts commit 9ce7d709e26b3d598c1d21b5bf84e345eaf50d98.


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

Branch: refs/heads/branch-dev-logsearch
Commit: 34eafc341782ecf8795eaa0b8f78477db2db9e38
Parents: 23a2715
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Sat Mar 4 08:36:57 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Sat Mar 4 08:36:57 2017 -0800

----------------------------------------------------------------------
 .../main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml    | 1 -
 .../src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml   | 2 +-
 .../src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml  | 2 +-
 3 files changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/34eafc34/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
index fa9548b..245a94d 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
@@ -28,7 +28,6 @@
       <credential-store>
         <supported>true</supported>
         <enabled>true</enabled>
-        <required>true</required>
       </credential-store>
 
       <components>

http://git-wip-us.apache.org/repos/asf/ambari/blob/34eafc34/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
index f2a1161..4230dd4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
@@ -23,7 +23,7 @@
       <version>1.2.1.2.5</version>
       <credential-store>
         <supported>true</supported>
-        <enabled>true</enabled>
+        <enabled>false</enabled>
       </credential-store>
       <components>
         <component>

http://git-wip-us.apache.org/repos/asf/ambari/blob/34eafc34/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
index 05b1543..75aa9d9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
@@ -22,7 +22,7 @@
       <name>OOZIE</name>
       <credential-store>
         <supported>true</supported>
-        <enabled>true</enabled>
+        <enabled>false</enabled>
       </credential-store>
       <extends>common-services/OOZIE/4.2.0.2.5</extends>
     </service>


[05/50] [abbrv] ambari git commit: AMBARI-20200: hive-site.xml, hbase-site.xml, etc. are not found in class path for Zeppelin (Prabhjyot Singh via r-kamath)

Posted by ol...@apache.org.
AMBARI-20200: hive-site.xml, hbase-site.xml, etc. are not found in class path for Zeppelin (Prabhjyot Singh via r-kamath)


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

Branch: refs/heads/branch-dev-logsearch
Commit: b2f560adff7bf8c70e24c75e8e5c36da24ad97cc
Parents: 0bbd545
Author: Renjith Kamath <re...@gmail.com>
Authored: Mon Mar 6 15:49:12 2017 +0530
Committer: Renjith Kamath <re...@gmail.com>
Committed: Mon Mar 6 15:49:12 2017 +0530

----------------------------------------------------------------------
 .../0.6.0.2.5/configuration/zeppelin-env.xml    |  2 +-
 .../0.6.0.2.5/package/scripts/master.py         | 36 +++++++++++++++-----
 .../0.6.0.2.5/package/scripts/params.py         |  8 +++++
 3 files changed, 37 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b2f560ad/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-env.xml b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-env.xml
index 677158c..bdef319 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-env.xml
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-env.xml
@@ -89,7 +89,7 @@ export ZEPPELIN_PID_DIR={{zeppelin_pid_dir}}
 # export ZEPPELIN_NOTEBOOK_STORAGE            # Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote).
 # export ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC       # If there are multiple notebook storages, should we treat the first one as the only source of truth?
 # export ZEPPELIN_NOTEBOOK_PUBLIC             # Make notebook public by default when created, private otherwise
-
+export ZEPPELIN_INTP_CLASSPATH_OVERRIDES="{{external_dependency_conf}}"
 #### Spark interpreter configuration ####
 
 ## Use provided spark installation ##

http://git-wip-us.apache.org/repos/asf/ambari/blob/b2f560ad/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
index 8a1fad6..fc24918 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
@@ -106,6 +106,17 @@ class Master(Script):
               mode=0755
               )
 
+  def create_zeppelin_hdfs_conf_dir(self, env):
+    import params
+    env.set_params(params)
+    Directory([params.external_dependency_conf],
+              owner=params.zeppelin_user,
+              group=params.zeppelin_group,
+              cd_access="a",
+              create_parents=True,
+              mode=0755
+              )
+
   def chown_zeppelin_pid_dir(self, env):
     import params
     env.set_params(params)
@@ -150,17 +161,26 @@ class Master(Script):
     File(format("{params.conf_dir}/log4j.properties"), content=params.log4j_properties_content,
          owner=params.zeppelin_user, group=params.zeppelin_group)
 
+    self.create_zeppelin_hdfs_conf_dir(env)
     # copy hive-site.xml only if Spark 1.x is installed
-    if 'spark-defaults' in params.config['configurations'] and \
-        os.path.exists("/etc/spark/conf/hive-site.xml"):
-        File(format("{params.conf_dir}/hive-site.xml"), content=StaticFile("/etc/spark/conf/hive-site.xml"),
-             owner=params.zeppelin_user, group=params.zeppelin_group)
+    if 'spark-defaults' in params.config['configurations'] and params.is_hive_installed:
+      XmlConfig("hive-site.xml",
+              conf_dir=params.external_dependency_conf,
+              configurations=params.spark_hive_properties,
+              owner=params.zeppelin_user,
+              group=params.zeppelin_group,
+              mode=0644)
 
-    if len(params.hbase_master_hosts) > 0 and \
-        os.path.exists("/etc/hbase/conf/hbase-site.xml"):
+    if len(params.hbase_master_hosts) > 0 and params.is_hbase_installed:
       # copy hbase-site.xml
-      File(format("{params.conf_dir}/hbase-site.xml"), content=StaticFile("/etc/hbase/conf/hbase-site.xml"),
-           owner=params.zeppelin_user, group=params.zeppelin_group)
+      XmlConfig("hbase-site.xml",
+              conf_dir=params.external_dependency_conf,
+              configurations=params.config['configurations']['hbase-site'],
+              configuration_attributes=params.config['configuration_attributes']['hbase-site'],
+              owner=params.zeppelin_user,
+              group=params.zeppelin_group,
+              mode=0644
+              )
 
   def stop(self, env, upgrade_type=None):
     import params

http://git-wip-us.apache.org/repos/asf/ambari/blob/b2f560ad/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
index 16a2782..9fd105b 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
@@ -95,6 +95,7 @@ zeppelin_hdfs_user_dir = format("/user/{zeppelin_user}")
 
 zeppelin_dir = os.path.join(*[install_dir, zeppelin_dirname])
 conf_dir = "/etc/zeppelin/conf"
+external_dependency_conf = "/etc/zeppelin/conf/external-dependency-conf"
 notebook_dir = os.path.join(*[install_dir, zeppelin_dirname, 'notebook'])
 
 # zeppelin-env.sh
@@ -121,7 +122,12 @@ hive_metastore_port = None
 hive_server_port = None
 hive_zookeeper_quorum = None
 hive_server2_support_dynamic_service_discovery = None
+is_hive_installed = False
 if 'hive_server_host' in master_configs and len(master_configs['hive_server_host']) != 0:
+  is_hive_installed = True
+  spark_hive_properties = {
+    'hive.metastore.uris': config['configurations']['hive-site']['hive.metastore.uris']
+  }
   hive_server_host = str(master_configs['hive_server_host'][0])
   hive_metastore_host = str(master_configs['hive_metastore_host'][0])
   hive_metastore_port = str(
@@ -133,7 +139,9 @@ if 'hive_server_host' in master_configs and len(master_configs['hive_server_host
 # detect hbase details if installed
 zookeeper_znode_parent = None
 hbase_zookeeper_quorum = None
+is_hbase_installed = False
 if 'hbase_master_hosts' in master_configs and 'hbase-site' in config['configurations']:
+  is_hbase_installed = True
   zookeeper_znode_parent = config['configurations']['hbase-site']['zookeeper.znode.parent']
   hbase_zookeeper_quorum = config['configurations']['hbase-site']['hbase.zookeeper.quorum']
 


[29/50] [abbrv] ambari git commit: AMBARI-20342. WFM:Performance improvement for adding node on a decision node in large workflow.(Padma Priya N via gauravn7)

Posted by ol...@apache.org.
AMBARI-20342. WFM:Performance improvement for adding node on a decision node in large workflow.(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/3fd1c244
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3fd1c244
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3fd1c244

Branch: refs/heads/branch-dev-logsearch
Commit: 3fd1c24442f4c90becff35c004290e829f136318
Parents: 267c98f
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Wed Mar 8 16:57:21 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Wed Mar 8 16:57:21 2017 +0530

----------------------------------------------------------------------
 .../ui/app/components/flow-designer.js          | 73 ++++++++++++--------
 .../ui/app/domain/cytoscape-flow-renderer.js    |  8 ++-
 .../src/main/resources/ui/app/styles/app.less   |  4 ++
 .../app/templates/components/flow-designer.hbs  |  5 ++
 4 files changed, 59 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3fd1c244/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 01f8fe6..37992be 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
@@ -275,15 +275,23 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     this.doValidation();
     this.renderTransitions();
   },
-  rerender(){
-    this.flowRenderer.cleanup();
-    this.renderWorkflow(this.get("workflow"));
+  rerender(callback){
+    this.set('showStatus', true);
+    Ember.run.later(() => {
+      this.flowRenderer.cleanup();
+      this.renderWorkflow(this.get("workflow"));
+      this.set('showStatus', false);
+      if(callback){
+        callback();
+      }
+    }.bind(this));
   },
   setCurrentTransition(transitionInfo){
     this.set("currentTransition", {
       transition : transitionInfo.transition,
       source : transitionInfo.source,
-      target : transitionInfo.target
+      target : transitionInfo.target,
+      originalSource : transitionInfo.originalSource
     });
   },
   actionInfo(node){
@@ -292,8 +300,9 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
   deleteTransition(transition,sourceNode){
     this.createSnapshot();
     this.get("workflow").deleteTransition(transition);
-    this.showUndo('transition');
-    this.rerender();
+    this.rerender(function(){
+      this.showUndo('transition');
+    }.bind(this));
   },
   showWorkflowActionSelect(element){
     var self=this;
@@ -422,12 +431,9 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     var x2js = new X2JS();
     var actionNodeXml = x2js.xml_str2json(actionNodeXmlString);
     var actionNodeType = Object.keys(actionNodeXml)[0];
-    var currentTransition = this.get("currentTransition.transition");
     this.createSnapshot();
-    var transition = this.get("currentTransition").source.transitions.findBy('targetNode.id',currentTransition.targetNode.id);
-    transition.source=this.get("currentTransition").source;
     this.generateUniqueNodeId(actionNodeType);
-    var actionNode = this.get("workflow").addNode(transition,actionNodeType, {}, "");
+    var actionNode = this.get("workflow").addNode(this.getTransitionInfo(),actionNodeType, {}, "");
     this.rerender();
     this.doValidation();
     this.scrollToNewPosition();
@@ -635,9 +641,10 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     } else {
       this.get("workflow").deleteNode(node,transitionslist);
     }
-    this.rerender();
-    this.doValidation();
-    this.showUndo('nodeDeleted');
+    this.rerender(function(){
+      this.doValidation();
+      this.showUndo('nodeDeleted');
+    }.bind(this));
   },
   addWorkflowBranch(node){
     this.createSnapshot();
@@ -749,6 +756,18 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
       return 1;
     }
   },
+  getTransitionInfo(){
+    var currentTransition=this.get("currentTransition.transition");
+    var transition = {};
+    if(this.get("currentTransition").source.type === 'placeholder'){
+      transition = this.get("currentTransition").originalSource.transitions.findBy('targetNode.id',this.get("currentTransition").source.id);
+      transition.source=this.get("currentTransition").originalSource;
+    }else{
+      transition = this.get("currentTransition").source.transitions.findBy('targetNode.id',currentTransition.targetNode.id);
+      transition.source=this.get("currentTransition").source;
+    }
+    return transition;
+  },
   actions:{
     importWorkflowStream(dataStr){
       this.importWorkflowFromFile(dataStr);
@@ -838,24 +857,18 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
       }
       this.get("workflow").createKillNode(this.get('killNode.name'),this.get('killNode.killMessage'));
       this.set('killNode',{});
-      this.rerender();
-      this.layout();
-      this.doValidation();
       this.$("#kill-node-dialog").modal("hide");
       this.set('showCreateKillNode', false);
     },
     addAction(type){
       this.createSnapshot();
-      var currentTransition=this.get("currentTransition.transition");
-      var transition = this.get("currentTransition").source.transitions.findBy('targetNode.id',currentTransition.targetNode.id);
-      transition.source=this.get("currentTransition").source;
-
       let temp = this.generateUniqueNodeId(type);
-      this.get("workflow").addNode(transition, type, {}, temp);
-      this.rerender();
-      this.doValidation();
-      this.scrollToNewPosition();
-      this.showUndo('nodeAdded');
+      this.get("workflow").addNode(this.getTransitionInfo(), type, {}, temp);
+      this.rerender(function(){
+        this.doValidation();
+        this.scrollToNewPosition();
+        this.showUndo('nodeAdded');
+      }.bind(this));
     },
     nameChanged(){
       this.doValidation();
@@ -865,8 +878,7 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     },
     pasteNode(){
       var clipboardContent = this.get('clipboardService').getContent();
-      var currentTransition = this.get("currentTransition.transition");
-      var node = this.get("workflow").addNode(currentTransition, clipboardContent.actionType);
+      var node = this.get("workflow").addNode(this.getTransitionInfo(), clipboardContent.actionType);
       if(clipboardContent.operation === 'cut'){
         node.name = clipboardContent.name;
       }else{
@@ -874,9 +886,10 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
       }
       node.domain = clipboardContent.domain;
       node.actionType = clipboardContent.actionType;
-      this.rerender();
-      this.doValidation();
-      this.scrollToNewPosition();
+      this.rerender(function () {
+        this.doValidation();
+        this.scrollToNewPosition();
+      }.bind(this));
     },
     deleteNode(node){
       this.deleteWorkflowNode(node);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3fd1c244/contrib/views/wfmanager/src/main/resources/ui/app/domain/cytoscape-flow-renderer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/domain/cytoscape-flow-renderer.js b/contrib/views/wfmanager/src/main/resources/ui/app/domain/cytoscape-flow-renderer.js
index f8796ae..bfe59e2 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/domain/cytoscape-flow-renderer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/domain/cytoscape-flow-renderer.js
@@ -250,7 +250,12 @@ var CytoscapeRenderer= Ember.Object.extend({
       }else{
         this.get("context").$(".overlay-trash-transition-icon").hide();
       }
-      this.get("context").$(".overlay-transition-content").data("sourceNode",event.cyTarget.source().data("node"));
+      let srcNode = event.cyTarget.source().data("node");
+      if(srcNode.type === 'placeholder'){
+        let originalSource = event.cyTarget.source().incomers("node").jsons()[0].data.node;
+        this.get("context").$(".overlay-transition-content").data("originalSource", originalSource);
+      }
+      this.get("context").$(".overlay-transition-content").data("sourceNode", srcNode);
       this.get("context").$(".overlay-transition-content").data("targetNode",event.cyTarget.target().data("node"));
       this.get("context").$(".overlay-transition-content").data("transition",event.cyTarget.data().transition);
 
@@ -271,6 +276,7 @@ var CytoscapeRenderer= Ember.Object.extend({
       this.get("context").setCurrentTransition({
         transition : this.get("context").$(".overlay-transition-content").data("transition"),
         source : this.get("context").$(".overlay-transition-content").data("sourceNode"),
+        originalSource : this.get("context").$(".overlay-transition-content").data("originalSource"),
         target : this.get("context").$(".overlay-transition-content").data("targetNode")
       });
       Ember.run.later(this, function() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3fd1c244/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 a424049..a30833c 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
@@ -1756,3 +1756,7 @@ input:invalid {
  pre {
    background-color : white;
  }
+
+.processing-message {
+  padding-left: 48%;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3fd1c244/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 f4d3876..0da9f71 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
@@ -150,6 +150,11 @@
           {{/if}}
         </div>
       {{/if}}
+      {{#if showStatus}}
+        <div id="status-message" class="processing-message">
+          <span class="label label-info">Processing...</span>
+        </div>
+      {{/if}}
       {{#if isWorkflowImporting}}
       <div id="loader">
           <div id="alert"class="alert alert-info alert-dismissible workflow-error" role="alert">


[15/50] [abbrv] ambari git commit: AMBARI-20255 Sometimes the Hosts page shows a different page for page 1. (atkach)

Posted by ol...@apache.org.
AMBARI-20255 Sometimes the Hosts page shows a different page for page 1. (atkach)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 7f9a5123eedb9043ce7102df9ae3cb3f2ebc8f76
Parents: 1b8b91d
Author: Andrii Tkach <at...@apache.org>
Authored: Mon Mar 6 21:10:03 2017 +0200
Committer: Andrii Tkach <at...@apache.org>
Committed: Mon Mar 6 22:26:11 2017 +0200

----------------------------------------------------------------------
 .../app/controllers/global/update_controller.js |  3 +-
 ambari-web/app/controllers/main/host.js         | 25 ++++++------
 .../app/mixins/common/table_server_mixin.js     |  2 +-
 .../mixins/common/table_server_view_mixin.js    |  4 +-
 ambari-web/app/views/common/table_view.js       |  8 ++++
 ambari-web/app/views/main/host.js               |  8 +++-
 .../common/table_server_view_mixin_test.js      | 41 ++++++++------------
 ambari-web/test/views/common/table_view_test.js | 26 ++++++++++++-
 ambari-web/test/views/main/host_test.js         |  6 +++
 9 files changed, 81 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index 7b8a80e..e53f79d 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -244,7 +244,8 @@ App.UpdateController = Em.Controller.extend({
           {
             key: 'Hosts/host_name',
             value: [hostDetailsFilter],
-            type: 'MULTIPLE'
+            type: 'MULTIPLE',
+            isHostDetails: true
           }
         ]);
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/app/controllers/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host.js b/ambari-web/app/controllers/main/host.js
index 336bd25..05551af 100644
--- a/ambari-web/app/controllers/main/host.js
+++ b/ambari-web/app/controllers/main/host.js
@@ -312,17 +312,20 @@ App.MainHostController = Em.ArrayController.extend(App.TableServerMixin, {
       }
     }, this);
 
-    if (queryParams.filterProperty('isFilter').length !== oldProperties.filterProperty('isFilter').length) {
-      queryParams.findProperty('key', 'from').value = 0;
-      this.set('resetStartIndex', true);
-    } else {
-      queryParams.filterProperty('isFilter').forEach(function (queryParam) {
-        var oldProperty = oldProperties.filterProperty('isFilter').findProperty('key', queryParam.key);
-        if (!oldProperty || JSON.stringify(oldProperty.value) !== JSON.stringify(queryParam.value)) {
-          queryParams.findProperty('key', 'from').value = 0;
-          this.set('resetStartIndex', true);
-        }
-      }, this);
+    if (!oldProperties.findProperty('isHostDetails')) {
+      // shouldn't reset start index after coming back from Host Details page
+      if (queryParams.filterProperty('isFilter').length !== oldProperties.filterProperty('isFilter').length) {
+        queryParams.findProperty('key', 'from').value = 0;
+        this.set('resetStartIndex', true);
+      } else {
+        queryParams.filterProperty('isFilter').forEach(function (queryParam) {
+          var oldProperty = oldProperties.filterProperty('isFilter').findProperty('key', queryParam.key);
+          if (!oldProperty || JSON.stringify(oldProperty.value) !== JSON.stringify(queryParam.value)) {
+            queryParams.findProperty('key', 'from').value = 0;
+            this.set('resetStartIndex', true);
+          }
+        }, this);
+      }
     }
 
     if (!skipNonFilterProperties) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/app/mixins/common/table_server_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/table_server_mixin.js b/ambari-web/app/mixins/common/table_server_mixin.js
index 5162a02..c9f0bba 100644
--- a/ambari-web/app/mixins/common/table_server_mixin.js
+++ b/ambari-web/app/mixins/common/table_server_mixin.js
@@ -69,7 +69,7 @@ App.TableServerMixin = Em.Mixin.create({
       startIndex = (startIndex > 0) ? startIndex - 1 : startIndex;
       this.get('paginationProps').findProperty('name', 'startIndex').value = startIndex;
     }
-    return this.get('paginationProps');
+    return this.get('paginationProps').slice(0);
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/app/mixins/common/table_server_view_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/table_server_view_mixin.js b/ambari-web/app/mixins/common/table_server_view_mixin.js
index 4e982d7..d44a09e 100644
--- a/ambari-web/app/mixins/common/table_server_view_mixin.js
+++ b/ambari-web/app/mixins/common/table_server_view_mixin.js
@@ -140,11 +140,9 @@ App.TableServerViewMixin = Em.Mixin.create({
   updatePagination: function (key) {
     if (!Em.isNone(this.get('displayLength'))) {
       App.db.setDisplayLength(this.get('controller.name'), this.get('displayLength'));
-      this.get('controller.paginationProps').findProperty('name', 'displayLength').value = this.get('displayLength');
     }
     if (!Em.isNone(this.get('startIndex'))) {
       App.db.setStartIndex(this.get('controller.name'), this.get('startIndex'));
-      this.get('controller.paginationProps').findProperty('name', 'startIndex').value = this.get('startIndex');
     }
 
     if (key !== 'SKIP_REFRESH') {
@@ -157,6 +155,8 @@ App.TableServerViewMixin = Em.Mixin.create({
   resetStartIndex: function () {
     if (this.get('controller.resetStartIndex') && this.get('filteredCount') > 0) {
       this.set('startIndex', 1);
+      this.saveStartIndex();
+      this.updatePagination('SKIP_REFRESH');
     }
   }.observes('controller.resetStartIndex')
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/app/views/common/table_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/table_view.js b/ambari-web/app/views/common/table_view.js
index b8d4380..4cc266d 100644
--- a/ambari-web/app/views/common/table_view.js
+++ b/ambari-web/app/views/common/table_view.js
@@ -414,6 +414,14 @@ App.TableView = Em.View.extend(App.UserPref, {
     return result;
   },
 
+  clearStartIndex: function() {
+    if (this.get('controller.startIndex') !== 1) {
+      this.set('controller.resetStartIndex', true);
+      return true;
+    }
+    return false;
+  },
+
   /**
    * Contain filter conditions for each column
    * @type {Array}

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/app/views/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js
index a7cdb29..52692cc 100644
--- a/ambari-web/app/views/main/host.js
+++ b/ambari-web/app/views/main/host.js
@@ -170,8 +170,10 @@ App.MainHostView = App.TableView.extend(App.TableServerViewMixin, {
    */
   willInsertElement: function () {
     if (!this.get('controller.showFilterConditionsFirstLoad')) {
-      var didClearedSomething = this.clearFilterConditionsFromLocalStorage();
-      this.set('controller.filterChangeHappened', didClearedSomething);
+      // filters and start index should be cleared when we enter Hosts page
+      var didClearedFilters = this.clearFilterConditionsFromLocalStorage();
+      var didClearStartIndex = this.clearStartIndex();
+      this.set('controller.filterChangeHappened', didClearedFilters || didClearStartIndex);
     }
     this._super();
     this.set('startIndex', this.get('controller.startIndex'));
@@ -194,6 +196,8 @@ App.MainHostView = App.TableView.extend(App.TableServerViewMixin, {
     this.addObserver('startIndex', this, 'updatePagination');
     this.addObserver('displayLength', this, 'updatePagination');
     this.addObserver('filteredCount', this, this.updatePaging);
+    // should show overlay even when filtering has begun before observer was added
+    this.overlayObserver();
   },
 
   willDestroyElement: function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/test/mixins/common/table_server_view_mixin_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mixins/common/table_server_view_mixin_test.js b/ambari-web/test/mixins/common/table_server_view_mixin_test.js
index 2a9c409..ae750de 100644
--- a/ambari-web/test/mixins/common/table_server_view_mixin_test.js
+++ b/ambari-web/test/mixins/common/table_server_view_mixin_test.js
@@ -28,6 +28,7 @@ describe('App.MainConfigHistoryView', function() {
     filteredContent: [],
     refresh: Em.K,
     saveFilterConditions: Em.K,
+    saveStartIndex: sinon.spy(),
     controller: Em.Object.create({
       name: 'mainConfigHistoryController',
       paginationProps: [
@@ -99,12 +100,6 @@ describe('App.MainConfigHistoryView', function() {
       it('setDisplayLength is called with correct arguments', function () {
         expect(App.db.setDisplayLength.calledWith('mainConfigHistoryController', '50')).to.be.true;
       });
-      it('paginationProps.startIndex = 0', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'startIndex').value).to.equal(0);
-      });
-      it('paginationProps.displayLength = 50', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'displayLength').value).to.equal('50');
-      });
     });
 
     describe('startIndex is correct', function() {
@@ -123,12 +118,6 @@ describe('App.MainConfigHistoryView', function() {
       it('setDisplayLength is not called', function () {
         expect(App.db.setDisplayLength.called).to.be.false;
       });
-      it('paginationProps.startIndex = 10', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'startIndex').value).to.equal(10);
-      });
-      it('paginationProps.displayLength = 50', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'displayLength').value).to.equal('50');
-      });
     });
 
     describe('displayLength and startIndex are correct', function() {
@@ -147,12 +136,6 @@ describe('App.MainConfigHistoryView', function() {
       it('setDisplayLength is called with valid arguments', function () {
         expect(App.db.setDisplayLength.calledWith('mainConfigHistoryController', '100')).to.be.true;
       });
-      it('paginationProps.startIndex = 20', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'startIndex').value).to.equal(20);
-      });
-      it('paginationProps.displayLength = 100', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'displayLength').value).to.equal('100');
-      });
     });
 
     describe('displayLength and startIndex are null', function() {
@@ -170,12 +153,6 @@ describe('App.MainConfigHistoryView', function() {
       it('setDisplayLength is not called', function () {
       expect(App.db.setDisplayLength.called).to.be.false;
       });
-      it('paginationProps.startIndex = 20', function () {
-      expect(view.get('controller.paginationProps').findProperty('name', 'startIndex').value).to.equal(20);
-      });
-      it('paginationProps.displayLength = 100', function () {
-        expect(view.get('controller.paginationProps').findProperty('name', 'displayLength').value).to.equal('100');
-      });
     });
   });
 
@@ -183,12 +160,14 @@ describe('App.MainConfigHistoryView', function() {
     beforeEach(function () {
       sinon.stub(view, 'saveFilterConditions', Em.K);
       sinon.stub(view, 'refresh', Em.K);
+      sinon.stub(view, 'resetStartIndex');
       sinon.spy(view, 'updateFilter');
       this.clock = sinon.useFakeTimers();
     });
     afterEach(function () {
       view.saveFilterConditions.restore();
       view.updateFilter.restore();
+      view.resetStartIndex.restore();
       view.refresh.restore();
       this.clock.restore();
     });
@@ -231,12 +210,20 @@ describe('App.MainConfigHistoryView', function() {
   });
 
   describe('#resetStartIndex()', function() {
+    beforeEach(function () {
+      sinon.stub(view, 'updatePagination');
+    });
+    afterEach(function () {
+      view.updatePagination.restore();
+    });
     it('resetStartIndex is false and filteredCount is 0', function() {
       view.set('filteredCount', 0);
       view.set('controller.resetStartIndex', false);
       view.set('startIndex', 0);
       view.resetStartIndex();
       expect(view.get('startIndex')).to.equal(0);
+      expect(view.saveStartIndex.called).to.be.false;
+      expect(view.updatePagination.called).to.be.false;
     });
     it('resetStartIndex is true and filteredCount is 0', function() {
       view.set('filteredCount', 0);
@@ -244,6 +231,8 @@ describe('App.MainConfigHistoryView', function() {
       view.set('startIndex', 0);
       view.resetStartIndex();
       expect(view.get('startIndex')).to.equal(0);
+      expect(view.saveStartIndex.called).to.be.false;
+      expect(view.updatePagination.called).to.be.false;
     });
     it('resetStartIndex is false and filteredCount is 5', function() {
       view.set('filteredCount', 5);
@@ -251,6 +240,8 @@ describe('App.MainConfigHistoryView', function() {
       view.set('startIndex', 0);
       view.resetStartIndex();
       expect(view.get('startIndex')).to.equal(0);
+      expect(view.saveStartIndex.called).to.be.false;
+      expect(view.updatePagination.called).to.be.false;
     });
     it('resetStartIndex is true and filteredCount is 5', function() {
       view.set('controller.resetStartIndex', true);
@@ -258,6 +249,8 @@ describe('App.MainConfigHistoryView', function() {
       view.set('startIndex', 0);
       view.resetStartIndex();
       expect(view.get('startIndex')).to.equal(1);
+      expect(view.saveStartIndex.called).to.be.true;
+      expect(view.updatePagination.called).to.be.true;
     });
   });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/test/views/common/table_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/table_view_test.js b/ambari-web/test/views/common/table_view_test.js
index 37dd911..dd289b0 100644
--- a/ambari-web/test/views/common/table_view_test.js
+++ b/ambari-web/test/views/common/table_view_test.js
@@ -25,7 +25,9 @@ require('mixins/common/userPref');
 require('views/common/table_view');
 
 function getView() {
-  return App.TableView.create();
+  return App.TableView.create({
+    controller: Em.Object.create()
+  });
 }
 
 describe('App.TableView', function () {
@@ -393,4 +395,26 @@ describe('App.TableView', function () {
 
   });
 
+  describe('#clearStartIndex', function() {
+    var view;
+
+    beforeEach(function() {
+      view = getView();
+    });
+
+    it('should reset start index', function() {
+      view.set('controller.resetStartIndex', false);
+      view.set('controller.startIndex', 11);
+      expect(view.clearStartIndex()).to.be.true;
+      expect(view.get('controller.resetStartIndex')).to.be.true;
+    });
+
+    it('should not reset start index', function() {
+      view.set('controller.resetStartIndex', false);
+      view.set('controller.startIndex', 1);
+      expect(view.clearStartIndex()).to.be.false;
+      expect(view.get('controller.resetStartIndex')).to.be.false;
+    });
+  });
+
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/7f9a5123/ambari-web/test/views/main/host_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/host_test.js b/ambari-web/test/views/main/host_test.js
index 6bb3462..7978fea 100644
--- a/ambari-web/test/views/main/host_test.js
+++ b/ambari-web/test/views/main/host_test.js
@@ -66,12 +66,14 @@ describe('App.MainHostView', function () {
       cases.forEach(function (item) {
         sinon.stub(view, item.methodName, Em.K);
       });
+      sinon.stub(view, 'overlayObserver');
     });
 
     afterEach(function () {
       cases.forEach(function (item) {
         view[item.methodName].restore();
       });
+      view.overlayObserver.restore();
     });
 
     cases.forEach(function (item) {
@@ -82,6 +84,10 @@ describe('App.MainHostView', function () {
       });
     });
 
+    it('overlayObserver should be called', function () {
+      view.didInsertElement();
+      expect(view.overlayObserver.calledOnce).to.be.true;
+    });
   });
 
   describe('#HostView', function () {


[32/50] [abbrv] ambari git commit: AMBARI-20358. NPE during Ambari server schema upgrade while updating hbase_master_cpu alert definition (rlevas)

Posted by ol...@apache.org.
AMBARI-20358. NPE during Ambari server schema upgrade while updating hbase_master_cpu alert definition (rlevas)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 8eaaf8086502890ef5d1c3ad88ca5fee8311f599
Parents: 934f3f1
Author: Robert Levas <rl...@hortonworks.com>
Authored: Wed Mar 8 07:50:13 2017 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Wed Mar 8 07:50:13 2017 -0500

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog250.java       | 64 +++++++++++---------
 .../server/upgrade/UpgradeCatalog250Test.java   | 33 ++++++++++
 2 files changed, 70 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8eaaf808/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 e244925..36160ca 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
@@ -216,36 +216,46 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
 
         if(source != null) {
           JsonObject sourceJson = new JsonParser().parse(source).getAsJsonObject();
-          LOG.debug("Source before update : {}", sourceJson);
-
-          JsonObject uriJson = sourceJson.get("uri").getAsJsonObject();
-          JsonPrimitive primitive;
-
-          // Replace
-          //  "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}"
-          // With
-          //  "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
-          primitive = uriJson.getAsJsonPrimitive("kerberos_keytab");
-          if(primitive.isString() && "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}".equals(primitive.getAsString())) {
-            uriJson.remove("kerberos_keytab");
-            uriJson.addProperty("kerberos_keytab", "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}");
-          }
 
-          // Replace
-          //  "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
-          // With
-          //  "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}"
-          primitive = uriJson.getAsJsonPrimitive("kerberos_principal");
-          if(primitive.isString() && "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}".equals(primitive.getAsString())) {
-            uriJson.remove("kerberos_principal");
-            uriJson.addProperty("kerberos_principal", "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}");
-          }
+          if(sourceJson != null) {
+            boolean changesExist = false;
+            LOG.debug("Source before update : {}", sourceJson);
+
+            JsonObject uriJson = sourceJson.get("uri").getAsJsonObject();
+            JsonPrimitive primitive;
+
+            if (uriJson != null) {
+              // Replace
+              //  "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}"
+              // With
+              //  "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
+              primitive = uriJson.getAsJsonPrimitive("kerberos_keytab");
+              if ((primitive != null) && primitive.isString() && "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}".equals(primitive.getAsString())) {
+                uriJson.remove("kerberos_keytab");
+                uriJson.addProperty("kerberos_keytab", "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}");
+                changesExist = true;
+              }
+
+              // Replace
+              //  "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
+              // With
+              //  "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}"
+              primitive = uriJson.getAsJsonPrimitive("kerberos_principal");
+              if ((primitive != null) && primitive.isString() && "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}".equals(primitive.getAsString())) {
+                uriJson.remove("kerberos_principal");
+                uriJson.addProperty("kerberos_principal", "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}");
+                changesExist = true;
+              }
+            }
 
-          LOG.debug("Source after update : {}", sourceJson);
-          alertDefinition.setSource(sourceJson.toString());
-          alertDefinition.setHash(UUID.randomUUID().toString());
+            LOG.debug("Source after update : {}", sourceJson);
+            if(changesExist) {
+              alertDefinition.setSource(sourceJson.toString());
+              alertDefinition.setHash(UUID.randomUUID().toString());
 
-          alertDefinitionDAO.merge(alertDefinition);
+              alertDefinitionDAO.merge(alertDefinition);
+            }
+          }
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/8eaaf808/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 3dfc32f..cb2e5f6 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
@@ -508,6 +508,39 @@ public class UpgradeCatalog250Test {
   }
 
   @Test
+  public void testFixHBaseMasterCPUUtilizationAlertDefinitionMissingKerberosInfo() {
+    EasyMockSupport easyMockSupport = new EasyMockSupport();
+    final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
+    final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
+    final Cluster mockClusterExpected = easyMockSupport.createNiceMock(Cluster.class);
+    final AlertDefinitionDAO mockAlertDefinitionDAO = easyMockSupport.createNiceMock(AlertDefinitionDAO.class);
+    final AlertDefinitionEntity hbaseMasterCPUAlertMock = easyMockSupport.createNiceMock(AlertDefinitionEntity.class);
+
+    String brokenSource = "{\"uri\":{\"http\":\"{{hbase-site/hbase.master.info.port}}\",\"default_port\":60010,\"connection_timeout\":5.0},\"jmx\":{\"property_list\":[\"java.lang:type\\u003dOperatingSystem/SystemCpuLoad\",\"java.lang:type\\u003dOperatingSystem/AvailableProcessors\"],\"value\":\"{0} * 100\"},\"type\":\"METRIC\",\"reporting\":{\"ok\":{\"text\":\"{1} CPU, load {0:.1%}\"},\"warning\":{\"text\":\"{1} CPU, load {0:.1%}\",\"value\":200.0},\"critical\":{\"text\":\"{1} CPU, load {0:.1%}\",\"value\":250.0},\"units\":\"%\",\"type\":\"PERCENT\"}}";
+
+    Capture<String> capturedFixedSource = newCapture();
+
+    final Injector mockInjector = createInjector(mockAmbariManagementController, mockClusters, mockAlertDefinitionDAO);
+    long clusterId = 1;
+
+    expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
+    expect(mockClusters.getClusters()).andReturn(Collections.singletonMap("normal", mockClusterExpected)).atLeastOnce();
+    expect(mockClusterExpected.getClusterId()).andReturn(clusterId).anyTimes();
+    expect(mockAlertDefinitionDAO.findByName(eq(clusterId), eq("hbase_master_cpu"))).andReturn(hbaseMasterCPUAlertMock).atLeastOnce();
+    expect(hbaseMasterCPUAlertMock.getDefinitionName()).andReturn("hbase_master_cpu").once();
+    expect(hbaseMasterCPUAlertMock.getSource()).andReturn(brokenSource).once();
+
+    expect(mockAlertDefinitionDAO.merge(hbaseMasterCPUAlertMock)).andReturn(hbaseMasterCPUAlertMock).anyTimes();
+
+    easyMockSupport.replayAll();
+
+    mockInjector.getInstance(UpgradeCatalog250.class).fixHBaseMasterCPUUtilizationAlertDefinition();
+    easyMockSupport.verifyAll();
+
+    Assert.assertFalse(capturedFixedSource.hasCaptured());
+  }
+
+  @Test
   public void testUpdateYarnSite() throws Exception {
     EasyMockSupport easyMockSupport = new EasyMockSupport();
 


[37/50] [abbrv] ambari git commit: AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)

Posted by ol...@apache.org.
AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 6631ad53609da987e716bc08c04ded44986a7b77
Parents: a307ba7
Author: pallavkul <pa...@gmail.com>
Authored: Wed Mar 8 22:57:02 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Wed Mar 8 23:00:44 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/udf-item.js     | 150 +++++++++++++------
 .../resources/ui/app/routes/queries/query.js    |   4 +-
 .../src/main/resources/ui/app/routes/udfs.js    |   4 +-
 .../main/resources/ui/app/routes/udfs/new.js    | 141 ++++++++++-------
 .../resources/ui/app/services/auto-refresh.js   |   2 +-
 .../ui/app/templates/components/udf-item.hbs    |  26 ++--
 6 files changed, 207 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6631ad53/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
index 44f56e5..6005444 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
@@ -17,8 +17,9 @@
  */
 
 import Ember from 'ember';
+import UILoggerMixin from '../mixins/ui-logger';
 
-export default Ember.Component.extend({
+export default Ember.Component.extend(UILoggerMixin, {
 
   store: Ember.inject.service(),
 
@@ -30,10 +31,43 @@ export default Ember.Component.extend({
   showDeleteUdfModal: false,
   expandedValue: null,
   udfId: null,
+  editUdfId: Ember.computed('udf', function () {
+    return this.get('udf.id');
+  }),
+  editUdfName: Ember.computed('udf', function () {
+    return this.get('udf.name');
+  }),
+  editUdfClassName: Ember.computed('udf', function () {
+    return this.get('udf.classname');
+  }),
+  editOwner: Ember.computed('udf', function () {
+    return this.get('udf.owner');
+  }),
+  editFileResource: Ember.computed('udf', function () {
+    return this.get('udf.fileResource');
+  }),
   fileResourceList:[],
   selectedFileResource: null,
   isAddingNewFileResource: false,
 
+  validate(udfName, udfClassName, resourceName, resourcePath){
+    if (Ember.isEmpty(udfName)) {
+      this.get('logger').danger('UDF Name can not be empty.');
+      return false;
+    }
+
+    if (Ember.isEmpty(udfClassName)) {
+      this.get('logger').danger('UDF Class Name can not be empty.');
+      return false;
+    }
+
+    if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) {
+      this.get('logger').danger('File Resource can not be empty.');
+      return false;
+    }
+    return true;
+  },
+
   actions: {
     toggleExpandUdf(fileResourceId) {
 
@@ -59,14 +93,30 @@ export default Ember.Component.extend({
         this.set('expandedEdit', true);
         this.set('valueLoading', true);
 
-        this.get('store').find('fileResource', fileResourceId).then((data) => {
-          this.set('udfFileResourceName', data.get('name'));
-          this.set('udfFileResourcePath', data.get('path'));
-        });
+        this.get('store').findAll('file-resource').then((data) => {
+          let fileResourceList = [];
+          data.forEach(x => {
+            let localFileResource = {'id': x.get('id'),
+              'name': x.get('name'),
+              'path': x.get('path'),
+              'owner': x.get('owner')
+            };
+            fileResourceList.push(localFileResource);
+          });
 
+          fileResourceList.filterBy('id', fileResourceId).map((data) => {
+            this.set('udfFileResourceName', data.name);
+            this.set('udfFileResourcePath', data.path);
 
+                    this.get('store').find('udf', udfId).then((data) => {
+                        this.set('editUdfId', udfId);
+                        this.set('editUdfName', data.get('name'));
+                        this.set('editUdfClassName', data.get('classname'));
+                        this.set('editOwner', data.get('owner'));
+                      });
+          });
+        });
         this.send('setFileResource', fileResourceId);
-
       }
     },
 
@@ -75,39 +125,38 @@ export default Ember.Component.extend({
     },
 
     saveUDf(name, classname, udfid, udfFileResourceName, udfFileResourcePath){
-
       let self = this;
-
-      if(!Ember.isEmpty(this.get('selectedFileResource'))){
-        this.get('store').findRecord('udf', udfid).then(function(resultUdf) {
-          resultUdf.set('name', name);
-          resultUdf.set('classname', classname);
-          resultUdf.set('fileResource', self.get('selectedFileResource').id);
-          resultUdf.save();
-          self.set('expandedEdit', false);
-        });
-      } else {
-
-        let resourcePayload = {"name":udfFileResourceName,"path":udfFileResourcePath};
-
-        this.get('udfService').savefileResource(resourcePayload)
-          .then((data) => {
-            console.log('fileResource is', data.fileResource.id);
-            self.get('store').findRecord('udf', udfid).then(function(resultUdf) {
-
-              resultUdf.set('name', name);
-              resultUdf.set('classname', classname);
-              resultUdf.set('fileResource', data.fileResource.id);
-              resultUdf.save();
-              self.set('expandedEdit', false);
-            });
-          }, (error) => {
-            console.log("Error encountered", error);
+      if (this.validate(name, classname, udfFileResourceName, udfFileResourcePath)) {
+        if (!Ember.isEmpty(this.get('selectedFileResource'))) {
+          this.get('store').findRecord('udf', udfid).then(function (resultUdf) {
+            resultUdf.set('name', name);
+            resultUdf.set('classname', classname);
+            resultUdf.set('fileResource', self.get('selectedFileResource').id);
+            resultUdf.save();
+            self.set('expandedEdit', false);
           });
+        }
+        else {
+
+          let resourcePayload = {"name": udfFileResourceName, "path": udfFileResourcePath};
+
+          this.get('udfService').savefileResource(resourcePayload)
+            .then((data) => {
+              console.log('fileResource is', data.fileResource.id);
+              self.get('store').findRecord('udf', udfid).then(function (resultUdf) {
+
+                resultUdf.set('name', name);
+                resultUdf.set('classname', classname);
+                resultUdf.set('fileResource', data.fileResource.id);
+                resultUdf.save();
+                self.set('expandedEdit', false);
+              });
+            }, (error) => {
+              console.log("Error encountered", error);
+            });
+        }
       }
-
       this.set('isAddingNewFileResource', false);
-
     },
 
     showRemoveUdfModal(udfId){
@@ -117,16 +166,13 @@ export default Ember.Component.extend({
     },
 
     removeUdf(){
-      let self = this;
-      this.get('store').find('udf', this.get('udfId')).then(function(resultUdf) {
-        resultUdf.destroyRecord().then(function() {
+      var self = this;
+      let record = this.get('store').peekRecord('udf', this.get('udfId') );
+      if(record){
+        record.destroyRecord().then(function(){
           self.send('cancelUdf');
           self.sendAction('refreshUdfList');
-        }, function(response) {
-          console.log('UDF NOT deleted', response);
-        });
-        return false;
-      });
+      })}
     },
 
     cancelUdf(){
@@ -144,10 +190,22 @@ export default Ember.Component.extend({
     },
 
     setFileResource(fileResourceId){
-      let localSelectedFileResource = this.get('fileResourceList').filterBy('id', fileResourceId);
-      this.set('selectedFileResource',localSelectedFileResource[0]);
-    }
+      this.get('store').findAll('file-resource').then((data) => {
+        let fileResourceList = [];
+        data.forEach(x => {
+          let localFileResource = {'id': x.get('id'),
+            'name': x.get('name'),
+            'path': x.get('path'),
+            'owner': x.get('owner')
+          };
+          fileResourceList.push(localFileResource);
+        });
+
+        let localSelectedFileResource =  fileResourceList.filterBy('id', fileResourceId);
+        this.set('selectedFileResource',localSelectedFileResource.get('firstObject'));
+      });
 
+    }
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/6631ad53/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index 80116da..6b395ac 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -522,7 +522,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       Ember.run.later(() => {
 
       if(this.get('controller.model').get('isQueryDirty')) {
-        this.get('controller.model').set('tabDataToClose', {index:index, id:id})
+        this.get('controller.model').set('tabDataToClose', {index:index, id:id});
         this.send('openWorksheetModal');
       } else {
          this.send('closeWorksheet', index, id);
@@ -627,7 +627,7 @@ export default Ember.Route.extend(UILoggerMixin, {
     closeWorksheetModal(){
       this.get('controller').set('showWorksheetModal', false);
       this.closeWorksheetAfterSave();
-      this.get('controller.model').set('tabDataToClose', null)
+      this.get('controller.model').set('tabDataToClose', null);
   },
 
     expandQueryEdidorPanel(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/6631ad53/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
index 138e85f..68e06a9 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
@@ -19,6 +19,7 @@
 import Ember from 'ember';
 
 export default Ember.Route.extend({
+
   model() {
     return this.store.findAll('udf').then(udfs => udfs.toArray());
   },
@@ -48,7 +49,6 @@ export default Ember.Route.extend({
   actions:{
 
     refreshUdfList(){
-
       this.get('store').findAll('udf').then((data) => {
         let udfList = [];
         data.forEach(x => {
@@ -65,8 +65,6 @@ export default Ember.Route.extend({
         this.controllerFor('udfs').set('udflist',udfList);
         this.transitionTo('udfs');
       });
-
     }
-
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/6631ad53/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
index 84733e8..348887b 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
@@ -25,6 +25,26 @@ export default Ember.Route.extend(UILoggerMixin, {
 
   },
 
+  validateUDF(udfName, udfClassName){
+    if (Ember.isEmpty(udfName)) {
+      this.get('logger').danger('UDF Name can not be empty.');
+      return false;
+    }
+    if (Ember.isEmpty(udfClassName)) {
+      this.get('logger').danger('UDF Class Name can not be empty.');
+      return false;
+    }
+    return true;
+  },
+
+  validateFileResource(resourceName, resourcePath){
+    if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) {
+      this.get('logger').danger('File Resource can not be empty.');
+      return false;
+    }
+    return true;
+  },
+
   udf: Ember.inject.service(),
   store: Ember.inject.service(),
 
@@ -41,13 +61,13 @@ export default Ember.Route.extend(UILoggerMixin, {
                                 };
         fileResourceList.push(localFileResource);
       });
-      fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'})
+      fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'});
       controller.set('fileResourceList', fileResourceList);
-
     });
 
     controller.set('isAddingNewFileResource', false);
     controller.set('selectedFileResource',null);
+    controller.set('resourceId', null);
 
   },
 
@@ -62,50 +82,14 @@ export default Ember.Route.extend(UILoggerMixin, {
 
       if(!Ember.isEmpty( this.get('controller').get('resourceId'))){
 
-        let newUDF = this.get('store').createRecord('udf',
-          {name:udfName,
-           classname:udfClassName,
-           fileResource: this.get('controller').get('resourceId')
-          });
-
+        if (this.validateUDF(udfName, udfClassName)) {
 
-        newUDF.save().then((data) => {
-          console.log('udf saved');
-
-          this.get('store').findAll('udf').then((data) => {
-            let udfList = [];
-            data.forEach(x => {
-              let localUdf = {
-                'id': x.get('id'),
-                'name': x.get('name'),
-                'classname': x.get('classname'),
-                'fileResource': x.get('fileResource'),
-                'owner': x.get('owner')
-              };
-              udfList.pushObject(localUdf);
-            });
-
-            this.controllerFor('udfs').set('udflist',udfList);
-            this.transitionTo('udfs');
-          })
-
-        });
-
-      } else {
-
-        let resourcePayload = {"name":resourceName,"path":resourcePath};
-
-        var newFileResource = this.get('store').createRecord('file-resource',
-          {name:resourceName,
-            path:resourcePath
-          });
 
-        newFileResource.save().then((data) => {
-          console.log('fileResource is', data.get('id'));
           let newUDF = this.get('store').createRecord('udf',
-            {name:udfName,
-              classname:udfClassName,
-              fileResource: data.get('id')
+            {
+              name: udfName,
+              classname: udfClassName,
+              fileResource: this.get('controller').get('resourceId')
             });
 
           newUDF.save().then((data) => {
@@ -124,20 +108,66 @@ export default Ember.Route.extend(UILoggerMixin, {
                 udfList.pushObject(localUdf);
               });
 
-              this.controllerFor('udfs').set('udflist',udfList);
+              this.controllerFor('udfs').set('udflist', udfList);
               this.transitionTo('udfs');
-            })
-          })
-          .catch((error) => {
-            this.get('logger').danger('Failed to create UDF.', this.extractError(error));
-            this.transitionTo('udfs');
+            });
+
+          });
+
+        }
+
+      } else {
+
+        let resourcePayload = {"name":resourceName,"path":resourcePath};
 
+        var newFileResource = this.get('store').createRecord('file-resource',
+          {name:resourceName,
+            path:resourcePath
           });
-        })
-        .catch((error) => {
-          this.get('logger').danger('Failed to create File Resource.', this.extractError(error));
-          this.transitionTo('udfs');
-        });
+
+
+        if (this.validateFileResource(resourceName, resourcePath) && this.validateUDF(udfName, udfClassName)) {
+
+          newFileResource.save().then((data) => {
+              console.log('fileResource is', data.get('id'));
+              let newUDF = this.get('store').createRecord('udf',
+                {name:udfName,
+                  classname:udfClassName,
+                  fileResource: data.get('id')
+                });
+
+              newUDF.save().then((data) => {
+                  console.log('udf saved');
+
+                  this.get('store').findAll('udf').then((data) => {
+                    let udfList = [];
+                    data.forEach(x => {
+                      let localUdf = {
+                        'id': x.get('id'),
+                        'name': x.get('name'),
+                        'classname': x.get('classname'),
+                        'fileResource': x.get('fileResource'),
+                        'owner': x.get('owner')
+                      };
+                      udfList.pushObject(localUdf);
+                    });
+
+                    this.controllerFor('udfs').set('udflist',udfList);
+                    this.transitionTo('udfs');
+                  });
+                })
+                .catch((error) => {
+                  this.get('logger').danger('Failed to create UDF.', this.extractError(error));
+                  this.transitionTo('udfs');
+
+                });
+            })
+            .catch((error) => {
+              this.get('logger').danger('Failed to create File Resource.', this.extractError(error));
+              this.transitionTo('udfs');
+            });
+
+        }
 
       }
     },
@@ -153,10 +183,11 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     handleFileResourceChange(filter){
       console.log('filter', filter);
-      if(filter.action == "addNewFileResource"){
+      if(filter.action === "addNewFileResource"){
         this.get('controller').set('isAddingNewFileResource', true);
         this.get('controller').set('resourceName','');
         this.get('controller').set('resourcePath','');
+        this.get('controller').set('resourceId', null);
         this.get('controller').set('selectedFileResource',null);
 
       }else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6631ad53/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
index 2e8ec62..b3276e7 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
@@ -50,7 +50,7 @@ export default Ember.Service.extend({
       databaseRefreshStartingCallback();
       let oldDatabases = this.get('store').peekAll('database').mapBy('name');
       this.get('store').query('database', {}).then((data) => {
-        let deletedDbCount = 0
+        let deletedDbCount = 0;
         let newDatabases = data.mapBy('name');
         oldDatabases.forEach((oldDB) => {
           if (!newDatabases.contains(oldDB)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6631ad53/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
index fec48fb..929b91a 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
@@ -39,19 +39,19 @@
 
 {{#if expandedEdit}}
   {{udf-edit
-  udfid=udf.id
-  name=udf.name
-  classname=udf.classname
-  owner=udf.owner
-  fileResource=udf.fileResource
-  udfFileResourceName=udfFileResourceName
-  udfFileResourcePath=udfFileResourcePath
-  fileResourceList=fileResourceList
-  selectedFileResource=selectedFileResource
-  isAddingNewFileResource=isAddingNewFileResource
-  handleResourceChange='handleResourceChange'
-  cancelEditUdf='cancelEditUdf'
-  saveUDf='saveUDf'
+    udfid=editUdfId
+    name=editUdfName
+    classname=editUdfClassName
+    owner=editOwner
+    fileResource=editFileResource
+    udfFileResourceName=udfFileResourceName
+    udfFileResourcePath=udfFileResourcePath
+    fileResourceList=fileResourceList
+    selectedFileResource=selectedFileResource
+    isAddingNewFileResource=isAddingNewFileResource
+    handleResourceChange='handleResourceChange'
+    cancelEditUdf='cancelEditUdf'
+    saveUDf='saveUDf'
   }}
 {{/if}}
 


[09/50] [abbrv] ambari git commit: AMBARI-20309. HBase Master CPU Utilization Alert is in unknown state due to kinit error (rlevas)

Posted by ol...@apache.org.
AMBARI-20309. HBase Master CPU Utilization Alert is in unknown state due to kinit error (rlevas)


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

Branch: refs/heads/branch-dev-logsearch
Commit: e8956590389cf1c8e6a3942747710223ff3a5d34
Parents: 84e767b
Author: Robert Levas <rl...@hortonworks.com>
Authored: Mon Mar 6 12:30:26 2017 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Mon Mar 6 12:30:26 2017 -0500

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog250.java       |   57 +
 .../HBASE/0.96.0.2.0/alerts.json                |    4 +-
 .../server/upgrade/UpgradeCatalog250Test.java   | 1014 ++++++++++--------
 3 files changed, 596 insertions(+), 479 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e8956590/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 c67e80d..0246229 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
@@ -19,6 +19,7 @@ package org.apache.ambari.server.upgrade;
 
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 
@@ -66,6 +67,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
 
 /**
@@ -192,6 +194,61 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
     addManageServiceAutoStartPermissions();
     addManageAlertNotificationsPermissions();
     updateKerberosDescriptorArtifacts();
+    fixHBaseMasterCPUUtilizationAlertDefinition();
+  }
+
+  /**
+   * Fix the HBase Master CPU Utilization alert definition by swapping the values for <code>kerberos_keytab</code>
+   * and <code>kerberos_principal</code>.
+   */
+  protected void fixHBaseMasterCPUUtilizationAlertDefinition() {
+    AlertDefinitionDAO alertDefinitionDAO = injector.getInstance(AlertDefinitionDAO.class);
+    AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
+    Clusters clusters = ambariManagementController.getClusters();
+
+    Map<String, Cluster> clusterMap = getCheckedClusterMap(clusters);
+    for (final Cluster cluster : clusterMap.values()) {
+      long clusterID = cluster.getClusterId();
+      AlertDefinitionEntity alertDefinition = alertDefinitionDAO.findByName(clusterID, "hbase_master_cpu");
+      if(alertDefinition != null) {
+        LOG.info("Updating alert definition {} in cluster {}", alertDefinition.getDefinitionName(), clusterID);
+        String source = alertDefinition.getSource();
+
+        if(source != null) {
+          JsonObject sourceJson = new JsonParser().parse(source).getAsJsonObject();
+          LOG.debug("Source before update : {}", sourceJson);
+
+          JsonObject uriJson = sourceJson.get("uri").getAsJsonObject();
+          JsonPrimitive primitive;
+
+          // Replace
+          //  "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}"
+          // With
+          //  "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
+          primitive = uriJson.getAsJsonPrimitive("kerberos_keytab");
+          if(primitive.isString() && "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}".equals(primitive.getAsString())) {
+            uriJson.remove("kerberos_keytab");
+            uriJson.addProperty("kerberos_keytab", "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}");
+          }
+
+          // Replace
+          //  "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
+          // With
+          //  "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}"
+          primitive = uriJson.getAsJsonPrimitive("kerberos_principal");
+          if(primitive.isString() && "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}".equals(primitive.getAsString())) {
+            uriJson.remove("kerberos_principal");
+            uriJson.addProperty("kerberos_principal", "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}");
+          }
+
+          LOG.debug("Source after update : {}", sourceJson);
+          alertDefinition.setSource(sourceJson.toString());
+          alertDefinition.setHash(UUID.randomUUID().toString());
+
+          alertDefinitionDAO.merge(alertDefinition);
+        }
+      }
+    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/e8956590/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json
index 1b3ae25..6fcb4dc 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json
@@ -68,8 +68,8 @@
             "http": "{{hbase-site/hbase.master.info.port}}",
             "default_port": 60010,
             "connection_timeout": 5.0,
-            "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}",
-            "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
+            "kerberos_principal": "{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}",
+            "kerberos_keytab": "{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}"
           },
           "reporting": {
             "ok": {


[25/50] [abbrv] ambari git commit: AMBARI-20348 Discard/Save buttons for service configs are always enabled if custom property is overridden with empty value. (ababiichuk)

Posted by ol...@apache.org.
AMBARI-20348 Discard/Save buttons for service configs are always enabled if custom property is overridden with empty value. (ababiichuk)


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

Branch: refs/heads/branch-dev-logsearch
Commit: ee6c5d8640c208f0fdec3f7ea59a777f35729e01
Parents: 07a30a1
Author: ababiichuk <ab...@hortonworks.com>
Authored: Tue Mar 7 19:30:52 2017 +0200
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Wed Mar 8 00:14:59 2017 +0200

----------------------------------------------------------------------
 ambari-web/app/utils/config.js       |  4 +++-
 ambari-web/test/utils/config_test.js | 30 ++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ee6c5d86/ambari-web/app/utils/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js
index a7f4edf..88e2cf4 100644
--- a/ambari-web/app/utils/config.js
+++ b/ambari-web/app/utils/config.js
@@ -1214,7 +1214,9 @@ App.config = Em.Object.create({
 
     serviceConfigProperty.get('overrides').pushObject(newOverride);
 
-    var savedOverrides = serviceConfigProperty.get('overrides').filterProperty('savedValue');
+    var savedOverrides = serviceConfigProperty.get('overrides').filter(function (override) {
+      return !Em.isNone(Em.get(override, 'savedValue'));
+    });
     serviceConfigProperty.set('overrideValues', savedOverrides.mapProperty('savedValue'));
     serviceConfigProperty.set('overrideIsFinalValues', savedOverrides.mapProperty('savedIsFinal'));
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/ee6c5d86/ambari-web/test/utils/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/config_test.js b/ambari-web/test/utils/config_test.js
index c7bd5c7..ffedc23 100644
--- a/ambari-web/test/utils/config_test.js
+++ b/ambari-web/test/utils/config_test.js
@@ -534,6 +534,36 @@ describe('App.config', function () {
       });
 
     });
+
+    describe('overrides with empty string values', function () {
+
+      beforeEach(function () {
+        configProperty.set('overrides', [
+          {
+            savedValue: null,
+            savedIsFinal: true
+          },
+          {
+            savedValue: '',
+            savedIsFinal: false
+          },
+          {
+            savedValue: '1',
+            savedIsFinal: false
+          }
+        ]);
+        App.config.createOverride(configProperty, null, group);
+      });
+
+      it('values', function () {
+        expect(configProperty.get('overrideValues')).to.eql(['', '1']);
+      });
+
+      it('isFinal', function () {
+        expect(configProperty.get('overrideIsFinalValues')).to.eql([false, false]);
+      });
+
+    });
   });
 
   describe('#getIsSecure', function() {


[36/50] [abbrv] ambari git commit: Revert "AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)"

Posted by ol...@apache.org.
Revert "AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)"

This reverts commit 63dad097a730d6403f052e0083fa0e665de26f25.


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

Branch: refs/heads/branch-dev-logsearch
Commit: a307ba7bc86444151c59284f45bce351f16f49f6
Parents: 546225f
Author: pallavkul <pa...@gmail.com>
Authored: Wed Mar 8 22:14:57 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Wed Mar 8 22:14:57 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/udf-item.js     | 148 ++++++-------------
 .../resources/ui/app/routes/queries/query.js    |   4 +-
 .../src/main/resources/ui/app/routes/udfs.js    |  18 +--
 .../main/resources/ui/app/routes/udfs/new.js    | 138 +++++++----------
 .../resources/ui/app/services/auto-refresh.js   |   2 +-
 .../ui/app/templates/components/udf-item.hbs    |  26 ++--
 .../main/resources/ui/app/templates/udfs.hbs    |   3 -
 7 files changed, 118 insertions(+), 221 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
index 3e6e623..44f56e5 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
@@ -17,9 +17,8 @@
  */
 
 import Ember from 'ember';
-import UILoggerMixin from '../mixins/ui-logger';
 
-export default Ember.Component.extend(UILoggerMixin, {
+export default Ember.Component.extend({
 
   store: Ember.inject.service(),
 
@@ -31,43 +30,10 @@ export default Ember.Component.extend(UILoggerMixin, {
   showDeleteUdfModal: false,
   expandedValue: null,
   udfId: null,
-  editUdfId: Ember.computed('udf', function () {
-    return this.get('udf.id');
-  }),
-  editUdfName: Ember.computed('udf', function () {
-    return this.get('udf.name');
-  }),
-  editUdfClassName: Ember.computed('udf', function () {
-    return this.get('udf.classname');
-  }),
-  editOwner: Ember.computed('udf', function () {
-    return this.get('udf.owner');
-  }),
-  editFileResource: Ember.computed('udf', function () {
-    return this.get('udf.fileResource');
-  }),
   fileResourceList:[],
   selectedFileResource: null,
   isAddingNewFileResource: false,
 
-  validate(udfName, udfClassName, resourceName, resourcePath){
-    if (Ember.isEmpty(udfName)) {
-      this.get('logger').danger('UDF Name can not be empty.');
-      return false;
-    }
-
-    if (Ember.isEmpty(udfClassName)) {
-      this.get('logger').danger('UDF Class Name can not be empty.');
-      return false;
-    }
-
-    if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) {
-      this.get('logger').danger('File Resource can not be empty.');
-      return false;
-    }
-    return true;
-  },
-
   actions: {
     toggleExpandUdf(fileResourceId) {
 
@@ -93,30 +59,14 @@ export default Ember.Component.extend(UILoggerMixin, {
         this.set('expandedEdit', true);
         this.set('valueLoading', true);
 
-        this.get('store').findAll('file-resource').then((data) => {
-          let fileResourceList = [];
-          data.forEach(x => {
-            let localFileResource = {'id': x.get('id'),
-              'name': x.get('name'),
-              'path': x.get('path'),
-              'owner': x.get('owner')
-            };
-            fileResourceList.push(localFileResource);
-          });
+        this.get('store').find('fileResource', fileResourceId).then((data) => {
+          this.set('udfFileResourceName', data.get('name'));
+          this.set('udfFileResourcePath', data.get('path'));
+        });
 
-          fileResourceList.filterBy('id', fileResourceId).map((data) => {
-            this.set('udfFileResourceName', data.name);
-            this.set('udfFileResourcePath', data.path);
 
-                    this.get('store').find('udf', udfId).then((data) => {
-                        this.set('editUdfId', udfId);
-                        this.set('editUdfName', data.get('name'));
-                        this.set('editUdfClassName', data.get('classname'));
-                        this.set('editOwner', data.get('owner'));
-                      });
-          });
-        });
         this.send('setFileResource', fileResourceId);
+
       }
     },
 
@@ -125,38 +75,39 @@ export default Ember.Component.extend(UILoggerMixin, {
     },
 
     saveUDf(name, classname, udfid, udfFileResourceName, udfFileResourcePath){
+
       let self = this;
-      if (this.validate(name, classname, udfFileResourceName, udfFileResourcePath)) {
-        if (!Ember.isEmpty(this.get('selectedFileResource'))) {
-          this.get('store').findRecord('udf', udfid).then(function (resultUdf) {
-            resultUdf.set('name', name);
-            resultUdf.set('classname', classname);
-            resultUdf.set('fileResource', self.get('selectedFileResource').id);
-            resultUdf.save();
-            self.set('expandedEdit', false);
-          });
-        }
-        else {
-
-          let resourcePayload = {"name": udfFileResourceName, "path": udfFileResourcePath};
-
-          this.get('udfService').savefileResource(resourcePayload)
-            .then((data) => {
-              console.log('fileResource is', data.fileResource.id);
-              self.get('store').findRecord('udf', udfid).then(function (resultUdf) {
-
-                resultUdf.set('name', name);
-                resultUdf.set('classname', classname);
-                resultUdf.set('fileResource', data.fileResource.id);
-                resultUdf.save();
-                self.set('expandedEdit', false);
-              });
-            }, (error) => {
-              console.log("Error encountered", error);
+
+      if(!Ember.isEmpty(this.get('selectedFileResource'))){
+        this.get('store').findRecord('udf', udfid).then(function(resultUdf) {
+          resultUdf.set('name', name);
+          resultUdf.set('classname', classname);
+          resultUdf.set('fileResource', self.get('selectedFileResource').id);
+          resultUdf.save();
+          self.set('expandedEdit', false);
+        });
+      } else {
+
+        let resourcePayload = {"name":udfFileResourceName,"path":udfFileResourcePath};
+
+        this.get('udfService').savefileResource(resourcePayload)
+          .then((data) => {
+            console.log('fileResource is', data.fileResource.id);
+            self.get('store').findRecord('udf', udfid).then(function(resultUdf) {
+
+              resultUdf.set('name', name);
+              resultUdf.set('classname', classname);
+              resultUdf.set('fileResource', data.fileResource.id);
+              resultUdf.save();
+              self.set('expandedEdit', false);
             });
-        }
+          }, (error) => {
+            console.log("Error encountered", error);
+          });
       }
+
       this.set('isAddingNewFileResource', false);
+
     },
 
     showRemoveUdfModal(udfId){
@@ -166,7 +117,16 @@ export default Ember.Component.extend(UILoggerMixin, {
     },
 
     removeUdf(){
-      this.sendAction('removeUdf', this.get('udfId') );
+      let self = this;
+      this.get('store').find('udf', this.get('udfId')).then(function(resultUdf) {
+        resultUdf.destroyRecord().then(function() {
+          self.send('cancelUdf');
+          self.sendAction('refreshUdfList');
+        }, function(response) {
+          console.log('UDF NOT deleted', response);
+        });
+        return false;
+      });
     },
 
     cancelUdf(){
@@ -184,22 +144,10 @@ export default Ember.Component.extend(UILoggerMixin, {
     },
 
     setFileResource(fileResourceId){
-      this.get('store').findAll('file-resource').then((data) => {
-        let fileResourceList = [];
-        data.forEach(x => {
-          let localFileResource = {'id': x.get('id'),
-            'name': x.get('name'),
-            'path': x.get('path'),
-            'owner': x.get('owner')
-          };
-          fileResourceList.push(localFileResource);
-        });
-
-        let localSelectedFileResource =  fileResourceList.filterBy('id', fileResourceId);
-        this.set('selectedFileResource',localSelectedFileResource.get('firstObject'));
-      });
-
+      let localSelectedFileResource = this.get('fileResourceList').filterBy('id', fileResourceId);
+      this.set('selectedFileResource',localSelectedFileResource[0]);
     }
+
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index 6b395ac..80116da 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -522,7 +522,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       Ember.run.later(() => {
 
       if(this.get('controller.model').get('isQueryDirty')) {
-        this.get('controller.model').set('tabDataToClose', {index:index, id:id});
+        this.get('controller.model').set('tabDataToClose', {index:index, id:id})
         this.send('openWorksheetModal');
       } else {
          this.send('closeWorksheet', index, id);
@@ -627,7 +627,7 @@ export default Ember.Route.extend(UILoggerMixin, {
     closeWorksheetModal(){
       this.get('controller').set('showWorksheetModal', false);
       this.closeWorksheetAfterSave();
-      this.get('controller.model').set('tabDataToClose', null);
+      this.get('controller.model').set('tabDataToClose', null)
   },
 
     expandQueryEdidorPanel(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
index 5733d5c..138e85f 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
@@ -19,9 +19,6 @@
 import Ember from 'ember';
 
 export default Ember.Route.extend({
-
-  showDeleteUdfModal: false,
-
   model() {
     return this.store.findAll('udf').then(udfs => udfs.toArray());
   },
@@ -51,6 +48,7 @@ export default Ember.Route.extend({
   actions:{
 
     refreshUdfList(){
+
       this.get('store').findAll('udf').then((data) => {
         let udfList = [];
         data.forEach(x => {
@@ -67,20 +65,8 @@ export default Ember.Route.extend({
         this.controllerFor('udfs').set('udflist',udfList);
         this.transitionTo('udfs');
       });
-    },
 
-    removeUdf(udfId){
-      var self = this;
-      let record = this.get('store').peekRecord('udf', udfId );
-      if(record){
-        record.destroyRecord().then(function(){
-          self.send('cancelUdf');
-          self.send('refreshUdfList');
-        })}
-    },
-
-    cancelUdf(){
-      this.set('showDeleteUdfModal', false);
     }
+
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
index 6207b77..84733e8 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
@@ -25,26 +25,6 @@ export default Ember.Route.extend(UILoggerMixin, {
 
   },
 
-  validateUDF(udfName, udfClassName){
-    if (Ember.isEmpty(udfName)) {
-      this.get('logger').danger('UDF Name can not be empty.');
-      return false;
-    }
-    if (Ember.isEmpty(udfClassName)) {
-      this.get('logger').danger('UDF Class Name can not be empty.');
-      return false;
-    }
-    return true;
-  },
-
-  validateFileResource(resourceName, resourcePath){
-    if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) {
-      this.get('logger').danger('File Resource can not be empty.');
-      return false;
-    }
-    return true;
-  },
-
   udf: Ember.inject.service(),
   store: Ember.inject.service(),
 
@@ -61,7 +41,7 @@ export default Ember.Route.extend(UILoggerMixin, {
                                 };
         fileResourceList.push(localFileResource);
       });
-      fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'});
+      fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'})
       controller.set('fileResourceList', fileResourceList);
 
     });
@@ -80,19 +60,52 @@ export default Ember.Route.extend(UILoggerMixin, {
       this.get('controller').set('udfName', udfName);
       this.get('controller').set('udfClassName', udfClassName);
 
+      if(!Ember.isEmpty( this.get('controller').get('resourceId'))){
 
+        let newUDF = this.get('store').createRecord('udf',
+          {name:udfName,
+           classname:udfClassName,
+           fileResource: this.get('controller').get('resourceId')
+          });
 
 
-      if(!Ember.isEmpty( this.get('controller').get('resourceId'))){
+        newUDF.save().then((data) => {
+          console.log('udf saved');
+
+          this.get('store').findAll('udf').then((data) => {
+            let udfList = [];
+            data.forEach(x => {
+              let localUdf = {
+                'id': x.get('id'),
+                'name': x.get('name'),
+                'classname': x.get('classname'),
+                'fileResource': x.get('fileResource'),
+                'owner': x.get('owner')
+              };
+              udfList.pushObject(localUdf);
+            });
+
+            this.controllerFor('udfs').set('udflist',udfList);
+            this.transitionTo('udfs');
+          })
 
-        if (this.validateUDF(udfName, udfClassName)) {
+        });
 
+      } else {
+
+        let resourcePayload = {"name":resourceName,"path":resourcePath};
+
+        var newFileResource = this.get('store').createRecord('file-resource',
+          {name:resourceName,
+            path:resourcePath
+          });
 
+        newFileResource.save().then((data) => {
+          console.log('fileResource is', data.get('id'));
           let newUDF = this.get('store').createRecord('udf',
-            {
-              name: udfName,
-              classname: udfClassName,
-              fileResource: this.get('controller').get('resourceId')
+            {name:udfName,
+              classname:udfClassName,
+              fileResource: data.get('id')
             });
 
           newUDF.save().then((data) => {
@@ -111,66 +124,20 @@ export default Ember.Route.extend(UILoggerMixin, {
                 udfList.pushObject(localUdf);
               });
 
-              this.controllerFor('udfs').set('udflist', udfList);
+              this.controllerFor('udfs').set('udflist',udfList);
               this.transitionTo('udfs');
-            });
-
-          });
-
-        }
-
-      } else {
-
-        let resourcePayload = {"name":resourceName,"path":resourcePath};
-
-        var newFileResource = this.get('store').createRecord('file-resource',
-          {name:resourceName,
-            path:resourcePath
-          });
-
-
-        if (this.validateFileResource(resourceName, resourcePath) && this.validateUDF(udfName, udfClassName)) {
-
-          newFileResource.save().then((data) => {
-              console.log('fileResource is', data.get('id'));
-              let newUDF = this.get('store').createRecord('udf',
-                {name:udfName,
-                  classname:udfClassName,
-                  fileResource: data.get('id')
-                });
-
-              newUDF.save().then((data) => {
-                  console.log('udf saved');
-
-                  this.get('store').findAll('udf').then((data) => {
-                    let udfList = [];
-                    data.forEach(x => {
-                      let localUdf = {
-                        'id': x.get('id'),
-                        'name': x.get('name'),
-                        'classname': x.get('classname'),
-                        'fileResource': x.get('fileResource'),
-                        'owner': x.get('owner')
-                      };
-                      udfList.pushObject(localUdf);
-                    });
-
-                    this.controllerFor('udfs').set('udflist',udfList);
-                    this.transitionTo('udfs');
-                  });
-                })
-                .catch((error) => {
-                  this.get('logger').danger('Failed to create UDF.', this.extractError(error));
-                  this.transitionTo('udfs');
-
-                });
             })
-            .catch((error) => {
-              this.get('logger').danger('Failed to create File Resource.', this.extractError(error));
-              this.transitionTo('udfs');
-            });
+          })
+          .catch((error) => {
+            this.get('logger').danger('Failed to create UDF.', this.extractError(error));
+            this.transitionTo('udfs');
 
-        }
+          });
+        })
+        .catch((error) => {
+          this.get('logger').danger('Failed to create File Resource.', this.extractError(error));
+          this.transitionTo('udfs');
+        });
 
       }
     },
@@ -186,11 +153,10 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     handleFileResourceChange(filter){
       console.log('filter', filter);
-      if(filter.action === "addNewFileResource"){
+      if(filter.action == "addNewFileResource"){
         this.get('controller').set('isAddingNewFileResource', true);
         this.get('controller').set('resourceName','');
         this.get('controller').set('resourcePath','');
-        this.get('controller').set('resourceId', null);
         this.get('controller').set('selectedFileResource',null);
 
       }else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
index b3276e7..2e8ec62 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
@@ -50,7 +50,7 @@ export default Ember.Service.extend({
       databaseRefreshStartingCallback();
       let oldDatabases = this.get('store').peekAll('database').mapBy('name');
       this.get('store').query('database', {}).then((data) => {
-        let deletedDbCount = 0;
+        let deletedDbCount = 0
         let newDatabases = data.mapBy('name');
         oldDatabases.forEach((oldDB) => {
           if (!newDatabases.contains(oldDB)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
index 929b91a..fec48fb 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
@@ -39,19 +39,19 @@
 
 {{#if expandedEdit}}
   {{udf-edit
-    udfid=editUdfId
-    name=editUdfName
-    classname=editUdfClassName
-    owner=editOwner
-    fileResource=editFileResource
-    udfFileResourceName=udfFileResourceName
-    udfFileResourcePath=udfFileResourcePath
-    fileResourceList=fileResourceList
-    selectedFileResource=selectedFileResource
-    isAddingNewFileResource=isAddingNewFileResource
-    handleResourceChange='handleResourceChange'
-    cancelEditUdf='cancelEditUdf'
-    saveUDf='saveUDf'
+  udfid=udf.id
+  name=udf.name
+  classname=udf.classname
+  owner=udf.owner
+  fileResource=udf.fileResource
+  udfFileResourceName=udfFileResourceName
+  udfFileResourcePath=udfFileResourcePath
+  fileResourceList=fileResourceList
+  selectedFileResource=selectedFileResource
+  isAddingNewFileResource=isAddingNewFileResource
+  handleResourceChange='handleResourceChange'
+  cancelEditUdf='cancelEditUdf'
+  saveUDf='saveUDf'
   }}
 {{/if}}
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a307ba7b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
index ffb824e..ef6a01c 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
@@ -35,10 +35,7 @@
           {{udf-item
           udf=udf
           fileResourceList=fileResourceList
-          showDeleteUdfModal=showDeleteUdfModal
           refreshUdfList='refreshUdfList'
-          removeUdf='removeUdf'
-          cancelUdf='cancelUdf'
           }}
         {{/each}}
       </tbody>


[18/50] [abbrv] ambari git commit: AMBARI-20319 Server startup script keeps waiting even if DB consistency has failed

Posted by ol...@apache.org.
AMBARI-20319 Server startup script keeps waiting even if DB consistency has failed


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

Branch: refs/heads/branch-dev-logsearch
Commit: 4df38c35f42a632dd822c6c59e4e520f6caad8fd
Parents: b9451a4
Author: Balazs Bence Sari <bs...@hortonworks.com>
Authored: Tue Mar 7 11:30:12 2017 +0100
Committer: lpuskas <lp...@apache.org>
Committed: Tue Mar 7 13:32:28 2017 +0100

----------------------------------------------------------------------
 .../ambari/server/controller/AmbariServer.java  |  4 +++
 .../src/main/python/ambari_server/utils.py      | 14 +++++++---
 .../src/main/python/ambari_server_main.py       | 28 +++++++++++++-------
 3 files changed, 32 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4df38c35/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
index b5acdce..17d9695 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
@@ -1004,6 +1004,10 @@ public class AmbariServer {
       ComponentSSLConfiguration.instance().init(server.configs);
       server.run();
     } catch (Throwable t) {
+      // Writing to system console is needed because loggers may not get flushed on exit and diagnostic information
+      // may get lost.
+      System.err.println("An unexpected error occured during starting Ambari Server.");
+      t.printStackTrace();
       LOG.error("Failed to run the Ambari Server", t);
       if (server != null) {
         server.stop();

http://git-wip-us.apache.org/repos/asf/ambari/blob/4df38c35/ambari-server/src/main/python/ambari_server/utils.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/utils.py b/ambari-server/src/main/python/ambari_server/utils.py
index 6408285..b51e37e 100644
--- a/ambari-server/src/main/python/ambari_server/utils.py
+++ b/ambari-server/src/main/python/ambari_server/utils.py
@@ -122,7 +122,10 @@ def save_pid(pid, pidfile):
 
 def save_main_pid_ex(pids, pidfile, exclude_list=[], skip_daemonize=False):
   """
-    Save pid which is not included to exclude_list to pidfile.
+    Saves and returns the first (and supposingly only) pid from the list of pids
+    which is not included in the exclude_list.
+
+    pidfile is the name of the file to save the pid to
 
     exclude_list contains list of full executable paths which should be excluded
   """
@@ -133,7 +136,7 @@ def save_main_pid_ex(pids, pidfile, exclude_list=[], skip_daemonize=False):
       for item in pids:
         if pid_exists(item["pid"]) and (item["exe"] not in exclude_list):
           pfile.write("%s\n" % item["pid"])
-          pid_saved = True
+          pid_saved = item["pid"]
           logger.info("Ambari server started with PID " + str(item["pid"]))
         if pid_exists(item["pid"]) and (item["exe"] in exclude_list) and not skip_daemonize:
           try:
@@ -157,7 +160,7 @@ def get_live_pids_count(pids):
   """
   return len([pid for pid in pids if pid_exists(pid)])
 
-def wait_for_ui_start(ambari_server_ui_port, timeout=1):
+def wait_for_ui_start(ambari_server_ui_port, pid, timeout=1):
 
   tstart = time.time()
   while int(time.time()-tstart) <= timeout:
@@ -173,7 +176,10 @@ def wait_for_ui_start(ambari_server_ui_port, timeout=1):
 
     sys.stdout.write('.')
     sys.stdout.flush()
-    time.sleep(1)
+    if pid_exists(pid):
+      time.sleep(1)
+    else:
+      break
 
   return False
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/4df38c35/ambari-server/src/main/python/ambari_server_main.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server_main.py b/ambari-server/src/main/python/ambari_server_main.py
index 0cd19cc..0eb4243 100644
--- a/ambari-server/src/main/python/ambari_server_main.py
+++ b/ambari-server/src/main/python/ambari_server_main.py
@@ -21,6 +21,7 @@ import os
 import subprocess
 import sys
 import logging
+import time
 
 from ambari_commons.exceptions import FatalException
 from ambari_commons.logging_utils import get_debug_mode, print_warning_msg, print_info_msg, set_debug_mode_from_options
@@ -115,6 +116,8 @@ CHECK_DATABASE_SKIPPED_PROPERTY = "check_database_skipped"
 
 AMBARI_SERVER_DIE_MSG = "Ambari Server java process died with exitcode {0}. Check {1} for more information."
 AMBARI_SERVER_NOT_STARTED_MSG = "Ambari Server java process hasn't been started or can't be determined."
+AMBARI_SERVER_STOPPED = "Ambari Server java process has stopped. Please check the logs for more information."
+AMBARI_SERVER_UI_TIMEOUT = "Server not yet listening on http port {0} after {1} seconds. Exiting."
 AMBARI_SERVER_STARTED_SUCCESS_MSG = "Ambari Server has started successfully"
 
 # linux open-file limit
@@ -211,27 +214,32 @@ def wait_for_server_start(pidFile, scmStatus):
   sys.stdout.write('Waiting for server start...')
   sys.stdout.flush()
   pids = []
-  server_started = False
+  pid = None
   # looking_for_pid() might return partrial pid list on slow hardware
   for i in range(1, SERVER_START_RETRIES):
     pids = looking_for_pid(SERVER_SEARCH_PATTERN, SERVER_START_TIMEOUT)
-    if save_main_pid_ex(pids, pidFile, locate_all_file_paths('sh', '/bin') +
-                        locate_all_file_paths('bash', '/bin') +
-                        locate_all_file_paths('dash', '/bin'), IS_FOREGROUND):
-      server_started = True
+    pid = save_main_pid_ex(pids, pidFile, locate_all_file_paths('sh', '/bin') +
+                           locate_all_file_paths('bash', '/bin') +
+                           locate_all_file_paths('dash', '/bin'), IS_FOREGROUND)
+    if pid:
       break
     else:
       sys.stdout.write("Unable to determine server PID. Retrying...\n")
       sys.stdout.flush()
 
   exception = None
-  if server_started:
+  if pid:
     ambari_server_ui_port = get_ambari_server_ui_port(properties)
     web_server_startup_timeout = get_web_server_startup_timeout(properties)
-
-    if not wait_for_ui_start(int(ambari_server_ui_port), web_server_startup_timeout):
-      exception = FatalException(1, "Server not yet listening on http port " + ambari_server_ui_port + \
-                                 " after " + str(web_server_startup_timeout) + " seconds. Exiting.")
+    waitStart = time.time()
+    if not wait_for_ui_start(int(ambari_server_ui_port), pid, web_server_startup_timeout):
+      waitTime = int(time.time()-waitStart)
+      # Java process stopped, due to a DB check or other startup issue
+      if waitTime < web_server_startup_timeout:
+        exception = FatalException(-1, AMBARI_SERVER_STOPPED)
+      # UI didn't come up on time
+      else:
+        exception = FatalException(1, AMBARI_SERVER_UI_TIMEOUT.format(ambari_server_ui_port, web_server_startup_timeout))
   elif get_live_pids_count(pids) <= 0:
     exitcode = check_exitcode(os.path.join(configDefaults.PID_DIR, EXITCODE_NAME))
     exception = FatalException(-1, AMBARI_SERVER_DIE_MSG.format(exitcode, configDefaults.SERVER_OUT_FILE))


[28/50] [abbrv] ambari git commit: AMBARI-20340.Issue with toggling of Execute/Stop button in query page while successful and failure execution of query.(Venkata Sairam)

Posted by ol...@apache.org.
AMBARI-20340.Issue with toggling of Execute/Stop button in query page while successful and failure execution of query.(Venkata Sairam)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 267c98fb8afdb32dae3ae192f12324b040e55880
Parents: f66a663
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Wed Mar 8 16:26:45 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Wed Mar 8 16:27:46 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/routes/queries/query.js    | 73 +++++++++++---------
 .../src/main/resources/ui/app/styles/app.scss   |  4 +-
 2 files changed, 45 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/267c98fb/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index 08af7d4..80116da 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -133,9 +133,9 @@ export default Ember.Route.extend(UILoggerMixin, {
     controller.set('currentQuery', model.get('query'));
     controller.set('currentJobId', null);
     controller.set('queryResult', model.get('queryResult'));
-    controller.set('isJobSuccess', false);
-    controller.set('isJobCancelled', false);
-    controller.set('isJobCreated', false);
+    controller.set('isJobSuccess', model.get('isJobSuccess'));
+    controller.set('isJobCancelled', model.get('isJobCancelled'));
+    controller.set('isJobCreated', model.get('isJobCreated'));
 
     controller.set('isExportResultSuccessMessege', false);
     controller.set('isExportResultFailureMessege', false);
@@ -181,19 +181,22 @@ export default Ember.Route.extend(UILoggerMixin, {
   },
   actions: {
 
-    resetDefaultWorksheet(){
-      this.get('controller.model').set('queryResult',{'schema' :[], 'rows' :[]});
-      this.get('controller.model').set('currentPage',0);
-      this.get('controller.model').set('previousPage',-1);
-      this.get('controller.model').set('nextPage',1);
+    resetDefaultWorksheet(currModel){
+      if(!currModel) {
+        currModel = this.get('controller.model');
+      }
+      currModel.set('queryResult',{'schema' :[], 'rows' :[]});
+      currModel.set('currentPage',0);
+      currModel.set('previousPage',-1);
+      currModel.set('nextPage',1);
       //this.get('controller.model').set('selected',false);
-      this.get('controller.model').set('jobData',[]);
-      this.get('controller.model').set('currentJobData',null);
-      this.get('controller.model').set('queryFile',"");
-      this.get('controller.model').set('logFile',"");
-      this.get('controller.model').set('logResults',"");
-      this.get('controller.model').set('isQueryRunning',false);
-      this.get('controller.model').set('isQueryResultContainer',false);
+      currModel.set('jobData',[]);
+      currModel.set('currentJobData',null);
+      currModel.set('queryFile',"");
+      currModel.set('logFile',"");
+      currModel.set('logResults',"");
+      currModel.set('isQueryRunning',false);
+      currModel.set('isQueryResultContainer',false);
     },
 
     changeDbHandler(selectedDBs){
@@ -244,9 +247,8 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     executeQuery(isVisualExplainQuery){
 
-      let self = this;
+      let self = this, ctrlr = self.get('controller'), ctrlrModel = self.get('controller.model');
       this.get('controller').set('currentJobId', null);
-
       if(!Ember.isEmpty(isVisualExplainQuery)){
         isVisualExplainQuery = true;
         this.get('controller').set('isVisualExplainQuery', true);
@@ -258,7 +260,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       let originalQuery = this.get('controller').get('currentQuery');
       if(Ember.isBlank(originalQuery)) {
         this.get('logger').danger('Query cannot be empty.');
-        this.send('resetDefaultWorksheet');
+        this.send('resetDefaultWorksheet', ctrlrModel);
         return;
       }
       let queryInput = originalQuery;
@@ -299,7 +301,8 @@ export default Ember.Route.extend(UILoggerMixin, {
 
 
       this.get('controller.model').set('isQueryRunning', true);
-      this.get('controller.model').set('isJobCreated',false);
+      ctrlrModel.set('isJobCreated',false);
+      ctrlr.set('isJobCreated',false);
 
       //this.get('controller').set('queryResult', self.get('controller').get('queryResult'));
       //this.get('controller.model').set('queryResult', self.get('controller').get('queryResult'));
@@ -323,31 +326,38 @@ export default Ember.Route.extend(UILoggerMixin, {
         self.get('controller.model').set('queryFile', data.job.queryFile);
         self.get('controller.model').set('logFile', data.job.logFile);
         self.get('controller').set('currentJobId', data.job.id);
-        self.get('controller').set('isJobCreated',true);
+        ctrlrModel.set('isJobCreated',true);
+        ctrlr.set('isJobCreated',true);
 
         self.get('jobs').waitForJobToComplete(data.job.id, 2 * 1000, false)
           .then((status) => {
-            self.get('controller').set('isJobSuccess', true);
-            self.get('controller').set('isJobCancelled', false);
-            self.get('controller').set('isJobCreated', false);
+            ctrlrModel.set('isJobSuccess', true);
+            ctrlrModel.set('isJobCancelled', false);
+            ctrlrModel.set('isJobCreated', false);
+            ctrlr.set('isJobSuccess', true);
+            ctrlr.set('isJobCancelled', false);
+            ctrlr.set('isJobCreated', false);
             let jobDetails = self.store.peekRecord('job', data.job.id);
             console.log(jobDetails);
-            self.send('getJobResult', data, payload.id, jobDetails);
+            self.send('getJobResult', data, payload.id, jobDetails, ctrlrModel);
             self.get('logger').success('Query has been submitted.');
 
           }, (error) => {
             console.log('error', error);
-            self.get('controller').set('isJobSuccess', false);
-            self.get('controller').set('isJobCancelled', false);
-            self.get('controller').set('isJobCreated', false);
+            ctrlrModel.set('isJobSuccess', false);
+            ctrlrModel.set('isJobCancelled', false);
+            ctrlrModel.set('isJobCreated', false);
+            ctrlr.set('isJobSuccess', false);
+            ctrlr.set('isJobCancelled', false);
+            ctrlr.set('isJobCreated', false);
             self.get('logger').danger('Failed to execute query.', self.extractError(error));
-            self.send('resetDefaultWorksheet');
+            self.send('resetDefaultWorksheet', ctrlrModel);
           });
 
       }, function(error) {
         console.log(error);
         self.get('logger').danger('Failed to execute query.', self.extractError(error));
-        self.send('resetDefaultWorksheet');
+        self.send('resetDefaultWorksheet', ctrlrModel);
       });
     },
 
@@ -357,7 +367,7 @@ export default Ember.Route.extend(UILoggerMixin, {
         .then( data => this.get('controller').set('isJobCancelled', true));
     },
 
-    getJobResult(data, payloadTitle, jobDetails){
+    getJobResult(data, payloadTitle, jobDetails, ctrlrModel){
       let self = this;
 
       let isVisualExplainQuery = this.get('controller').get('isVisualExplainQuery');
@@ -411,6 +421,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       }, function(error) {
         console.log('error' , error);
         self.get('logger').danger('Failed to execute query.', self.extractError(error));
+        self.send('resetDefaultWorksheet', ctrlrModel);
       });
     },
 
@@ -563,7 +574,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       let originalQuery = this.get('controller').get('currentQuery');
       if(Ember.isBlank(originalQuery)) {
         this.get('logger').danger('Query cannot be empty.');
-        this.send('resetDefaultWorksheet');
+        this.send('resetDefaultWorksheet', this.get('controller.model'));
         return;
       }
       let wf = this.store.peekAll('worksheet').filterBy('id', this.paramsFor('queries.query').worksheetId.toLowerCase()).get('firstObject');

http://git-wip-us.apache.org/repos/asf/ambari/blob/267c98fb/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
index 1b18955..e083922 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
@@ -956,5 +956,7 @@ rect.operator__box {
 
 .closeTab {
   cursor: pointer;
-  padding-left:10px;
+  position:relative;
+  bottom:10px;
+  right:-15px;
 }
\ No newline at end of file


[13/50] [abbrv] ambari git commit: AMBARI-19433. Increase default timeout and threadpool size for the external script to work on slower machines. (jaimin)

Posted by ol...@apache.org.
AMBARI-19433. Increase default timeout and threadpool size for the external script to work on slower machines. (jaimin)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 23bd4187cb8442bcc06fd20469e9f8b77158a4cf
Parents: 8e68824
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Mon Mar 6 11:41:27 2017 -0800
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Mon Mar 6 11:42:18 2017 -0800

----------------------------------------------------------------------
 .../org/apache/ambari/server/configuration/Configuration.java    | 4 ++--
 .../server/controller/internal/ClientConfigResourceProvider.java | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/23bd4187/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 27ac82c..cfb4d3d 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
@@ -1754,7 +1754,7 @@ public class Configuration {
    */
   @Markdown(description = "The time, in milliseconds, until an external script is killed.")
   public static final ConfigurationProperty<Integer> EXTERNAL_SCRIPT_TIMEOUT = new ConfigurationProperty<>(
-      "server.script.timeout", 5000);
+      "server.script.timeout", 10000);
 
   /**
    * The time, in {@link TimeUnit#MILLISECONDS}, until an external script is killed.
@@ -1762,7 +1762,7 @@ public class Configuration {
    */
   @Markdown(description = "The number of threads that should be allocated to run external script.")
   public static final ConfigurationProperty<Integer> THREAD_POOL_SIZE_FOR_EXTERNAL_SCRIPT = new ConfigurationProperty<>(
-    "server.script.threads", 4);
+    "server.script.threads", 20);
 
   public static final String DEF_ARCHIVE_EXTENSION;
   public static final String DEF_ARCHIVE_CONTENT_TYPE;

http://git-wip-us.apache.org/repos/asf/ambari/blob/23bd4187/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
index 42e9b34..b690e3a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
@@ -479,7 +479,8 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
       throw new SystemException("No configuration files defined for any component" );
     }
 
-    Integer threadPoolSize = configs.getExternalScriptThreadPoolSize();
+    Integer totalCommands = pythonCompressFilesCmds.size() * 2;
+    Integer threadPoolSize = Math.min(totalCommands,configs.getExternalScriptThreadPoolSize());
     ExecutorService processExecutor = Executors.newFixedThreadPool(threadPoolSize);
 
     // put all threads that starts process to compress each component config files in the executor


[43/50] [abbrv] ambari git commit: AMBARI-20344. RU: MR2 service check failed during rolling upgrade. Remove clutter from slider service check (dlysnichenko)

Posted by ol...@apache.org.
AMBARI-20344. RU: MR2 service check failed during rolling upgrade. Remove clutter from slider service check (dlysnichenko)


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

Branch: refs/heads/branch-dev-logsearch
Commit: c52027c849038c11e58e1c0b4eecb740bc9d0a1a
Parents: c9f7056
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Thu Mar 9 16:18:15 2017 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Thu Mar 9 16:19:15 2017 +0200

----------------------------------------------------------------------
 .../SLIDER/0.60.0.2.2/package/scripts/service_check.py             | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c52027c8/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
index 3b2c4ab..f8e213c 100644
--- a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
+++ b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
@@ -39,7 +39,6 @@ class SliderServiceCheck(Script):
   def service_check(self, env):
     import params
     env.set_params(params)
-    environment={'HADOOP_CONF_DIR': '/usr/hdp/2.4.3.0-227/hadoop/conf'}
 
     if params.stack_version_formatted and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted):
       copy_to_hdfs("slider", params.user_group, params.hdfs_user, skip=params.sysprep_skip_copy_tarballs_hdfs)
@@ -54,7 +53,6 @@ class SliderServiceCheck(Script):
             try_sleep=5,
             user=params.smokeuser,
             logoutput=True,
-            environment=environment
     )
 
 


[47/50] [abbrv] ambari git commit: AMBARI-20359. Not able to import workflow with fs action node (Madhan Mohan Reddy via pallavkul)

Posted by ol...@apache.org.
AMBARI-20359. Not able to import workflow with fs action node (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/c4766293
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c4766293
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c4766293

Branch: refs/heads/branch-dev-logsearch
Commit: c476629345c05896a445f005e94f2ab605510362
Parents: 9583386
Author: pallavkul <pa...@gmail.com>
Authored: Thu Mar 9 20:25:50 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Thu Mar 9 20:28:13 2017 +0530

----------------------------------------------------------------------
 .../src/main/resources/ui/app/domain/workflow-importer.js          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c4766293/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 ccf8209..a076e3e 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
@@ -106,7 +106,7 @@ var WorkflowImporter= Ember.Object.extend({
       if (nodeHandler){
         if (Ember.isArray(workflowAppJson[key])){
           workflowAppJson[key].forEach(function(jsonObj){
-            var node=nodeHandler.handleImportNode(key,jsonObj,workflow);
+            var node=nodeHandler.handleImportNode(key,jsonObj,workflow,xmlDoc);
             nodeMap.set(jsonObj._name,{json:jsonObj,node:node});
           });
         }else{


[48/50] [abbrv] ambari git commit: AMBARI-20362: Enable Authentication in Zeppelin out of Box (Prabhjyot Singh via r-kamath)

Posted by ol...@apache.org.
AMBARI-20362: Enable Authentication in Zeppelin out of Box (Prabhjyot Singh via r-kamath)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 47f924334b850e572298fbd8700a993cdb19065c
Parents: c476629
Author: Renjith Kamath <re...@gmail.com>
Authored: Thu Mar 9 20:40:19 2017 +0530
Committer: Renjith Kamath <re...@gmail.com>
Committed: Thu Mar 9 20:40:19 2017 +0530

----------------------------------------------------------------------
 .../configuration/zeppelin-shiro-ini.xml        | 71 ++++++++++++++------
 1 file changed, 49 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/47f92433/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-shiro-ini.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-shiro-ini.xml b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-shiro-ini.xml
index 3e2da1e..971e4af 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-shiro-ini.xml
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/configuration/zeppelin-shiro-ini.xml
@@ -24,39 +24,66 @@
 [users]
 # List of users with their password allowed to access Zeppelin.
 # To use a different strategy (LDAP / Database / ...) check the shiro doc at http://shiro.apache.org/configuration.html#Configuration-INISections
-#admin = password1
-#user1 = password2, role1, role2
-#user2 = password3, role3
-#user3 = password4, role2
+admin = admin, admin
+user1 = user1, role1, role2
+user2 = user2, role3
+user3 = user3, role2
 
 # Sample LDAP configuration, for user Authentication, currently tested for single Realm
 [main]
-#activeDirectoryRealm = org.apache.zeppelin.server.ActiveDirectoryGroupRealm
-#activeDirectoryRealm.systemUsername = CN=Administrator,CN=Users,DC=HW,DC=EXAMPLE,DC=COM
-#activeDirectoryRealm.systemPassword = Password1!
-#activeDirectoryRealm.hadoopSecurityCredentialPath = jceks://user/zeppelin/zeppelin.jceks
-#activeDirectoryRealm.searchBase = CN=Users,DC=HW,DC=TEST,DC=COM
-#activeDirectoryRealm.url = ldap://ad-nano.test.example.com:389
-#activeDirectoryRealm.groupRolesMap = ""
-#activeDirectoryRealm.authorizationCachingEnabled = true
-
-#ldapRealm = org.apache.shiro.realm.ldap.JndiLdapRealm
-#ldapRealm.userDnTemplate = uid={0},cn=users,cn=accounts,dc=example,dc=com
-#ldapRealm.contextFactory.url = ldap://ldaphost:389
+### A sample for configuring Active Directory Realm
+#activeDirectoryRealm = org.apache.zeppelin.realm.ActiveDirectoryGroupRealm
+#activeDirectoryRealm.systemUsername = userNameA
+
+#use either systemPassword or hadoopSecurityCredentialPath, more details in http://zeppelin.apache.org/docs/latest/security/shiroauthentication.html
+#activeDirectoryRealm.systemPassword = passwordA
+#activeDirectoryRealm.hadoopSecurityCredentialPath = jceks://file/user/zeppelin/zeppelin.jceks
+#activeDirectoryRealm.searchBase = CN=Users,DC=SOME_GROUP,DC=COMPANY,DC=COM
+#activeDirectoryRealm.url = ldap://ldap.test.com:389
+#activeDirectoryRealm.groupRolesMap = "CN=admin,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"admin","CN=finance,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"finance","CN=hr,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"hr"
+#activeDirectoryRealm.authorizationCachingEnabled = false
+
+### A sample for configuring LDAP Directory Realm
+#ldapRealm = org.apache.zeppelin.realm.LdapGroupRealm
+## search base for ldap groups (only relevant for LdapGroupRealm):
+#ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM
+#ldapRealm.contextFactory.url = ldap://ldap.test.com:389
+#ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM
 #ldapRealm.contextFactory.authenticationMechanism = SIMPLE
-#sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
-#securityManager.sessionManager = $sessionManager
+
+### A sample PAM configuration
+#pamRealm=org.apache.zeppelin.realm.PamRealm
+#pamRealm.service=sshd
+
+
+sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
+### If caching of user is required then uncomment below lines
+cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
+securityManager.cacheManager = $cacheManager
+
+securityManager.sessionManager = $sessionManager
 # 86,400,000 milliseconds = 24 hour
-#securityManager.sessionManager.globalSessionTimeout = 86400000
+securityManager.sessionManager.globalSessionTimeout = 86400000
 shiro.loginUrl = /api/login
 
+[roles]
+role1 = *
+role2 = *
+role3 = *
+admin = *
+
 [urls]
+# This section is used for url-based security.
+# You can secure interpreter, configuration and credential information by urls. Comment or uncomment the below urls that you want to hide.
 # anon means the access is anonymous.
-# authcBasic means Basic Auth Security
+# authc means Form based Auth Security
 # To enfore security, comment the line below and uncomment the next one
 /api/version = anon
-/** = anon
-#/** = authc
+#/api/interpreter/** = authc, roles[admin]
+#/api/configurations/** = authc, roles[admin]
+#/api/credential/** = authc, roles[admin]
+#/** = anon
+/** = authc
       </value>
     <on-ambari-upgrade add="true"/>
   </property>


[41/50] [abbrv] ambari git commit: AMBARI-20343 Zeppelin: Configure both Hive and Hive interactive interpreters whenever required (r-kamath)

Posted by ol...@apache.org.
AMBARI-20343 Zeppelin: Configure both Hive and Hive interactive interpreters whenever required (r-kamath)


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

Branch: refs/heads/branch-dev-logsearch
Commit: c7086b11b7e5536e0c8b56130774e728aa3363f6
Parents: ec33f22
Author: Renjith Kamath <re...@gmail.com>
Authored: Thu Mar 9 12:44:31 2017 +0530
Committer: Renjith Kamath <re...@gmail.com>
Committed: Thu Mar 9 12:44:31 2017 +0530

----------------------------------------------------------------------
 .../0.6.0.2.5/package/scripts/master.py         | 29 +++++++++++++++++---
 .../0.6.0.2.5/package/scripts/params.py         | 10 +++++++
 2 files changed, 35 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c7086b11/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
index fc24918..a460aec 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/master.py
@@ -319,10 +319,15 @@ class Master(Script):
       config_id = livy2_config["id"]
       interpreter_settings[config_id] = livy2_config
 
+    hive_interactive_properties_key = 'hive_interactive'
     for setting_key in interpreter_settings.keys():
       interpreter = interpreter_settings[setting_key]
       if interpreter['group'] == 'jdbc':
         interpreter['dependencies'] = []
+
+        if not params.hive_server_host and params.hive_server_interactive_hosts:
+          hive_interactive_properties_key = 'hive'
+
         if params.hive_server_host:
           interpreter['properties']['hive.driver'] = 'org.apache.hive.jdbc.HiveDriver'
           interpreter['properties']['hive.user'] = 'hive'
@@ -330,17 +335,33 @@ class Master(Script):
           if params.hive_server2_support_dynamic_service_discovery:
             interpreter['properties']['hive.url'] = 'jdbc:hive2://' + \
                                                  params.hive_zookeeper_quorum + \
-                                                 '/;' + 'serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
+                                                 '/;' + 'serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=' + \
+                                                    params.hive_zookeeper_namespace
           else:
             interpreter['properties']['hive.url'] = 'jdbc:hive2://' + \
                                                  params.hive_server_host + \
                                                      ':' + params.hive_server_port
+        if params.hive_server_interactive_hosts:
+          interpreter['properties'][hive_interactive_properties_key + '.driver'] = 'org.apache.hive.jdbc.HiveDriver'
+          interpreter['properties'][hive_interactive_properties_key + '.user'] = 'hive'
+          interpreter['properties'][hive_interactive_properties_key + '.password'] = ''
+          if params.hive_server2_support_dynamic_service_discovery:
+            interpreter['properties'][hive_interactive_properties_key + '.url'] = 'jdbc:hive2://' + \
+                                                    params.hive_zookeeper_quorum + \
+                                                    '/;' + 'serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=' + \
+                                                    params.hive_interactive_zookeeper_namespace
+          else:
+            interpreter['properties'][hive_interactive_properties_key + '.url'] = 'jdbc:hive2://' + \
+                                                    params.hive_server_interactive_hosts + \
+                                                    ':' + params.hive_server_port
+
+        if params.hive_server_host or params.hive_server_interactive_hosts:
           interpreter['dependencies'].append(
-              {"groupArtifactVersion": "org.apache.hive:hive-jdbc:2.0.1", "local": "false"})
+            {"groupArtifactVersion": "org.apache.hive:hive-jdbc:2.0.1", "local": "false"})
           interpreter['dependencies'].append(
-              {"groupArtifactVersion": "org.apache.hadoop:hadoop-common:2.7.2", "local": "false"})
+            {"groupArtifactVersion": "org.apache.hadoop:hadoop-common:2.7.2", "local": "false"})
           interpreter['dependencies'].append(
-              {"groupArtifactVersion": "org.apache.hive.shims:hive-shims-0.23:2.1.0", "local": "false"})
+            {"groupArtifactVersion": "org.apache.hive.shims:hive-shims-0.23:2.1.0", "local": "false"})
 
         if params.zookeeper_znode_parent \
                 and params.hbase_zookeeper_quorum:

http://git-wip-us.apache.org/repos/asf/ambari/blob/c7086b11/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
index 9fd105b..fdc96db 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0.2.5/package/scripts/params.py
@@ -123,6 +123,9 @@ hive_server_port = None
 hive_zookeeper_quorum = None
 hive_server2_support_dynamic_service_discovery = None
 is_hive_installed = False
+hive_zookeeper_namespace = None
+hive_interactive_zookeeper_namespace = None
+
 if 'hive_server_host' in master_configs and len(master_configs['hive_server_host']) != 0:
   is_hive_installed = True
   spark_hive_properties = {
@@ -134,8 +137,15 @@ if 'hive_server_host' in master_configs and len(master_configs['hive_server_host
     get_port_from_url(config['configurations']['hive-site']['hive.metastore.uris']))
   hive_server_port = str(config['configurations']['hive-site']['hive.server2.thrift.http.port'])
   hive_zookeeper_quorum = config['configurations']['hive-site']['hive.zookeeper.quorum']
+  hive_zookeeper_namespace = config['configurations']['hive-site']['hive.server2.zookeeper.namespace']
   hive_server2_support_dynamic_service_discovery = config['configurations']['hive-site']['hive.server2.support.dynamic.service.discovery']
 
+hive_server_interactive_hosts = None
+if 'hive_server_interactive_hosts' in master_configs and len(master_configs['hive_server_interactive_hosts']) != 0:
+    hive_server_interactive_hosts = str(master_configs['hive_server_interactive_hosts'][0])
+    hive_interactive_zookeeper_namespace = config['configurations']['hive-interactive-site']['hive.server2.zookeeper.namespace']
+    hive_server_port = str(config['configurations']['hive-site']['hive.server2.thrift.http.port'])
+
 # detect hbase details if installed
 zookeeper_znode_parent = None
 hbase_zookeeper_quorum = None


[03/50] [abbrv] ambari git commit: AMBARI-20275. Credential Store should be enabled by default on fresh installs (Madhuvanthi Radhakrishnan via smohanty)

Posted by ol...@apache.org.
AMBARI-20275. Credential Store should be enabled by default on fresh installs (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/df3b028d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/df3b028d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/df3b028d

Branch: refs/heads/branch-dev-logsearch
Commit: df3b028db23418d788361d54c0924354af783867
Parents: 0ba42cf
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Sun Mar 5 10:42:40 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Sun Mar 5 10:42:40 2017 -0800

----------------------------------------------------------------------
 .../0.12.0.2.0/package/scripts/hive_interactive.py   |  7 +++++++
 .../common-services/LOGSEARCH/0.5.0/metainfo.xml     |  1 +
 .../stacks/HDP/2.5/services/HIVE/metainfo.xml        |  2 +-
 .../stacks/HDP/2.5/services/OOZIE/metainfo.xml       |  2 +-
 .../python/stacks/2.5/HIVE/test_hive_server_int.py   | 15 ++++++++++++---
 .../stacks/2.5/configs/hsi_default_for_restart.json  |  1 +
 6 files changed, 23 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/df3b028d/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_interactive.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_interactive.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_interactive.py
index 1ca65fe..eba3f3a 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_interactive.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_interactive.py
@@ -43,6 +43,7 @@ from resource_management.core.shell import quote_bash_args
 from resource_management.core.logger import Logger
 from resource_management.core import utils
 from resource_management.libraries.functions.setup_atlas_hook import has_atlas_in_cluster, setup_atlas_hook
+from resource_management.libraries.functions.security_commons import update_credential_provider_path
 from ambari_commons.constants import SERVICE
 
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
@@ -200,6 +201,12 @@ def hive_interactive(name=None):
                   group=params.user_group,
                   mode=0644)
       else:
+        merged_hive_interactive_site = update_credential_provider_path(merged_hive_interactive_site,
+                                                                  'hive-site',
+                                                                  os.path.join(conf_dir, 'hive-site.jceks'),
+                                                                  params.hive_user,
+                                                                  params.user_group
+        )
         XmlConfig("hive-site.xml",
                   conf_dir=conf_dir,
                   configurations=merged_hive_interactive_site,

http://git-wip-us.apache.org/repos/asf/ambari/blob/df3b028d/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
index 245a94d..fa9548b 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
@@ -28,6 +28,7 @@
       <credential-store>
         <supported>true</supported>
         <enabled>true</enabled>
+        <required>true</required>
       </credential-store>
 
       <components>

http://git-wip-us.apache.org/repos/asf/ambari/blob/df3b028d/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
index 4230dd4..f2a1161 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/metainfo.xml
@@ -23,7 +23,7 @@
       <version>1.2.1.2.5</version>
       <credential-store>
         <supported>true</supported>
-        <enabled>false</enabled>
+        <enabled>true</enabled>
       </credential-store>
       <components>
         <component>

http://git-wip-us.apache.org/repos/asf/ambari/blob/df3b028d/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
index 75aa9d9..05b1543 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/OOZIE/metainfo.xml
@@ -22,7 +22,7 @@
       <name>OOZIE</name>
       <credential-store>
         <supported>true</supported>
-        <enabled>false</enabled>
+        <enabled>true</enabled>
       </credential-store>
       <extends>common-services/OOZIE/4.2.0.2.5</extends>
     </service>

http://git-wip-us.apache.org/repos/asf/ambari/blob/df3b028d/ambari-server/src/test/python/stacks/2.5/HIVE/test_hive_server_int.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/HIVE/test_hive_server_int.py b/ambari-server/src/test/python/stacks/2.5/HIVE/test_hive_server_int.py
index 6f017bc..d76ffaa 100644
--- a/ambari-server/src/test/python/stacks/2.5/HIVE/test_hive_server_int.py
+++ b/ambari-server/src/test/python/stacks/2.5/HIVE/test_hive_server_int.py
@@ -292,7 +292,7 @@ class TestHiveServerInteractive(RMFTestCase):
                               action=['delete'],
                               )
 
-    self.assert_configure_default()
+    self.assert_configure_default(with_cs_enabled=True)
 
     self.assertResourceCalled('Execute',
                               '/home/hive/llap-slider-05Apr2016/run.sh',
@@ -416,7 +416,7 @@ class TestHiveServerInteractive(RMFTestCase):
     self.assertNoMoreResources()
 
 
-  def assert_configure_default(self, no_tmp=False, default_fs_default=u'hdfs://c6401.ambari.apache.org:8020'):
+  def assert_configure_default(self, no_tmp=False, default_fs_default=u'hdfs://c6401.ambari.apache.org:8020', with_cs_enabled=False):
 
     self.assertResourceCalled('HdfsResource', '/user/hive',
                               immutable_paths = self.DEFAULT_IMMUTABLE_PATHS,
@@ -533,6 +533,15 @@ class TestHiveServerInteractive(RMFTestCase):
                                     configurations=hive_site_conf_for_client,
           )
         else:
+          if with_cs_enabled:
+            self.assertResourceCalled('File', '/usr/hdp/current/hive-server2-hive2/conf/conf.server/hive-site.jceks',
+                                      content=StaticFile('/var/lib/ambari-agent/data/abc.jceks'),
+                                      owner='hive',
+                                      group='hadoop',
+                                      mode = 0640,
+                                      )
+            self.assertTrue('hadoop.security.credential.provider.path' in hive_site_conf)
+            hive_site_conf['hadoop.security.credential.provider.path'] = 'jceks://file/usr/hdp/current/hive-server2-hive2/conf/conf.server/hive-site.jceks'
           self.assertResourceCalled('XmlConfig', 'hive-site.xml',
                                     group='hadoop',
                                     conf_dir=conf_dir,
@@ -542,7 +551,7 @@ class TestHiveServerInteractive(RMFTestCase):
                                                                          u'javax.jdo.option.ConnectionPassword': u'true'}},
                                     owner='hive',
                                     configurations=hive_site_conf,
-          )
+                                    )
 
         if conf_dir == '/usr/hdp/current/hive-server2-hive2/conf/conf.server':
           self.assertResourceCalled('XmlConfig', 'hiveserver2-site.xml',

http://git-wip-us.apache.org/repos/asf/ambari/blob/df3b028d/ambari-server/src/test/python/stacks/2.5/configs/hsi_default_for_restart.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/configs/hsi_default_for_restart.json b/ambari-server/src/test/python/stacks/2.5/configs/hsi_default_for_restart.json
index 52b3983..f6de1c4 100644
--- a/ambari-server/src/test/python/stacks/2.5/configs/hsi_default_for_restart.json
+++ b/ambari-server/src/test/python/stacks/2.5/configs/hsi_default_for_restart.json
@@ -372,6 +372,7 @@
             "a" : "e"
         },
         "hive-site": {
+            "hadoop.security.credential.provider.path": "jceks://file/var/lib/ambari-agent/data/abc.jceks",
             "hive.enforce.sorting": "true",
             "javax.jdo.option.ConnectionPassword": "!`\"' 1",
             "javax.jdo.option.ConnectionDriverName": "com.mysql.jdbc.Driver",


[23/50] [abbrv] ambari git commit: AMBARI-20253. HiveView2.0: Auto refresh not working.(dipayanb)

Posted by ol...@apache.org.
AMBARI-20253. HiveView2.0: Auto refresh not working.(dipayanb)


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

Branch: refs/heads/branch-dev-logsearch
Commit: dff7754b7cb718de7e3bcfaac7afa0a4ce936afe
Parents: a92b7c8
Author: Dipayan Bhowmick <di...@gmail.com>
Authored: Wed Mar 8 01:02:16 2017 +0530
Committer: Dipayan Bhowmick <di...@gmail.com>
Committed: Wed Mar 8 01:02:16 2017 +0530

----------------------------------------------------------------------
 .../main/resources/ui/app/routes/databases.js   |  23 +++
 .../ui/app/routes/databases/database/tables.js  |  57 ++++++-
 .../app/routes/databases/database/tables/new.js |  18 ++-
 .../resources/ui/app/services/auto-refresh.js   | 148 +++++++++++++++++++
 .../app/templates/databases/database/tables.hbs |   1 +
 .../main/resources/ui/app/transforms/date.js    |  50 +++++++
 .../src/main/resources/ui/config/environment.js |   6 +-
 7 files changed, 289 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/contrib/views/hive20/src/main/resources/ui/app/routes/databases.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/databases.js b/contrib/views/hive20/src/main/resources/ui/app/routes/databases.js
index e5efbe9..02dbcac 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/databases.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/databases.js
@@ -18,9 +18,32 @@
 
 import Ember from 'ember';
 import UILoggerMixin from '../mixins/ui-logger';
+import ENV from 'ui/config/environment';
 
 export default Ember.Route.extend(UILoggerMixin, {
   tableOperations: Ember.inject.service(),
+  autoRefresh: Ember.inject.service(),
+
+  activate() {
+    if(ENV.APP.SHOULD_AUTO_REFRESH_DATABASES) {
+      this.get('autoRefresh').startDatabasesAutoRefresh(() => {
+        console.log("Databases AutoRefresh started");
+      }, this._databasesRefreshed.bind(this));
+    }
+
+  },
+
+  deactivate() {
+    this.get('autoRefresh').stopDatabasesAutoRefresh();
+  },
+
+  _databasesRefreshed() {
+    let model = this.store.peekAll('database');
+    if(this.controller) {
+      console.log(model.get('length'));
+      this.setupController(this.controller, model);
+    }
+  },
 
   model() {
     return this.store.findAll('database', {reload: true});

http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables.js b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables.js
index d4a39cb..f5940e3 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables.js
@@ -17,8 +17,46 @@
  */
 
 import Ember from 'ember';
+import ENV from 'ui/config/environment';
+import UILoggerMixin from '../../../mixins/ui-logger';
+
+export default Ember.Route.extend(UILoggerMixin, {
+  autoRefresh: Ember.inject.service(),
+
+  activate() {
+    if(ENV.APP.SHOULD_AUTO_REFRESH_TABLES) {
+      let selectedDatabase = this.modelFor('databases.database');
+      this.get('autoRefresh').startTablesAutoRefresh(selectedDatabase.get('name'),
+        this.tableRefreshStarting.bind(this), this.tableRefreshed.bind(this));
+    }
+  },
+
+  deactivate() {
+    this.get('autoRefresh').stopTablesAutoRefresh(this.controller.get('database.name'));
+  },
+
+  tableRefreshStarting(databaseName) {
+    this.controller.set('tableRefreshing', true);
+  },
+
+  tableRefreshed(databaseName, deletedTablesCount) {
+    this.controller.set('tableRefreshing', false);
+    let currentTablesForDatabase = this.store.peekAll('table').filterBy('database.name', databaseName);
+    let paramsForTable = this.paramsFor('databases.database.tables.table');
+    let currentTableNamesForDatabase = currentTablesForDatabase.mapBy('name');
+    if (currentTableNamesForDatabase.length <= 0  || !currentTableNamesForDatabase.contains(paramsForTable.name)) {
+      if(deletedTablesCount !== 0) {
+        this.get('logger').info(`Current selected table '${paramsForTable.name}' has been deleted from Hive Server. Transitioning out.`);
+        this.transitionTo('databases.database', databaseName);
+        return;
+      }
+    }
+    if(currentTablesForDatabase.get('length') > 0) {
+      this.selectTable(currentTablesForDatabase);
+      this.controller.set('model', currentTablesForDatabase);
+    }
+  },
 
-export default Ember.Route.extend({
   model() {
     let selectedDatabase = this.modelFor('databases.database');
     return this.store.query('table', {databaseId: selectedDatabase.get('name')});
@@ -44,6 +82,13 @@ export default Ember.Route.extend({
       toSelect.set('selected', true);
     }
   },
+
+  setupController(controller, model) {
+    this._super(...arguments);
+    let selectedDatabase = this.modelFor('databases.database');
+    controller.set('database', selectedDatabase);
+  },
+
   actions: {
     tableSelected(table) {
       let tables = this.controllerFor('databases.database.tables').get('model');
@@ -52,11 +97,11 @@ export default Ember.Route.extend({
       });
       table.set('selected', true);
       this.transitionTo('databases.database.tables.table', table.get('name'));
+    },
+
+    refreshTable() {
+      let databaseName = this.controller.get('database.name');
+      this.get('autoRefresh').refreshTables(databaseName, this.tableRefreshStarting.bind(this), this.tableRefreshed.bind(this), true);
     }
   }
-
-
-
-
-
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
index 533dd61..b61008f 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
@@ -95,13 +95,17 @@ export default Ember.Route.extend(UILoggerMixin, {
   },
 
   _addTableToStoreLocally(database, table) {
-    this.store.createRecord('table', {
-      id: `${database.get('name')}/${table}`,
-      name: `${table}`,
-      type: 'TABLE',
-      selected: true,
-      database: database
-    });
+    // Add only if it has not been added by the auto refresh
+    let existingRecord = this.store.peekRecord('table', `${database.get('name')}/${table}`);
+    if(Ember.isEmpty(existingRecord)) {
+      this.store.createRecord('table', {
+        id: `${database.get('name')}/${table}`,
+        name: `${table}`,
+        type: 'TABLE',
+        selected: true,
+        database: database
+      });
+    }
   },
 
   _resetModelInTablesController(tables) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
new file mode 100644
index 0000000..2e8ec62
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
@@ -0,0 +1,148 @@
+/**
+ * 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({
+  store: Ember.inject.service(),
+  isDatabaseRefresherRunning: false,
+  tablesRefresherRunningStatus: {},
+
+
+  startDatabasesAutoRefresh(databaseRefreshStartingCallback, databaseRefreshedCallback, startAfter = 30 * 1000, interval = 30 * 1000) {
+    if (this.get('isDatabaseRefresherRunning')) {
+      return;
+    }
+
+    console.log("Starting database auto refresh");
+
+    this.set('isDatabaseRefresherRunning', true);
+    Ember.run.later(() => {
+      this._refreshDatabases(databaseRefreshStartingCallback, databaseRefreshedCallback, interval);
+    }, startAfter);
+
+
+  },
+
+  _refreshDatabases(databaseRefreshStartingCallback, databaseRefreshedCallback, interval) {
+    let reRun = () => {
+      Ember.run.later(() => {
+        this._refreshDatabases(databaseRefreshStartingCallback, databaseRefreshedCallback, interval);
+      }, interval);
+    };
+
+    if (this.get('isDatabaseRefresherRunning')) {
+      databaseRefreshStartingCallback();
+      let oldDatabases = this.get('store').peekAll('database').mapBy('name');
+      this.get('store').query('database', {}).then((data) => {
+        let deletedDbCount = 0
+        let newDatabases = data.mapBy('name');
+        oldDatabases.forEach((oldDB) => {
+          if (!newDatabases.contains(oldDB)) {
+            deletedDbCount++;
+            let oldRecord = this.get('store').peekRecord('database', oldDB);
+            this.get('store').unloadRecord(oldRecord);
+          }
+        });
+
+        // Hack: Had to wrap the refreshed call inside run later because, unloadRecord is not synchronously unloading
+        // records from store.
+        Ember.run.later(() => databaseRefreshedCallback(deletedDbCount));
+        reRun();
+      }).catch((err) => {
+        reRun();
+      });
+    }
+  },
+
+  stopDatabasesAutoRefresh() {
+    console.log("Stopping database auto refresh");
+    this.set('isDatabaseRefresherRunning', false);
+  },
+
+  startTablesAutoRefresh(databaseName, tablesRefreshStartingCallback, tablesRefreshedCallback, startAfter = 15 * 1000, interval = 15 * 1000) {
+    if(!Ember.isEmpty(this.get('tablesRefresherRunningStatus')[databaseName])) {
+      if (this.get('tablesRefresherRunningStatus')[databaseName]["started"]) {
+        return;
+      }
+    }
+
+
+    console.log("Starting tables auto refresh for " + databaseName);
+
+    this.get('tablesRefresherRunningStatus')[databaseName] = {};
+    this.get('tablesRefresherRunningStatus')[databaseName]["started"] = true;
+    Ember.run.later(() => {
+      this.refreshTables(databaseName, tablesRefreshStartingCallback, tablesRefreshedCallback, false, interval);
+    }, startAfter);
+  },
+
+  refreshTables(databaseName, tablesRefreshStartingCallback, tablesRefreshedCallback, runOnce = false, interval) {
+    let reRun = () => {
+      let intervalRef = Ember.run.later(() => {
+        this.refreshTables(databaseName, tablesRefreshStartingCallback, tablesRefreshedCallback, false, interval);
+      }, interval);
+      this.get('tablesRefresherRunningStatus')[databaseName]["intervalRef"] = intervalRef;
+    };
+
+    if (this.get('tablesRefresherRunningStatus')[databaseName]) {
+      tablesRefreshStartingCallback(databaseName);
+      let oldTableNames = this.get('store').peekAll('table').filterBy('database.name', databaseName).mapBy('name');
+      this.get('store').query('table', {databaseId: databaseName}).then((data) => {
+        let deletedTablesCount = 0;
+        let newTableNames = data.mapBy('name');
+        oldTableNames.forEach((oldTable) => {
+          if (!newTableNames.contains(oldTable)) {
+            deletedTablesCount++;
+            let oldRecord = this.get('store').peekRecord('table', `${databaseName}/${oldTable}`);
+            this.get('store').unloadRecord(oldRecord);
+          }
+        });
+
+        newTableNames.forEach((newTable) => {
+          if(!oldTableNames.contains(newTable)) {
+            //table has been added
+            let tableRecord = this.get('store').peekRecord('table', `${databaseName}/${newTable}`);
+            let dbRecord = this.get('store').peekRecord('database', databaseName);
+            dbRecord.get('tables').pushObject(tableRecord);
+          }
+        });
+
+        // Hack: Had to wrap the refreshed call inside run later because, unloadRecord is not synchronously unloading
+        // records from store.
+        Ember.run.later(() => tablesRefreshedCallback(databaseName, deletedTablesCount));
+        if(!runOnce) {
+          reRun();
+        }
+      }).catch((err) => {
+        if(!runOnce) {
+          reRun();
+        }
+      });
+    }
+  },
+
+  stopTablesAutoRefresh(databaseName) {
+    console.log("Stopping tables auto refresh for " + databaseName);
+    this.get('tablesRefresherRunningStatus')[databaseName]["started"] = false;
+    let intervalRef = this.get('tablesRefresherRunningStatus')[databaseName]["intervalRef"];
+    if (intervalRef) {
+      Ember.run.cancel(intervalRef);
+    }
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/contrib/views/hive20/src/main/resources/ui/app/templates/databases/database/tables.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/databases/database/tables.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/databases/database/tables.hbs
index c2d845b..954725b 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/databases/database/tables.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/databases/database/tables.hbs
@@ -20,6 +20,7 @@
   <div class="col-md-3">
     <div class="row">
       <div class="hv-dropdown tables-dropdown">
+        <a href="#" {{action "refreshTable"}} class="btn btn-default">{{fa-icon "refresh" spin=tableRefreshing}}</a>
         {{#link-to "databases.database.tables.new" class="btn btn-success"}}{{fa-icon "plus"}}{{/link-to}}
       </div>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/contrib/views/hive20/src/main/resources/ui/app/transforms/date.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/transforms/date.js b/contrib/views/hive20/src/main/resources/ui/app/transforms/date.js
new file mode 100644
index 0000000..40804d5
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/transforms/date.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 DS from 'ember-data';
+
+export default DS.Transform.extend({
+
+  deserialize: function (serialized) {
+    var type = typeof serialized;
+
+    if (type === "string") {
+      return new Date(Ember.Date.parse(serialized));
+    } else if (type === "number") {
+      return new Date(serialized);
+    } else if (serialized === null || serialized === undefined) {
+      // if the value is not present in the data,
+      // return undefined, not null.
+      return serialized;
+    } else {
+      return null;
+    }
+  },
+
+  serialize: function (date) {
+    console.log("Coming here to serialize");
+    if (date instanceof Date) {
+      // Serialize it as a number to maintain millisecond precision
+      return Number(date);
+    } else {
+      return null;
+    }
+  }
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/dff7754b/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 411ee99..c5370d7 100644
--- a/contrib/views/hive20/src/main/resources/ui/config/environment.js
+++ b/contrib/views/hive20/src/main/resources/ui/config/environment.js
@@ -34,7 +34,9 @@ module.exports = function(environment) {
     APP: {
       // Here you can pass flags/options to your application instance
       // when it is created
-      SHOULD_PERFORM_SERVICE_CHECK: true
+      SHOULD_PERFORM_SERVICE_CHECK: true,
+      SHOULD_AUTO_REFRESH_TABLES: true,
+      SHOULD_AUTO_REFRESH_DATABASES: true
     }
   };
 
@@ -49,6 +51,8 @@ module.exports = function(environment) {
     // Change the value to false to prevent the service checks. This is required in development mode
     // as service checks take up time and hence increase the overall development time.
     ENV.APP.SHOULD_PERFORM_SERVICE_CHECK = false;
+    ENV.APP.SHOULD_AUTO_REFRESH_TABLES = false;
+    ENV.APP.SHOULD_AUTO_REFRESH_DATABASES = false;
   }
 
   if (environment === 'test') {


[38/50] [abbrv] ambari git commit: AMBARI-20361 - Stack Upgrade tests fail during Hive Metastore restart due to missing hive-site.jceks file (jonathanhurley)

Posted by ol...@apache.org.
AMBARI-20361 - Stack Upgrade tests fail during Hive Metastore restart due to missing hive-site.jceks file (jonathanhurley)


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

Branch: refs/heads/branch-dev-logsearch
Commit: c5d2d5b03073215667a3a70989600c5a99bf1e9a
Parents: 6631ad5
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Mar 8 11:00:44 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Mar 8 13:32:48 2017 -0500

----------------------------------------------------------------------
 .../src/main/python/resource_management/core/source.py          | 5 +++--
 ambari-server/src/test/python/stacks/utils/RMFTestCase.py       | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c5d2d5b0/ambari-common/src/main/python/resource_management/core/source.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/source.py b/ambari-common/src/main/python/resource_management/core/source.py
index cee6f57..e31f7d6 100644
--- a/ambari-common/src/main/python/resource_management/core/source.py
+++ b/ambari-common/src/main/python/resource_management/core/source.py
@@ -72,16 +72,17 @@ class StaticFile(Source):
       basedir = self.env.config.basedir
       path = os.path.join(basedir, "files", self.name)
       
-    if not os.path.isfile(path) and not os.path.islink(path):
+    if not sudo.path_isfile(path) and not sudo.path_lexists(path):
       raise Fail("{0} Source file {1} is not found".format(repr(self), path))
 
     return self.read_file(path)
 
+
   @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
   def read_file(self, path):
-    from resource_management.core import sudo
     return sudo.read_file(path)
 
+
   @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
   def read_file(self, path):
     with open(path, "rb") as fp:

http://git-wip-us.apache.org/repos/asf/ambari/blob/c5d2d5b0/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
index 9240d38..7dd3990 100644
--- a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
+++ b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
@@ -325,6 +325,7 @@ def StaticFile(name, **kwargs):
   with RMFTestCase.env:
     from resource_management.core.source import StaticFile
     from resource_management.core import sudo
+    sudo.path_isfile = lambda path: True
     sudo.read_file = lambda path: 'dummy_output'
     return StaticFile(name, **kwargs)
   


[20/50] [abbrv] ambari git commit: AMBARI-20339. JS Lint warning removal (pallavkul)

Posted by ol...@apache.org.
AMBARI-20339. JS Lint warning removal (pallavkul)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 3bc3d6861a634c775a87881ab4eda67d06b676bc
Parents: 225edb9
Author: pallavkul <pa...@gmail.com>
Authored: Tue Mar 7 20:36:25 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Tue Mar 7 20:37:49 2017 +0530

----------------------------------------------------------------------
 .../hive20/src/main/resources/ui/.jshintrc      |  2 +
 .../resources/ui/app/adapters/file-resource.js  |  1 -
 .../resources/ui/app/adapters/hdfs-viewer.js    |  1 +
 .../src/main/resources/ui/app/adapters/job.js   |  5 +-
 .../src/main/resources/ui/app/adapters/query.js |  5 +-
 .../resources/ui/app/adapters/saved-query.js    |  1 -
 .../resources/ui/app/adapters/table-info.js     |  2 +-
 .../src/main/resources/ui/app/adapters/table.js |  2 +-
 .../src/main/resources/ui/app/adapters/udf.js   |  8 ---
 .../resources/ui/app/adapters/upload-table.js   |  4 +-
 .../resources/ui/app/components/create-table.js |  2 +-
 .../resources/ui/app/components/edit-table.js   |  6 +-
 .../ui/app/components/export-result.js          |  2 +-
 .../ui/app/components/fileresource-item.js      |  5 +-
 .../resources/ui/app/components/job-item.js     |  1 +
 .../resources/ui/app/components/list-filter.js  |  2 +-
 .../ui/app/components/notification-message.js   |  4 +-
 .../resources/ui/app/components/query-editor.js |  2 +-
 .../ui/app/components/query-result-table.js     |  9 ++-
 .../app/components/table-advanced-settings.js   |  4 +-
 .../resources/ui/app/components/udf-item.js     |  7 +--
 .../main/resources/ui/app/components/udf-new.js |  2 +-
 .../ui/app/components/validated-text-field.js   |  2 +-
 .../ui/app/components/visual-explain.js         |  2 +-
 .../main/resources/ui/app/configs/datatypes.js  |  2 +-
 .../ui/app/controllers/service-check.js         |  8 +--
 .../resources/ui/app/helpers/extract-value.js   |  2 +-
 .../ui/app/helpers/format-column-size.js        |  2 +-
 .../resources/ui/app/models/table-property.js   |  2 +-
 .../hive20/src/main/resources/ui/app/router.js  |  2 +-
 .../app/routes/databases/database/tables/new.js |  2 +-
 .../databases/database/tables/table/edit.js     |  1 +
 .../databases/database/tables/upload-table.js   | 58 +++++++++++++-------
 .../src/main/resources/ui/app/routes/jobs.js    |  6 +-
 .../resources/ui/app/routes/queries/query.js    | 17 +++---
 .../ui/app/routes/queries/query/log.js          |  4 +-
 .../resources/ui/app/routes/savedqueries.js     |  4 +-
 .../main/resources/ui/app/routes/settings.js    |  6 +-
 .../src/main/resources/ui/app/routes/udfs.js    |  2 +-
 .../src/main/resources/ui/app/services/jobs.js  |  6 +-
 .../src/main/resources/ui/app/services/query.js | 12 ++--
 .../resources/ui/app/services/saved-queries.js  | 14 ++---
 .../resources/ui/app/services/service-check.js  |  2 +-
 .../resources/ui/app/services/stats-service.js  |  6 +-
 .../ui/app/services/table-operations.js         | 22 ++++----
 .../src/main/resources/ui/app/services/udf.js   | 25 +++------
 .../components/table-advanced-settings.hbs      |  8 ---
 .../ui/app/utils/hive-explainer/enhancer.js     |  2 +-
 .../app/utils/hive-explainer/renderer-force.js  | 21 +++----
 .../ui/app/utils/hive-explainer/renderer.js     | 34 +++++++-----
 .../ui/app/utils/hive-explainer/transformer.js  | 10 ++--
 51 files changed, 176 insertions(+), 185 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/.jshintrc
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/.jshintrc b/contrib/views/hive20/src/main/resources/ui/.jshintrc
index d421faa..8cedd57 100644
--- a/contrib/views/hive20/src/main/resources/ui/.jshintrc
+++ b/contrib/views/hive20/src/main/resources/ui/.jshintrc
@@ -2,6 +2,8 @@
   "predef": [
     "document",
     "window",
+    "d3",
+    "CodeMirror",
     "-Promise"
   ],
   "browser": true,

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/file-resource.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/file-resource.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/file-resource.js
index a25adc7..7f6ab80 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/file-resource.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/file-resource.js
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import Ember from 'ember';
 import ApplicationAdapter from './application';
 
 export default ApplicationAdapter.extend({

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/hdfs-viewer.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/hdfs-viewer.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/hdfs-viewer.js
index dcd52b8..2e727d1 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/hdfs-viewer.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/hdfs-viewer.js
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import Ember from 'ember';
 import ApplicationAdapter from './application';
 
 export default ApplicationAdapter.extend({

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/job.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/job.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/job.js
index 7559e9c..e40c0ba 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/job.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/job.js
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import Ember from 'ember';
 import ApplicationAdapter from './application';
 
 export default ApplicationAdapter.extend({
@@ -45,7 +46,7 @@ export default ApplicationAdapter.extend({
       }, (error) => {
         reject(error);
       });
-    })
+    });
 
   },
 
@@ -58,7 +59,7 @@ export default ApplicationAdapter.extend({
         if (response.status.toLowerCase() !== "TERMINATED".toLowerCase()) {
           Ember.run.later( () => {
             this.pollSaveToHDFS(response)
-              .then((data) => { resolve(data)}, (error) => {
+              .then((data) => { resolve(data); }, (error) => {
                 reject(error);
               });
           }, 2000);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/query.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/query.js
index 4913fe2..6640f82 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/query.js
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import Ember from 'ember';
 import ApplicationAdapter from './application';
 
 export default ApplicationAdapter.extend({
@@ -38,7 +37,7 @@ export default ApplicationAdapter.extend({
       url = this.buildURL() + jobId + '/results';
     }
 
-    return this.ajax(url, 'GET')
+    return this.ajax(url, 'GET');
   },
 
   getVisualExplainJson(jobId){
@@ -49,7 +48,7 @@ export default ApplicationAdapter.extend({
   retrieveQueryLog(logFile){
     let url = '';
     url = this.buildURL().replace('/jobs','') + 'files' + logFile;
-    return this.ajax(url, 'GET')
+    return this.ajax(url, 'GET');
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/saved-query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/saved-query.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/saved-query.js
index a25adc7..7f6ab80 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/saved-query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/saved-query.js
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import Ember from 'ember';
 import ApplicationAdapter from './application';
 
 export default ApplicationAdapter.extend({

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/table-info.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/table-info.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/table-info.js
index 46e7591..66bab88 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/table-info.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/table-info.js
@@ -23,7 +23,7 @@ export default DDLAdapter.extend({
 
   buildURL(modelName, id, snapshot, requestType, query) {
     // Check if the query is to find all tables for a particular database
-    if(Ember.isEmpty(id) && (requestType === 'query' || requestType == 'queryRecord')) {
+    if(Ember.isEmpty(id) && (requestType === 'query' || requestType === 'queryRecord')) {
       let dbId = query.databaseId;
       let tableName = query.tableName;
       let origFindAllUrl = this._super(...arguments);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/table.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/table.js
index e133419..85e34b4 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/table.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/table.js
@@ -22,7 +22,7 @@ import DDLAdapter from './ddl';
 export default DDLAdapter.extend({
   buildURL(modelName, id, snapshot, requestType, query) {
     // Check if the query is to find all tables for a particular database
-    if (Ember.isEmpty(id) && (requestType === 'query' || requestType == 'queryRecord')) {
+    if (Ember.isEmpty(id) && (requestType === 'query' || requestType === 'queryRecord')) {
       let dbId = query.databaseId;
       let tableName = query.tableName;
       let origFindAllUrl = this._super(...arguments);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/udf.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/udf.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/udf.js
index c929de7..af8f46f 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/udf.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/udf.js
@@ -26,14 +26,6 @@ export default ApplicationAdapter.extend({
 
   buildURL(){
     return this._super(...arguments).replace('/resources','');
-  },
-
-  fileResourceURL(){
-    this.buildURL()+ '/fileResources';
-  },
-
-  udfURL(){
-    this.buildURL()+ '/udfs';
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/adapters/upload-table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/adapters/upload-table.js b/contrib/views/hive20/src/main/resources/ui/app/adapters/upload-table.js
index 3bfe15b..eea9f59 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/adapters/upload-table.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/adapters/upload-table.js
@@ -83,11 +83,11 @@ export default ApplicationAdapter.extend({
 
   previewFromHDFS : function(previewFromHdfsData){
     console.log("preview from hdfs with info : ", previewFromHdfsData);
-    return this.doPost("previewFromHdfs",previewFromHdfsData)
+    return this.doPost("previewFromHdfs",previewFromHdfsData);
   },
 
   uploadFromHDFS : function(uploadFromHdfsData){
     console.log("upload from hdfs with info : ", uploadFromHdfsData);
-    return this.doPost("uploadFromHDFS",uploadFromHdfsData)
+    return this.doPost("uploadFromHDFS",uploadFromHdfsData);
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/create-table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/create-table.js b/contrib/views/hive20/src/main/resources/ui/app/components/create-table.js
index 670ebd7..322aab5 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/create-table.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/create-table.js
@@ -35,7 +35,7 @@ export default Ember.Component.extend({
 
   didReceiveAttrs() {
     this.get('tabs').setEach('active', false);
-    let firstTab = this.get('tabs.firstObject')
+    let firstTab = this.get('tabs.firstObject');
     firstTab.set('active', true);
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/edit-table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/edit-table.js b/contrib/views/hive20/src/main/resources/ui/app/components/edit-table.js
index 439dbcf..b42f6fb 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/edit-table.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/edit-table.js
@@ -63,7 +63,7 @@ export default Ember.Component.extend({
   _transformColumns() {
     let columns = [];
     columns.pushObjects(this.get('table.columns').map((item) => {
-      return this._getColumnEntry(item, false, this._isClustered(this.get('table'), item.name))
+      return this._getColumnEntry(item, false, this._isClustered(this.get('table'), item.name));
     }));
 
     if (!Ember.isEmpty(this.get('table.partitionInfo'))) {
@@ -113,7 +113,7 @@ export default Ember.Component.extend({
             editing: false,
             newProperty: false
           });
-        })
+        });
     } else {
       return [];
     }
@@ -135,7 +135,7 @@ export default Ember.Component.extend({
 
     // Find if already clustered, then set number of buckets
     if (!Ember.isEmpty(tableInfo.get('storageInfo.bucketCols'))) {
-      settings.numBuckets = parseInt(tableInfo.get('storageInfo.numBuckets'))
+      settings.numBuckets = parseInt(tableInfo.get('storageInfo.numBuckets'));
       this.set('shouldAddBuckets', true);
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/export-result.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/export-result.js b/contrib/views/hive20/src/main/resources/ui/app/components/export-result.js
index 517da1e..f84e2b5 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/export-result.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/export-result.js
@@ -43,7 +43,7 @@ export default Ember.Component.extend({
 
   actions: {
     confirm() {
-      let pathName = $("input.path-name").val();
+      let pathName = Ember.$("input.path-name").val();
       this.sendAction('confirm', this.get('jobId'), pathName);
     },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/fileresource-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/fileresource-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/fileresource-item.js
index 12cfb5b..27f5e07 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/fileresource-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/fileresource-item.js
@@ -34,13 +34,12 @@ export default Ember.Component.extend({
 
       this.set('fileResourceId', fileResourceId);
 
-      var self = this;
       if(this.get('expanded')) {
         this.set('expanded', false);
       } else {
         this.set('expanded', true);
 
-        let allUdfs = this.get('store').findAll('udf').then((data) => {
+        this.get('store').findAll('udf').then((data) => {
           let selectedUdfList = [];
           data.forEach(x => {
             let localFileResource = {
@@ -59,8 +58,6 @@ export default Ember.Component.extend({
         });
       }
 
-
-
     },
 
     createQuery(udfName, udfClassname, fileResourceName, fileResourcePath){

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
index 8a6d318..42a3411 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
@@ -34,6 +34,7 @@ export default Ember.Component.extend({
           this.set('queryFile', queryFile);
           this.set('valueLoading', false);
         }).catch((err) => {
+          console.log('err', err);
           this.set('valueLoading', false);
         });
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/list-filter.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/list-filter.js b/contrib/views/hive20/src/main/resources/ui/app/components/list-filter.js
index db0b5c0..dd51e78 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/list-filter.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/list-filter.js
@@ -31,7 +31,7 @@ export default Ember.Component.extend({
   filteredItems: Ember.computed('filterText', 'items.@each', function() {
     return this.get('items').filter((item) => {
       let filterText = this.get('caseInsensitive') ? this.get('filterText').toLowerCase() : this.get('filterText');
-      let itemName = this.get('caseInsensitive') ? item.get('name').toLowerCase() : item.get('name')
+      let itemName = this.get('caseInsensitive') ? item.get('name').toLowerCase() : item.get('name');
       return itemName.indexOf(filterText) !== -1;
     });
   }),

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/notification-message.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/notification-message.js b/contrib/views/hive20/src/main/resources/ui/app/components/notification-message.js
index 339e095..ea5b5ef 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/notification-message.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/notification-message.js
@@ -24,7 +24,7 @@ export default Ember.Component.extend({
   }),
 
   displayBody: Ember.computed('notification', function() {
-    return !(Ember.isBlank(this.get('notification.responseMessage'))
-    && Ember.isBlank(this.get('notification.trace')));
+    return !(Ember.isBlank(this.get('notification.responseMessage')) &&
+      Ember.isBlank(this.get('notification.trace')));
   })
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/query-editor.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/query-editor.js b/contrib/views/hive20/src/main/resources/ui/app/components/query-editor.js
index c033e42..b582351 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/query-editor.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/query-editor.js
@@ -94,7 +94,7 @@ export default Ember.Component.extend({
 
     if (editor.getValue() !== query) {
       if(isFinalExplainQuery){
-        editor.setValue(editorQuery || '')
+        editor.setValue(editorQuery || '');
       }else {
         editor.setValue(query || '');
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/query-result-table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/query-result-table.js b/contrib/views/hive20/src/main/resources/ui/app/components/query-result-table.js
index a2eb349..be5c43a 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/query-result-table.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/query-result-table.js
@@ -31,12 +31,11 @@ export default Ember.Component.extend({
 
   columnFilterDebounced: Ember.observer('columnFilterText', function() {
     Ember.run.debounce(this, () => {
-      this.set('columnFilter', this.get('columnFilterText'))
+      this.set('columnFilter', this.get('columnFilterText'));
     }, 500);
   }),
 
   columns: Ember.computed('queryResult', function() {
-    let queryResult = this.get('queryResult');
     let columnArr =[];
 
     this.get('queryResult').schema.forEach(function(column){
@@ -56,11 +55,11 @@ export default Ember.Component.extend({
     let rowArr = [], self = this;
 
     if(self.get('columns').length > 0) {
-      self.get('queryResult').rows.forEach(function(row, rowindex){
+      self.get('queryResult').rows.forEach(function(row){
         var mylocalObject = {};
         self.get('columns').forEach(function(column, index){
           mylocalObject[self.get('columns')[index].valuePath] = row[index];
-        })
+        });
         rowArr.push(mylocalObject);
       });
       return rowArr;
@@ -90,7 +89,7 @@ export default Ember.Component.extend({
     },
 
     onColumnClick(column) {
-      //console.log('I am in onColumnClick');
+      console.log('column',column);
     },
     goNextPage(payloadTitle){
       this.sendAction('goNextPage', payloadTitle);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/table-advanced-settings.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/table-advanced-settings.js b/contrib/views/hive20/src/main/resources/ui/app/components/table-advanced-settings.js
index 5e58cd8..a7b8e3b 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/table-advanced-settings.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/table-advanced-settings.js
@@ -125,11 +125,11 @@ export default Ember.Component.extend({
     },
 
     toggleFileFormat() {
-      this.toggleProperty('showFileFormatInput')
+      this.toggleProperty('showFileFormatInput');
     },
 
     toggleRowFormat() {
-      this.toggleProperty('showRowFormatInput')
+      this.toggleProperty('showRowFormatInput');
     },
 
     fileFormatSelected(format) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
index 9e11550..44f56e5 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
@@ -37,7 +37,6 @@ export default Ember.Component.extend({
   actions: {
     toggleExpandUdf(fileResourceId) {
 
-      var self = this;
       if(this.get('expanded')) {
         this.set('expanded', false);
       } else {
@@ -120,11 +119,11 @@ export default Ember.Component.extend({
     removeUdf(){
       let self = this;
       this.get('store').find('udf', this.get('udfId')).then(function(resultUdf) {
-        resultUdf.destroyRecord().then(function(data) {
+        resultUdf.destroyRecord().then(function() {
           self.send('cancelUdf');
           self.sendAction('refreshUdfList');
         }, function(response) {
-          console.log('UDF NOT deleted');
+          console.log('UDF NOT deleted', response);
         });
         return false;
       });
@@ -135,7 +134,7 @@ export default Ember.Component.extend({
     },
 
     handleResourceChange(filter){
-      if(filter.action == "addNewFileResource"){
+      if(filter.action === "addNewFileResource"){
         this.get('controller').set('isAddingNewFileResource', true);
         this.set('selectedFileResource',null);
       }else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/udf-new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/udf-new.js b/contrib/views/hive20/src/main/resources/ui/app/components/udf-new.js
index 285ef07..26658ad 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/udf-new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/udf-new.js
@@ -25,7 +25,7 @@ export default Ember.Component.extend({
 
   actions:{
     handleFileResourceChange(filter){
-      this.sendAction('handleFileResourceChange', filter)
+      this.sendAction('handleFileResourceChange', filter);
     },
 
     cancelSaveUDf(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/validated-text-field.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/validated-text-field.js b/contrib/views/hive20/src/main/resources/ui/app/components/validated-text-field.js
index 2379a15..0cbe0f6 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/validated-text-field.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/validated-text-field.js
@@ -45,7 +45,7 @@ export default Ember.Component.extend({
     var regExp = new RegExp(regStr, "g");
     if (this.get("inputValue")) {
       var arr = this.get("inputValue").match(regExp);
-      if (arr != null && arr.length == 1) {
+      if (arr != null && arr.length === 1) {
         this.setValid();
       }
       else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/components/visual-explain.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/visual-explain.js b/contrib/views/hive20/src/main/resources/ui/app/components/visual-explain.js
index 8f216d1..fd450cc 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/visual-explain.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/visual-explain.js
@@ -47,7 +47,7 @@ export default Ember.Component.extend({
 
   },
 
-  click(event){
+  click(){
     if(this.get('explainDetailData') === '' || this.get('draggable').get('zoom') ){
       return;
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/configs/datatypes.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/configs/datatypes.js b/contrib/views/hive20/src/main/resources/ui/app/configs/datatypes.js
index 0d07ce2..0ae9616 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/configs/datatypes.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/configs/datatypes.js
@@ -31,4 +31,4 @@ export default [
   {label: "DECIMAL", hasPrecision: true, hasScale: true},
   {label: "VARCHAR", hasPrecision: true, hasScale: false},
   {label: "CHAR", hasPrecision: true, hasScale: false},
-]
+];

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/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
index 8a621db..10552ea 100644
--- 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
@@ -31,10 +31,10 @@ export default Ember.Controller.extend({
   }),
 
   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')));
+    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() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/helpers/extract-value.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/helpers/extract-value.js b/contrib/views/hive20/src/main/resources/ui/app/helpers/extract-value.js
index 76b3dee..1fa4cb9 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/helpers/extract-value.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/helpers/extract-value.js
@@ -18,7 +18,7 @@
 
 import Ember from 'ember';
 
-export function extractValue(params,/*, hash*/) {
+export function extractValue(params /*, hash*/) {
   let map = params[0];
   let key = params[1];
   return map[key];

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/helpers/format-column-size.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/helpers/format-column-size.js b/contrib/views/hive20/src/main/resources/ui/app/helpers/format-column-size.js
index a24f797..511a917 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/helpers/format-column-size.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/helpers/format-column-size.js
@@ -26,7 +26,7 @@ export function formatColumnSize(params/*, hash*/) {
   }
   let sizeString = '( ';
   if (precision) {
-    sizeString = `${sizeString}${precision}`
+    sizeString = `${sizeString}${precision}`;
   }
   if (scale) {
     sizeString = `${sizeString}, ${scale}`;

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/models/table-property.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/models/table-property.js b/contrib/views/hive20/src/main/resources/ui/app/models/table-property.js
index 751f55c..f79023a 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/models/table-property.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/models/table-property.js
@@ -51,4 +51,4 @@ export default Ember.Object.extend({
 
     return this.get('errors.length') === 0;
   }
-})
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/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 250f945..d5d876d 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/router.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/router.js
@@ -55,7 +55,7 @@ Router.map(function() {
           this.route('ddl');
           this.route('stats');
           this.route('auth');
-        })
+        });
       });
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
index b29d863..533dd61 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/new.js
@@ -81,7 +81,7 @@ export default Ember.Route.extend(UILoggerMixin, {
     },
     toggleCSVFormat: function() {
       console.log("inside new route toggleCSVFormat");
-      this.toggleProperty('showCSVFormatInput')
+      this.toggleProperty('showCSVFormatInput');
     },
 
     create(settings) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/table/edit.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/table/edit.js b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/table/edit.js
index 2fa61b4..085c326 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/table/edit.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/table/edit.js
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import Ember from 'ember';
 import TableMetaRouter from './table-meta-router';
 import tabs from '../../../../../configs/edit-table-tabs';
 import UILoggerMixin from '../../../../../mixins/ui-logger';

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/upload-table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/upload-table.js b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/upload-table.js
index e4c543b..e6b71fe 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/upload-table.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/databases/database/tables/upload-table.js
@@ -51,8 +51,9 @@ export default NewTable.extend(UILoggerMixin, {
   showCSVFormatInput: false,
   uploadProgressInfo : Ember.computed("uploadProgressInfos.[]",function(){
     var info = "";
-    for( var i = 0 ; i < this.get('uploadProgressInfos').length ; i++)
+    for( var i = 0 ; i < this.get('uploadProgressInfos').length ; i++) {
       info += this.get('uploadProgressInfos').objectAt(i);
+    }
 
     return new Ember.Handlebars.SafeString(info);
   }),
@@ -87,8 +88,9 @@ export default NewTable.extend(UILoggerMixin, {
     var text = "";
     var possible = "abcdefghijklmnopqrstuvwxyz";
 
-    for (var i = 0; i < 30; i++)
+    for (var i = 0; i < 30; i++) {
       text += possible.charAt(Math.floor(Math.random() * possible.length));
+    }
 
     return text;
   },
@@ -100,10 +102,10 @@ export default NewTable.extend(UILoggerMixin, {
     fetchJobPromise.then(function (data) {
       var job = JSON.parse(JSON.stringify(data));
       var status = job.status;
-      if (status == constants.statuses.succeeded ) {
+      if (status === constants.statuses.succeeded ) {
         console.log("resolving waitForJobStatus with : " , status);
         resolve(job);
-      } else if (status == constants.statuses.canceled || status == constants.statuses.closed || status == constants.statuses.error) {
+      } else if (status === constants.statuses.canceled || status === constants.statuses.closed || status === constants.statuses.error) {
         console.log("rejecting waitForJobStatus with : " + status);
         reject(new Error(job.statusMessage));
       } else {
@@ -115,7 +117,7 @@ export default NewTable.extend(UILoggerMixin, {
     }, function (error) {
       console.log("rejecting waitForJobStatus with : " + error);
       reject(error);
-    })
+    });
   },
 
   uploadForPreview: function (sourceObject) {
@@ -184,7 +186,7 @@ export default NewTable.extend(UILoggerMixin, {
   waitForGeneratingPreview: function () {
     console.log("waitForGeneratingPreview");
     this.showUploadModal();
-    this.pushUploadProgressInfos(this.formatMessage('hive.messages.generatingPreview'))
+    this.pushUploadProgressInfos(this.formatMessage('hive.messages.generatingPreview'));
   },
 
   previewTable: function (data) {
@@ -211,7 +213,7 @@ export default NewTable.extend(UILoggerMixin, {
       name: column.name,
       type: datatypes.findBy("label", column.type),
       editing: true
-    })
+    });
   },
   onGeneratePreviewSuccess: function (data) {
     console.log("onGeneratePreviewSuccess");
@@ -396,7 +398,7 @@ export default NewTable.extend(UILoggerMixin, {
       return self.rollBackActualTableCreation();
     },function(err){
       return self.rollBackActualTableCreation();
-    })
+    });
   },
 
   onUploadingFileFailure: function (error) {
@@ -490,10 +492,14 @@ export default NewTable.extend(UILoggerMixin, {
     this.setError(this.formatMessage('hive.messages.manuallyDeleteTable',{databaseName:this.get('databaseName'), tableName: this.get("tempTableName")}));
   },
   validateHDFSPath: function (hdfsPath) {
-    if (null == hdfsPath || hdfsPath == "") throw new Error(this.translate('hive.errors.emptyHdfsPath'));
+    if (null === hdfsPath || hdfsPath === "") {
+      throw new Error(this.translate('hive.errors.emptyHdfsPath'));
+    }
     var hdfsRegex = new RegExp(this.get("HDFS_PATH_REGEX"), "g");
     var mArr = hdfsPath.match(hdfsRegex);
-    if (mArr == null || mArr.length != 1) throw new Error(this.translate('hive.errors.illegalHdfPath', {"hdfsPath": hdfsPath} ));
+    if (mArr === null || mArr.length !== 1) {
+      throw new Error(this.translate('hive.errors.illegalHdfPath', {"hdfsPath": hdfsPath} ));
+    }
   },
   createTableAndUploadFile: function (tableData) {
     let databaseModel = this.controllerFor('databases.database').get('model');
@@ -606,24 +612,36 @@ export default NewTable.extend(UILoggerMixin, {
   },
   validateInput: function (headers,tableName,databaseName,isFirstRowHeader) {
     // throw exception if invalid.
-    if(!headers || headers.length == 0) throw new Error(this.translate('hive.errors.emptyHeaders'));
+    if(!headers || headers.length === 0) {
+      throw new Error(this.translate('hive.errors.emptyHeaders'));
+    }
 
     var regex = new RegExp(this.get("COLUMN_NAME_REGEX"),"g");
 
     headers.forEach(function(column,index){
-      if( !column  ) throw new Error(this.translate('hive.errors.emptyColumnName'));
+      if( !column  ) {
+        throw new Error(this.translate('hive.errors.emptyColumnName'));
+      }
       var matchArr = column.name.match(regex);
-      if(matchArr == null || matchArr.length != 1 ) throw new Error(this.translate('hive.errors.illegalColumnName',{ columnName : column.name, index : (index + 1)}));
+      if(matchArr === null || matchArr.length !== 1 ) {
+        throw new Error(this.translate('hive.errors.illegalColumnName',{ columnName : column.name, index : (index + 1)}));
+      }
     },this);
 
-    if(!tableName) throw new Error(this.translate('hive.errors.emptyTableName', {tableNameField : this.translate('hive.ui.tableName')}));
+    if(!tableName) {
+      throw new Error(this.translate('hive.errors.emptyTableName', {tableNameField : this.translate('hive.ui.tableName')}));
+    }
     var tableRegex = new RegExp(this.get("TABLE_NAME_REGEX"),"g");
     var mArr = tableName.match(tableRegex);
-    if(mArr == null || mArr.length != 1 ) throw new Error(this.translate('hive.errors.illegalTableName', {tableNameField:this.translate('hive.ui.tableName'),tableName:tableName}) );
+    if(mArr === null || mArr.length !== 1 ) {
+      throw new Error(this.translate('hive.errors.illegalTableName', {tableNameField:this.translate('hive.ui.tableName'),tableName:tableName}) );
+    }
 
-    if(!databaseName) throw new Error(this.translate('hive.errors.emptyDatabase', {database:this.translate('hive.words.database')}));
+    if(!databaseName) {
+      throw new Error(this.translate('hive.errors.emptyDatabase', {database:this.translate('hive.words.database')}));
+    }
 
-    if (null == isFirstRowHeader || typeof isFirstRowHeader === 'undefined') { //this can be true or false. so explicitly checking for null/ undefined.
+    if (null === isFirstRowHeader || typeof isFirstRowHeader === 'undefined') { //this can be true or false. so explicitly checking for null/ undefined.
       throw new Error(this.translate('hive.errors.emptyIsFirstRow', {isFirstRowHeaderField:this.translate('hive.ui.isFirstRowHeader')}));
     }
   },
@@ -689,8 +707,8 @@ export default NewTable.extend(UILoggerMixin, {
   validateInputs: function(tableData){
     let tableMeta = tableData.get("tableMeta");
     let containsEndlines = tableData.get("fileFormatInfo.containsEndlines");
-    if(containsEndlines == true && tableMeta.settings && tableMeta.settings.fileFormat
-      && tableMeta.settings.fileFormat.type && tableMeta.settings.fileFormat.type === "TEXTFILE"){
+    if(containsEndlines === true && tableMeta.settings && tableMeta.settings.fileFormat &&
+      tableMeta.settings.fileFormat.type && tableMeta.settings.fileFormat.type === "TEXTFILE"){
       throw new Error(`Cannot support endlines in fields when the  File Format is TEXTFILE. Please uncheck '${this.translate('hive.ui.csvFormatParams.containsEndlines')}'`);
     }
   },
@@ -701,7 +719,7 @@ export default NewTable.extend(UILoggerMixin, {
       this.clearFields();
 
       this.set('previewObject', previewObject);
-      return this.generatePreview(previewObject)
+      return this.generatePreview(previewObject);
     },
     uploadTable: function (tableData) {
       console.log("tableData", tableData);

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/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 c27c74d..3e88ac6 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
@@ -44,7 +44,7 @@ export default Ember.Route.extend({
     return this.store.query('job', params);
   },
 
-  setupController(controller, model) {
+  setupController(controller) {
     if(!(Ember.isEmpty(this.get('startInitTo')) || Ember.isEmpty(this.get('endInitTo')))) {
 
       controller.set('endTime', this.get('endInitTo'));
@@ -60,8 +60,8 @@ export default Ember.Route.extend({
 
   actions: {
     dateFilterChanged(startTime, endTime) {
-      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.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();
     }
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index e1ab620..08af7d4 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -93,7 +93,7 @@ export default Ember.Route.extend(UILoggerMixin, {
         'dbname': selectedDb ,
         'tables': this.store.query('table', {databaseId: selectedDb}),
         'isSelected': true
-      })
+      });
       selectedMultiDb.pushObject(selectedDb);
     }
 
@@ -208,7 +208,7 @@ export default Ember.Route.extend(UILoggerMixin, {
             'tables':self.store.query('table', {databaseId: db}),
             'isSelected': (index === 0) ? true :false
           }
-        )
+        );
         selectedMultiDb.pushObject(db);
       });
 
@@ -224,7 +224,6 @@ export default Ember.Route.extend(UILoggerMixin, {
     },
 
     showTables(db){
-      let self = this;
       Ember.$('#' + db).toggle();
       this.get('controller.model').set('selectedDb', db);
     },
@@ -267,11 +266,13 @@ export default Ember.Route.extend(UILoggerMixin, {
       if (isVisualExplainQuery) {
         queryInput = "";
         let queries = this.get('controller').get('currentQuery').split(";").filter(function (query) {
-          if (query && query.trim()) return true;
+          if (query && query.trim()) {
+            return true;
+          }
         });
 
         for (let i = 0; i < queries.length; i++) {
-          if (i == queries.length - 1) {
+          if (i === queries.length - 1) {
             if(queries[i].toLowerCase().startsWith("explain formatted ")){
               queryInput += queries[i] + ";";
             } else{
@@ -398,7 +399,7 @@ export default Ember.Route.extend(UILoggerMixin, {
         } else {
           self.get('controller.model').set('visualExplainJson', null);
 
-          if( self.paramsFor('queries.query').worksheetId && (self.paramsFor('queries.query').worksheetId.toLowerCase() == payloadTitle)){
+          if( self.paramsFor('queries.query').worksheetId && (self.paramsFor('queries.query').worksheetId.toLowerCase() === payloadTitle)){
             self.transitionTo('queries.query.loading');
 
             Ember.run.later(() => {
@@ -572,7 +573,7 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     saveWorksheetModal(){
       console.log('I am in saveWorksheetModal');
-      let newTitle = $('#worksheet-title').val();
+      let newTitle = Ember.$('#worksheet-title').val();
 
       let currentQuery = this.get('controller.model').get('query');
       let selectedDb = this.get('controller.model').get('selectedDb');
@@ -652,7 +653,7 @@ export default Ember.Route.extend(UILoggerMixin, {
     },
 
     adjustPanelSize(){
-      let isFullHeight = ($(window).height() ==(parseInt(Ember.$('.ember-light-table').css('height'), 10)) ) || false;
+      let isFullHeight = (Ember.$(window).height() ===(parseInt(Ember.$('.ember-light-table').css('height'), 10)) ) || false;
       if(!isFullHeight){
         Ember.$('.ember-light-table').css('height', '100vh');
       }else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/log.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/log.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/log.js
index 52f8dcc..2226680 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/log.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/log.js
@@ -60,7 +60,7 @@ export default Ember.Route.extend({
 
   fetchLogs(model){
     let logFile = model.get('logFile');
-    return new Promise( (resolve, reject) => {
+    return new Ember.RSVP.Promise( (resolve, reject) => {
       this.get('query').retrieveQueryLog(logFile).then(function(data) {
         resolve(data.file.fileContent);
       }, function(error){
@@ -70,7 +70,7 @@ export default Ember.Route.extend({
   },
 
   jobStatus(jobId){
-    return new Promise( (resolve, reject) => {
+    return new Ember.RSVP.Promise( (resolve, reject) => {
       this.get('jobs').waitForJobStatus(jobId).then(function(status) {
         resolve(status);
       }, function(error){

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js b/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
index f3b27c8..e896348 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
@@ -48,7 +48,7 @@ export default Ember.Route.extend(UILoggerMixin, {
         record.destroyRecord().then(function(data) {
           self.send('deleteSavedQueryDeclined');
           self.send('refreshSavedQueryList');
-        })
+        });
       }, (error) => {
         console.log('error', error);
       });
@@ -70,7 +70,7 @@ export default Ember.Route.extend(UILoggerMixin, {
         });
 
         this.get('controller').set('savedQuerylist',savedQueryList);
-      })
+      });
     },
 
     deleteSavedQueryDeclined(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/settings.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/settings.js b/contrib/views/hive20/src/main/resources/ui/app/routes/settings.js
index f45881b..5cd92c4 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/settings.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/settings.js
@@ -70,15 +70,15 @@ export default Ember.Route.extend(UILoggerMixin, {
         }
       }, err => {
         this.get('logger').danger(`Failed to delete setting with key: '${setting.get('key')}`, this.extractError(err));
-      })
+      });
     },
 
     updateAction(newSetting) {
       newSetting.save().then(data => {
         data.set('editMode', false);
       }, error => {
-        this.get('logger').danger(`Failed to update setting with key: '${setting.get('key')}`, this.extractError(error));
-      })
+        this.get('logger').danger(`Failed to update setting with key: '${newSetting.get('key')}`, this.extractError(error));
+      });
     },
 
     cancelAction(newSetting) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
index fdb2cad..138e85f 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
@@ -64,7 +64,7 @@ export default Ember.Route.extend({
 
         this.controllerFor('udfs').set('udflist',udfList);
         this.transitionTo('udfs');
-      })
+      });
 
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js b/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
index fe1b596..36abf49 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
@@ -40,7 +40,7 @@ export default Ember.Service.extend({
               }
               resolve(status);
             } else if (status === 'error') {
-              reject(status)
+              reject(status);
             } else {
               resolve(this.waitForJobToComplete(jobId, after, fetchDummyResult));
             }
@@ -65,7 +65,7 @@ export default Ember.Service.extend({
 
   stopJob : function(jobId) {
     return this.get('store').findRecord('job', jobId)
-      .then(job => job.destroyRecord())
+      .then(job => job.destroyRecord());
   },
 
   _fetchDummyResult(jobId) {
@@ -73,6 +73,6 @@ export default Ember.Service.extend({
   },
 
   getJob: function (jobId) {
-    return this.get('store').findRecord('job', jobId, {reload: true})
+    return this.get('store').findRecord('job', jobId, {reload: true});
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/services/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/query.js b/contrib/views/hive20/src/main/resources/ui/app/services/query.js
index 6860f4d..3c76d35 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/query.js
@@ -23,7 +23,7 @@ export default Ember.Service.extend({
   store: Ember.inject.service(),
 
   createJob(payload){
-    return new Promise( (resolve, reject) => {
+    return new Ember.RSVP.Promise( (resolve, reject) => {
       this.get('store').adapterFor('query').createJob(payload).then(function(data) {
         resolve(data);
       }, function(err) {
@@ -32,8 +32,7 @@ export default Ember.Service.extend({
     });
   },
   getJob(jobId, firstCall){
-    let self = this;
-    return new Promise( (resolve, reject) => {
+    return new Ember.RSVP.Promise( (resolve, reject) => {
       this.get('store').adapterFor('query').getJob(jobId, firstCall).then(function(data) {
         resolve(data);
       }, function(err) {
@@ -47,13 +46,11 @@ export default Ember.Service.extend({
   },
 
   downloadAsCsv(jobId, path){
-    let self = this;
     return this.get('store').adapterFor('job').downloadAsCsv(jobId, path);
   },
 
   retrieveQueryLog(logFile){
-    let self = this;
-    return new Promise( (resolve, reject) => {
+    return new Ember.RSVP.Promise( (resolve, reject) => {
       this.get('store').adapterFor('query').retrieveQueryLog(logFile).then(function(data) {
         resolve(data);
       }, function(err) {
@@ -63,8 +60,7 @@ export default Ember.Service.extend({
   },
 
   getVisualExplainJson(jobId){
-    let self = this;
-    return new Promise( (resolve, reject) => {
+    return new Ember.RSVP.Promise( (resolve, reject) => {
       this.get('store').adapterFor('query').getVisualExplainJson(jobId).then(function(data) {
           resolve(data);
         }, function(err) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/services/saved-queries.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/saved-queries.js b/contrib/views/hive20/src/main/resources/ui/app/services/saved-queries.js
index 2752375..4b4b29e 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/saved-queries.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/saved-queries.js
@@ -24,40 +24,40 @@ export default Ember.Service.extend({
 
   getAllQueries(){
     let url = this.get('store').adapterFor('saved-query').buildURL();
-    return $.ajax(url, 'GET')
+    return Ember.$.ajax(url, 'GET');
   },
 
   saveQuery(payload){
-    return $.ajax({
+    return Ember.$.ajax({
       type: "POST",
       url: this.get('store').adapterFor('saved-query').buildURL() + '/savedQueries/',
       data: JSON.stringify({savedQuery: payload}) ,
       contentType:"application/json; charset=utf-8",
       dataType:"json",
       headers: {'X-Requested-By': 'ambari'}
-    })
+    });
   },
 
   deleteSaveQuery(id){
     let deletURL = this.get('store').adapterFor('saved-query').buildURL()+ '/savedQueries/' + id;
 
-    return $.ajax({
+    return Ember.$.ajax({
       type: "DELETE",
       url: deletURL,
       contentType:"application/json; charset=utf-8",
       dataType:"json",
       headers: {'X-Requested-By': 'ambari'}
-    })
+    });
   },
 
   fetchSavedQuery(path) {
     let url = this.get('store').adapterFor('application').buildURL()+ '/files/' + encodeURIComponent(path);
 
-    return $.ajax({
+    return Ember.$.ajax({
       type: "GET",
       url: url,
       headers: {'X-Requested-By': 'ambari'}
-    })
+    });
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/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
index 608cafe..a5a4755 100644
--- 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
@@ -104,7 +104,7 @@ export default Ember.Service.extend({
         this.set(statusVar, STATUS.errored);
         let finalData = (typeof errorFn === 'function') ? errorFn(err) : err;
         reject(finalData);
-      })
+      });
     });
 
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/services/stats-service.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/stats-service.js b/contrib/views/hive20/src/main/resources/ui/app/services/stats-service.js
index bb3ed3e..620bf9b 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/stats-service.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/stats-service.js
@@ -34,7 +34,7 @@ export default Ember.Service.extend({
   store: Ember.inject.service(),
 
   generateStatistics(databaseName, tableName, withColumns = false) {
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('store').adapterFor('table').analyseTable(databaseName, tableName, withColumns).then((data) => {
         this.get('store').pushPayload(data);
         resolve(this.get('store').peekRecord('job', data.job.id));
@@ -45,7 +45,7 @@ export default Ember.Service.extend({
   },
 
   generateColumnStatistics(databaseName, tableName, columnName) {
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('store').adapterFor('table').generateColumnStats(databaseName, tableName, columnName).then((data) => {
         this.get('store').pushPayload(data);
         resolve(this.get('store').peekRecord('job', data.job.id));
@@ -56,7 +56,7 @@ export default Ember.Service.extend({
   },
 
   waitForStatsGenerationToComplete(job, fetchDummyResult = true) {
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('jobs').waitForJobToComplete(job.get('id'), 5 * 1000, fetchDummyResult).then((data) => {
         resolve(job);
       }, (err) => {

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/services/table-operations.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/table-operations.js b/contrib/views/hive20/src/main/resources/ui/app/services/table-operations.js
index 2071317..c8de356 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/table-operations.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/table-operations.js
@@ -59,7 +59,7 @@ export default Ember.Service.extend({
       detailedInfo: detailedInfo,
       storageInfo: storageInfo
     });
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('store').adapterFor('table').editTable(tableInfo).then((data) => {
         this.get('store').pushPayload(data);
         resolve(this.get('store').peekRecord('job', data.job.id));
@@ -77,40 +77,40 @@ export default Ember.Service.extend({
       }, (err) => {
         reject(err);
       });
-    })
+    });
   },
 
   renameTable(databaseName, newTableName, oldTableName ) {
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('store').adapterFor('table').renameTable(databaseName, newTableName, oldTableName).then((data) => {
         this.get('store').pushPayload(data);
         resolve(this.get('store').peekRecord('job', data.job.id));
       }, (err) => {
         reject(err);
       });
-    })
+    });
   },
 
   deleteDatabase(database) {
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('store').adapterFor('database').deleteDatabase(database.get('name')).then((data) => {
         this.get('store').pushPayload(data);
         resolve(this.get('store').peekRecord('job', data.job.id));
       }, (err) => {
         reject(err);
       });
-    })
+    });
   },
 
   createDatabase(database) {
-    return new Promise((resolve, reject) => {
+    return new Ember.RSVP.Promise((resolve, reject) => {
       this.get('store').adapterFor('database').createDatabase(database).then((data) => {
         this.get('store').pushPayload(data);
         resolve(this.get('store').peekRecord('job', data.job.id));
       }, (err) => {
         reject(err);
       });
-    })
+    });
   },
 
   waitForJobToComplete(jobId, after) {
@@ -123,7 +123,7 @@ export default Ember.Service.extend({
               this._fetchDummyResult(jobId);
               resolve();
             } else if (status === 'error') {
-              reject()
+              reject();
             } else {
               resolve(this.waitForJobToComplete(jobId, after));
             }
@@ -215,7 +215,7 @@ export default Ember.Service.extend({
         comment: column.get('comment'),
         precision: column.get('precision'),
         scale: column.get('scale')
-      }
+      };
     });
   },
 
@@ -227,7 +227,7 @@ export default Ember.Service.extend({
         comment: column.get('comment'),
         precision: column.get('precision'),
         scale: column.get('scale')
-      }
+      };
     });
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/services/udf.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/udf.js b/contrib/views/hive20/src/main/resources/ui/app/services/udf.js
index 915e3d0..bc9b349 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/udf.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/udf.js
@@ -23,54 +23,43 @@ export default Ember.Service.extend({
   store: Ember.inject.service(),
 
   getAllUdfs(){
-    return $.ajax('/udfs', 'GET');
+    return Ember.$.ajax('/udfs', 'GET');
   },
 
   getFileResource(fileResourceId){
-
-
-
     return this.get('store').findRecord('file-resource',fileResourceId);
-    //return this.get('store').queryRecord('file-resource', { 'fileResource': fileResourceId })
-
-    //let url = '/fileResources/' + fileResourceId;
-    //return $.ajax( url , 'GET');
-
-
   },
 
   savefileResource(payload){
-    return $.ajax({
+    return Ember.$.ajax({
       type: "POST",
-      //url: this.get('store').adapterFor('udf').fileResourceURL(),
       url: '/fileResources',
       data: JSON.stringify({fileResource: payload}) ,
       contentType:"application/json; charset=utf-8",
       headers: {'X-Requested-By': 'ambari'}
-    })
+    });
   },
 
   saveUdf(payload){
-    return $.ajax({
+    return Ember.$.ajax({
       type: "POST",
-      //url: this.get('store').adapterFor('udf').udfURL(),
       url: '/udfs',
       data: JSON.stringify({udf: payload}) ,
       contentType:"application/json; charset=utf-8",
       headers: {'X-Requested-By': 'ambari'}
-    })
+    });
   },
 
   deleteUdf(udfId){
     let deletURL = '/udfs/' + udfId;
 
-    return $.ajax({
+    return Ember.$.ajax({
       type: "DELETE",
       url: deletURL,
       contentType:"application/json; charset=utf-8",
       dataType:"json",
       headers: {'X-Requested-By': 'ambari'}
-    })
+    });
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/templates/components/table-advanced-settings.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/table-advanced-settings.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/table-advanced-settings.hbs
index da1c0b4..7bcb939 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/table-advanced-settings.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/table-advanced-settings.hbs
@@ -68,15 +68,7 @@
           <div class="col-md-6">
             {{input type="text" class="form-control" value=settings.location}}
           </div>
-          <button class="btn btn-success" {{action "toggleDirectoryViewer"}}>Select HDFS Directory</button>
         </div>
-        {{#if showDirectoryViewer}}
-          {{hdfs-viewer-modal
-            showSelectedPath=true
-            close="closeHdfsModal"
-            selected="hdfsPathSelected"
-          }}
-        {{/if}}
       </div>
     {{/if}}
   </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/enhancer.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/enhancer.js b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/enhancer.js
index a99b82e..b5cc2d4 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/enhancer.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/enhancer.js
@@ -31,7 +31,7 @@ function doEnhanceNode(node) {
 
 function uuid() {
   return 'operator-xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
-    const r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
+    const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
     return v.toString(16);
   });
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer-force.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer-force.js b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer-force.js
index a73d1b2..1e4b9ee 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer-force.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer-force.js
@@ -70,7 +70,7 @@ export default function doRender(data, selector, onRequestDetail) {
       .attr('data-operator', d => d._operator)
       .attr('class', d => `operator__box operator__box--${d._operator.toString().replace(/[ ]/g, '_')}`)
       .attr('height', d => d._operator === 'Fetch Operator' ? 150 : 55)
-      .attr('width', 140)
+      .attr('width', 140);
 
     nodes
         .append('foreignObject')
@@ -202,9 +202,9 @@ function getOperatorIcon(operator) {
     case 'Filter Operator':
       return 'fa-filter';
     case 'Dynamic Partitioning Event Operator':
-      return 'fa-columns'
+      return 'fa-columns';
     case 'Map Join Operator':
-      return 'fa-code-fork'
+      return 'fa-code-fork';
     case 'Limit':
     case 'Group By Operator':
     case 'Select Operator':
@@ -218,7 +218,7 @@ function getOperatorIcon(operator) {
 function getIcon (type, subtype) {
   switch(type) {
     case 'join':
-      return 'fa-code-fork'
+      return 'fa-code-fork';
     case 'vectorization':
     case 'job':
       return;
@@ -231,7 +231,8 @@ function getIcon (type, subtype) {
     case 'select':
       return 'fa-table';
   }
-};
+}
+
 function abbreviate(value) {
   let newValue = value;
   if (value >= 1000) {
@@ -239,11 +240,11 @@ function abbreviate(value) {
     const suffixNum = Math.floor(("" + value).length / 3);
     let shortValue = '';
     for (var precision = 2; precision >= 1; precision--) {
-      shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
+      shortValue = parseFloat( (suffixNum !== 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
       const dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,'');
       if (dotLessShortValue.length <= 2) { break; }
     }
-    if (shortValue % 1 != 0) {
+    if (shortValue % 1 !== 0) {
       const  shortNum = shortValue.toFixed(1);
     }
     newValue = shortValue+suffixes[suffixNum];
@@ -269,7 +270,7 @@ function reset(zoom, svg, container) {
   const height = Math.max(...bounds.map(cBound => cBound.bottom)) - top;
   const midX = left + width / 2;
   const midY = top + height / 2;
-  if (width == 0 || height == 0){
+  if (width === 0 || height === 0){
     // nothing to fit
     return;
   }
@@ -302,9 +303,9 @@ function getConnectionPath(pSource, pTarget) {
   const offsetY = 0;
   return path.reduce((accumulator, cPoint, index) => {
     if(index === 0) {
-      return accumulator + `M ${cPoint.x}, ${cPoint.y - offsetY}\n`
+      return accumulator + `M ${cPoint.x}, ${cPoint.y - offsetY}\n`;
     } else {
-      return accumulator + `L ${cPoint.x}, ${cPoint.y - offsetY}\n`
+      return accumulator + `L ${cPoint.x}, ${cPoint.y - offsetY}\n`;
     }
   }, '');
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer.js b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer.js
index 1f6ba3c..b36d7b4 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/renderer.js
@@ -16,6 +16,9 @@
  * limitations under the License.
  */
 
+
+import Ember from 'ember';
+
 export default function doRender(data, selector, onRequestDetail, draggable) {
 
   const width = '1570', height = '800';
@@ -117,7 +120,7 @@ function recurseC(children, onRequestDetail) {
         .attr('data-operator', d => d._operator)
         .attr('class', d => `operator__box operator__box--${d._operator.toString().replace(/[ ]/g, '_')}`)
         .attr('height', d => d._operator === 'Fetch Operator' ? 150 : 55)
-        .attr('width', 140)
+        .attr('width', 140);
 
       children
           .append('foreignObject')
@@ -204,9 +207,9 @@ function getOperatorIcon(operator) {
     case 'Filter Operator':
       return 'fa-filter';
     case 'Dynamic Partitioning Event Operator':
-      return 'fa-columns'
+      return 'fa-columns';
     case 'Map Join Operator':
-      return 'fa-code-fork'
+      return 'fa-code-fork';
     case 'Limit':
     case 'Group By Operator':
     case 'Select Operator':
@@ -220,7 +223,7 @@ function getOperatorIcon(operator) {
 function getIcon (type, subtype) {
   switch(type) {
     case 'join':
-      return 'fa-code-fork'
+      return 'fa-code-fork';
     case 'vectorization':
     case 'job':
       return;
@@ -233,7 +236,8 @@ function getIcon (type, subtype) {
     case 'select':
       return 'fa-table';
   }
-};
+}
+
 function abbreviate(value) {
   let newValue = value;
   if (value >= 1000) {
@@ -241,11 +245,11 @@ function abbreviate(value) {
     const suffixNum = Math.floor(("" + value).length / 3);
     let shortValue = '';
     for (var precision = 2; precision >= 1; precision--) {
-      shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
+      shortValue = parseFloat( (suffixNum !== 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
       const dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,'');
       if (dotLessShortValue.length <= 2) { break; }
     }
-    if (shortValue % 1 != 0) {
+    if (shortValue % 1 !== 0) {
       const  shortNum = shortValue.toFixed(1);
     }
     newValue = shortValue+suffixes[suffixNum];
@@ -271,7 +275,7 @@ function reset(zoom, svg, container) {
   const height = Math.max(...bounds.map(cBound => cBound.bottom)) - top;
   const midX = left + width / 2;
   const midY = top + height / 2;
-  if (width == 0 || height == 0){
+  if (width === 0 || height === 0){
     // nothing to fit
     return;
   }
@@ -291,10 +295,10 @@ function getConnectionPathFF(connector, svg, container) {
   const target = container.select(`#${connector._target._uuid}`).node();
   const rSource = d3.select(source).data()[0];
   const rTarget = d3.select(target).data()[0];
-  const rSourceVertex = d3.select($(source).closest('.vertex').get(0)).data()[0];
-  const rTargetVertex = d3.select($(target).closest('.vertex').get(0)).data()[0];
+  const rSourceVertex = d3.select(Ember.$(source).closest('.vertex').get(0)).data()[0];
+  const rTargetVertex = d3.select(Ember.$(target).closest('.vertex').get(0)).data()[0];
 
-  const offsetBox = $(container.node()).children('.vertex').get(0).getBoundingClientRect();
+  const offsetBox = Ember.$(container.node()).children('.vertex').get(0).getBoundingClientRect();
 
 
   const pSource = {
@@ -322,9 +326,9 @@ function getConnectionPathFF(connector, svg, container) {
   const offsetY = svg.node().getBoundingClientRect().top;
   return path.reduce((accumulator, cPoint, index) => {
     if(index === 0) {
-      return accumulator + `M ${cPoint.x}, ${cPoint.y - offsetY}\n`
+      return accumulator + `M ${cPoint.x}, ${cPoint.y - offsetY}\n`;
     } else {
-      return accumulator + `L ${cPoint.x}, ${cPoint.y - offsetY}\n`
+      return accumulator + `L ${cPoint.x}, ${cPoint.y - offsetY}\n`;
     }
   }, '');
 }
@@ -361,9 +365,9 @@ function getConnectionPath(connector, svg, container){
   const offsetY = svg.node().getBoundingClientRect().top;
   return path.reduce((accumulator, cPoint, index) => {
     if(index === 0) {
-      return accumulator + `M ${cPoint.x}, ${cPoint.y - offsetY}\n`
+      return accumulator + `M ${cPoint.x}, ${cPoint.y - offsetY}\n`;
     } else {
-      return accumulator + `L ${cPoint.x}, ${cPoint.y - offsetY}\n`
+      return accumulator + `L ${cPoint.x}, ${cPoint.y - offsetY}\n`;
     }
   }, '');
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3bc3d686/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/transformer.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/transformer.js b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/transformer.js
index 4a7df10..d88de98 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/transformer.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/utils/hive-explainer/transformer.js
@@ -79,14 +79,14 @@ function doGetChildrenWithIndexX(children, cIndex) {
   return children.map(cChild => Object.assign({}, cChild, {
     _indexX: cIndex,
     _children: doGetChildrenWithIndexX(cChild._children, cIndex + 1)
-  }))
+  }));
 }
 
 function doGetChildrenWithIndexY(children, cIndex) {
   return children.map((cChild, index) => Object.assign({}, cChild, {
     _indexY: cIndex + index,
     _children: doGetChildrenWithIndexY(cChild._children, cIndex + index)
-  }))
+  }));
 }
 
 function getTezPlan(data) {
@@ -133,7 +133,7 @@ function getEdgesWithFetch(tezEdges, vertices) {
       .filter(cEdge => tezEdges.every(tcEdge => cEdge._target !== tcEdge._source))
       .map(cRootEdge => cRootEdge._target);
 
-  const uniqueRootKeys = [...new Set(rootKeys)]
+  const uniqueRootKeys = [...new Set(rootKeys)];
 
   const fetchVertex = vertices.find(cVertex => cVertex._vertex === 'Fetch');
 
@@ -180,7 +180,7 @@ function getFetchVertex(plan) {
         _operator: 'Fetch Operator',
         _children: []
       })
-    ]
+    ];
   }
 
   return vertex;
@@ -436,7 +436,7 @@ function getConnections(vertices, edges) {
         _source: cOperator,
         _target: targetOperator,
       });
-    })
+    });
   });
 
   return connections;


[11/50] [abbrv] ambari git commit: Revert "AMBARI-20308 - Atlas service check fails during EU on wire encrypted cluster (jonathanhurley)"

Posted by ol...@apache.org.
Revert "AMBARI-20308 - Atlas service check fails during EU on wire encrypted cluster (jonathanhurley)"

This reverts commit d8901e26c3f5cf45011d700cb44d73ea67c86d20.


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

Branch: refs/heads/branch-dev-logsearch
Commit: e19f57e83c387c21109dfe4bda0e0e146db2e60e
Parents: d8901e2
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Mar 6 14:19:44 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Mar 6 14:19:44 2017 -0500

----------------------------------------------------------------------
 .../configuration/application-properties.xml    | 42 --------------------
 .../stacks/HDP/2.5/upgrades/config-upgrade.xml  | 12 ------
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml | 16 +++-----
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml |  6 ---
 .../stacks/HDP/2.5/upgrades/upgrade-2.5.xml     |  6 ---
 .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml     |  1 -
 .../configuration/application-properties.xml    |  3 +-
 7 files changed, 7 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
deleted file mode 100644
index 366ecf6..0000000
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
-<!--
-/**
- * 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="false">
-
-  <!-- Supported in HDP 2.5.4 -->
-  <property>
-    <name>atlas.ssl.exclude.protocols</name>
-    <display-name>Excluded Wire Encryption Protocols</display-name>
-    <value>TLSv1.2</value>
-    <value-attributes>
-      <empty-value-valid>true</empty-value-valid>
-    </value-attributes>
-    <description>A comma-separate list of the wire encryption protocols to exclude when TLS is enabled. Some versions of cURL do not work with TLSv1.2.</description>
-    <used-by>
-      <property>
-        <type>application-properties</type>
-        <name>atlas.enableTLS</name>
-      </property>
-    </used-by>
-    <on-ambari-upgrade add="false"/>
-  </property>
-
-</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
index 37f2a82..93e0149 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
@@ -136,18 +136,6 @@
         </changes>
       </component>
     </service>
-
-    <service name="ATLAS">
-      <component name="ATLAS_SERVER">
-        <changes>          
-          <definition xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol" summary="Excluding TLS v1.2 Protocol">
-            <type>application-properties</type>
-            <set key="atlas.ssl.exclude.protocols" value="TLSv1.2" if-type="application-properties" if-key="atlas.ssl.exclude.protocols" if-key-state="absent"/>
-          </definition>          
-        </changes>
-      </component>
-    </service>
-
    <service name="OOZIE">
     <component name="OOZIE_SERVER">
       <changes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
index e7ada04..5b37375 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
@@ -75,7 +75,7 @@
       <service name="FLUME">
         <component>FLUME_HANDLER</component>
       </service>
-
+      
       <service name="ACCUMULO">
         <component>ACCUMULO_TRACER</component>
         <component>ACCUMULO_GC</component>
@@ -300,12 +300,6 @@
       <execute-stage service="STORM" component="NIMBUS" title="Apply config changes for Nimbus">
         <task xsi:type="configure" id="increase_storm_zookeeper_timeouts"/>
       </execute-stage>
-      
-      <execute-stage service="ATLAS" component="ATLAS_SERVER" title="Updating Atlas TLS Exclude Protocols">
-        <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol">
-          <summary>Updating Atlas TLS Exclude Protocols to exclude TLS v1.2</summary>
-        </task>
-      </execute-stage>
     </group>
 
     <!--
@@ -335,7 +329,7 @@
         </task>
       </execute-stage>
     </group>
-
+    
     <!-- Now, restart all of the services. -->
     <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper">
       <service-check>false</service-check>
@@ -677,7 +671,7 @@
         <component>FLUME_HANDLER</component>
       </service>
     </group>
-
+    
     <group xsi:type="restart" name="ACCUMULO" title="Accumulo">
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -706,7 +700,7 @@
 
     <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
       <direction>UPGRADE</direction>
-
+      
       <execute-stage title="Check Component Versions">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
       </execute-stage>
@@ -776,7 +770,7 @@
             <function>setup_ranger_java_patches</function>
           </task>
         </pre-upgrade>
-
+        
         <pre-downgrade copy-upgrade="true" />
 
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
index fe297c3..55e8924 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
@@ -431,12 +431,6 @@
           <summary>Updating the Atlas Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
-      
-      <execute-stage service="ATLAS" component="ATLAS_SERVER" title="Updating Atlas TLS Exclude Protocols">
-        <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol">
-          <summary>Updating Atlas TLS Exclude Protocols to exclude TLS v1.2</summary>
-        </task>
-      </execute-stage>
 
       <!--KAFKA-->
       <execute-stage service="KAFKA" component="KAFKA_BROKER" title="Parameterizing Kafka Log4J Properties">

http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
index a030adb..15e5536 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
@@ -934,12 +934,6 @@
 
     <service name="ATLAS">
       <component name="ATLAS_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol"/>
-        </pre-upgrade>
-        
-        <pre-downgrade/>
-
         <upgrade>
           <task xsi:type="restart-task"/>
         </upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
index 97313b5..0c0b08e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
@@ -1066,7 +1066,6 @@
       <component name="ATLAS_SERVER">
         <pre-upgrade>
           <task xsi:type="configure" id="atlas_log4j_parameterize" />
-          <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol"/>
         </pre-upgrade>
         <pre-downgrade />
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/e19f57e8/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
index 91de1b0..47e1fb5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
@@ -60,7 +60,7 @@
     <on-ambari-upgrade add="true"/>
   </property>
 
-  <property>
+    <property>
     <name>atlas.sso.knox.browser.useragent</name>
     <value/>
     <description/>
@@ -92,4 +92,5 @@
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
+
 </configuration>


[06/50] [abbrv] ambari git commit: AMBARI-20318. ulimit config missing for storm service (aonishuk)

Posted by ol...@apache.org.
AMBARI-20318. ulimit config missing for storm service (aonishuk)


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

Branch: refs/heads/branch-dev-logsearch
Commit: b9d199620a2691eff72497b3c02459d31e05eb08
Parents: b2f560a
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Mon Mar 6 16:13:55 2017 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Mon Mar 6 16:13:55 2017 +0200

----------------------------------------------------------------------
 .../STORM/0.9.1/package/scripts/params_linux.py         |  2 ++
 .../STORM/0.9.1/package/scripts/storm.py                |  7 +++++++
 .../src/test/python/stacks/2.1/STORM/test_storm_base.py | 12 ++++++++++++
 3 files changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b9d19962/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
index a176456..5d8a5f3 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
@@ -49,6 +49,8 @@ tmp_dir = Script.get_tmp_dir()
 stack_root = status_params.stack_root
 sudo = AMBARI_SUDO_BINARY
 
+limits_conf_dir = "/etc/security/limits.d"
+
 # Needed since this is an Atlas Hook service.
 cluster_name = config['clusterName']
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b9d19962/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/storm.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/storm.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/storm.py
index f02ced4..99579d2 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/storm.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/storm.py
@@ -79,6 +79,13 @@ def storm(name=None):
             cd_access="a",
   )
 
+  File(format("{limits_conf_dir}/storm.conf"),
+       owner='root',
+       group='root',
+       mode=0644,
+       content=Template("storm.conf.j2")
+  )
+
   File(format("{conf_dir}/config.yaml"),
        content=Template("config.yaml.j2"),
        owner=params.storm_user,

http://git-wip-us.apache.org/repos/asf/ambari/blob/b9d19962/ambari-server/src/test/python/stacks/2.1/STORM/test_storm_base.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/STORM/test_storm_base.py b/ambari-server/src/test/python/stacks/2.1/STORM/test_storm_base.py
index f3cac14..f2e05be 100644
--- a/ambari-server/src/test/python/stacks/2.1/STORM/test_storm_base.py
+++ b/ambari-server/src/test/python/stacks/2.1/STORM/test_storm_base.py
@@ -56,6 +56,12 @@ class TestStormBase(RMFTestCase):
       create_parents = True,
       cd_access='a'
     )
+    self.assertResourceCalled('File', '/etc/security/limits.d/storm.conf',
+        content = Template('storm.conf.j2'),
+        owner = 'root',
+        group = 'root',
+        mode = 0644,
+    )
     self.assertResourceCalled('File', confDir + '/config.yaml',
       owner = 'storm',
       content = Template('config.yaml.j2'),
@@ -100,6 +106,12 @@ class TestStormBase(RMFTestCase):
       create_parents = True,
       cd_access='a'
     )
+    self.assertResourceCalled('File', '/etc/security/limits.d/storm.conf',
+        content = Template('storm.conf.j2'),
+        owner = 'root',
+        group = 'root',
+        mode = 0644,
+    )
     self.assertResourceCalled('File', confDir + '/config.yaml',
       owner = 'storm',
       content = Template('config.yaml.j2'),


[24/50] [abbrv] ambari git commit: AMBARI-20345 - Alert Event Publisher Executor Doesn't Scale Threads (jonathanhurley)

Posted by ol...@apache.org.
AMBARI-20345 - Alert Event Publisher Executor Doesn't Scale Threads (jonathanhurley)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 07a30a12b6b7b091e735f9688ebc6934d4b9cf23
Parents: dff7754
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Mar 7 11:59:13 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue Mar 7 14:43:11 2017 -0500

----------------------------------------------------------------------
 ambari-server/docs/configuration/index.md       |  12 +-
 .../server/configuration/Configuration.java     | 134 +++++++++++++------
 .../events/publishers/AlertEventPublisher.java  |  21 +--
 .../internal/AlertResourceProviderTest.java     |   4 +-
 .../server/orm/dao/AlertsDAOCachedTest.java     |   6 +-
 .../services/CachedAlertFlushServiceTest.java   |   7 +-
 6 files changed, 126 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/07a30a12/ambari-server/docs/configuration/index.md
----------------------------------------------------------------------
diff --git a/ambari-server/docs/configuration/index.md b/ambari-server/docs/configuration/index.md
index 58eb7c7..f836fc9 100644
--- a/ambari-server/docs/configuration/index.md
+++ b/ambari-server/docs/configuration/index.md
@@ -54,7 +54,9 @@ The following are the properties which can be used to configure Ambari.
 | alerts.cache.enabled | Determines whether current alerts should be cached. Enabling this can increase performance on large cluster, but can also result in lost alert data if the cache is not flushed frequently. |`false` | 
 | alerts.cache.flush.interval | The time, in minutes, after which cached alert information is flushed to the database<br/><br/> This property is related to `alerts.cache.enabled`. |`10` | 
 | alerts.cache.size | The size of the alert cache.<br/><br/> This property is related to `alerts.cache.enabled`. |`50000` | 
-| alerts.execution.scheduler.maxThreads | The number of threads used to handle alerts received from the Ambari Agents. The value should be increased as the size of the cluster increases. |`2` | 
+| alerts.execution.scheduler.threadpool.size.core | The core number of threads used to process incoming alert events. The value should be increased as the size of the cluster increases. |`2` | 
+| alerts.execution.scheduler.threadpool.size.max | The number of threads used to handle alerts received from the Ambari Agents. The value should be increased as the size of the cluster increases. |`2` | 
+| alerts.execution.scheduler.threadpool.worker.size | The number of queued alerts allowed before discarding old alerts which have not been handled. The value should be increased as the size of the cluster increases. |`2000` | 
 | alerts.snmp.dispatcher.udp.port | The UDP port to use when binding the SNMP dispatcher on Ambari Server startup. If no port is specified, then a random port will be used. | | 
 | alerts.template.file | The full path to the XML file that describes the different alert templates. | | 
 | ambari.display.url | The URL to use when creating messages which should include the Ambari Server URL.<br/><br/>The following are examples of valid values:<ul><li>`http://ambari.apache.org:8080`</ul> | | 
@@ -244,8 +246,8 @@ The following are the properties which can be used to configure Ambari.
 | server.property-provider.threadpool.size.core | The core number of threads that will be used to retrieve data from federated datasources, such as remote JMX endpoints. |`16` | 
 | server.property-provider.threadpool.size.max | The maximum number of threads that will be used to retrieve data from federated datasources, such as remote JMX endpoints. |`32` | 
 | server.property-provider.threadpool.worker.size | The maximum size of pending federated datasource requests, such as those to JMX endpoints, which can be queued before rejecting new requests. |`2147483647` | 
-| server.script.threads | The number of threads that should be allocated to run external script. |`4` | 
-| server.script.timeout | The time, in milliseconds, until an external script is killed. |`5000` | 
+| server.script.threads | The number of threads that should be allocated to run external script. |`20` | 
+| server.script.timeout | The time, in milliseconds, until an external script is killed. |`10000` | 
 | server.stage.command.execution_type | How to execute commands in one stage |`STAGE` | 
 | server.stages.parallel | Determines whether operations in different execution requests can be run concurrently. |`true` | 
 | server.startup.web.timeout | The time, in seconds, that the ambari-server Python script will wait for Jetty to startup before returning an error code. |`50` | 
@@ -303,7 +305,9 @@ As the size of a cluster grows, some of the default property values may no longe
 ####Alerts & Notifications
 | Property Name | 10 Hosts | ~50 Hosts | ~100 Hosts | 500+ Hosts | 
 | --- | --- | --- | --- | --- |
-| alerts.execution.scheduler.maxThreads | 2 | 2 | 4 | 4 | 
+| alerts.execution.scheduler.threadpool.size.core | 2 | 2 | 4 | 4 | 
+| alerts.execution.scheduler.threadpool.size.max | 2 | 2 | 8 | 8 | 
+| alerts.execution.scheduler.threadpool.worker.size | 400 | 2000 | 4000 | 20000 | 
 | alerts.cache.enabled | false | false | false | true | 
 | alerts.cache.flush.interval | 10 | 10 | 10 | 10 | 
 | alerts.cache.size | 50000 | 50000 | 100000 | 100000 | 

http://git-wip-us.apache.org/repos/asf/ambari/blob/07a30a12/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 cfb4d3d..405251e 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
@@ -17,16 +17,36 @@
  */
 package org.apache.ambari.server.configuration;
 
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Sets;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.reflect.Field;
+import java.security.cert.CertificateException;
+import java.security.interfaces.RSAPublicKey;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.ambari.annotations.Experimental;
 import org.apache.ambari.annotations.ExperimentalFeature;
 import org.apache.ambari.annotations.Markdown;
@@ -35,6 +55,7 @@ import org.apache.ambari.server.actionmanager.CommandExecutionType;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.controller.spi.PropertyProvider;
+import org.apache.ambari.server.controller.utilities.ScalingThreadPoolExecutor;
 import org.apache.ambari.server.events.listeners.alerts.AlertReceivedListener;
 import org.apache.ambari.server.orm.JPATableGenerationStrategy;
 import org.apache.ambari.server.orm.PersistenceType;
@@ -70,34 +91,16 @@ import org.apache.commons.lang.math.NumberUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Writer;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.reflect.Field;
-import java.security.cert.CertificateException;
-import java.security.interfaces.RSAPublicKey;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 /**
  * The {@link Configuration} class is used to read from the
@@ -2206,7 +2209,7 @@ public class Configuration {
       "alerts.template.file", null);
 
   /**
-   * The maximum number of threads which will handle published alert events.
+   * The core number of threads which will handle published alert events.
    */
   @ConfigurationMarkdown(
       group = ConfigurationGrouping.ALERTS,
@@ -2216,9 +2219,40 @@ public class Configuration {
           @ClusterScale(clusterSize = ClusterSizeType.HOSTS_100, value = "4"),
           @ClusterScale(clusterSize = ClusterSizeType.HOSTS_500, value = "4") },
       markdown = @Markdown(
+          description = "The core number of threads used to process incoming alert events. The value should be increased as the size of the cluster increases."))
+  public static final ConfigurationProperty<Integer> ALERTS_EXECUTION_SCHEDULER_THREADS_CORE_SIZE = new ConfigurationProperty<>(
+      "alerts.execution.scheduler.threadpool.size.core", 2);
+
+  /**
+   * The maximum number of threads which will handle published alert events.
+   */
+  @ConfigurationMarkdown(
+      group = ConfigurationGrouping.ALERTS,
+      scaleValues = {
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_10, value = "2"),
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_50, value = "2"),
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_100, value = "8"),
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_500, value = "8") },
+      markdown = @Markdown(
           description = "The number of threads used to handle alerts received from the Ambari Agents. The value should be increased as the size of the cluster increases."))
-  public static final ConfigurationProperty<Integer> ALERTS_EXECUTION_SCHEDULER_THREADS = new ConfigurationProperty<>(
-      "alerts.execution.scheduler.maxThreads", 2);
+  public static final ConfigurationProperty<Integer> ALERTS_EXECUTION_SCHEDULER_THREADS_MAX_SIZE = new ConfigurationProperty<>(
+      "alerts.execution.scheduler.threadpool.size.max", 2);
+
+  /**
+   * The size of the {@link BlockingQueue} used to control the
+   * {@link ScalingThreadPoolExecutor} when handling incoming alert events.
+   */
+  @ConfigurationMarkdown(
+      group = ConfigurationGrouping.ALERTS,
+      scaleValues = {
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_10, value = "400"),
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_50, value = "2000"),
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_100, value = "4000"),
+          @ClusterScale(clusterSize = ClusterSizeType.HOSTS_500, value = "20000") },
+      markdown = @Markdown(
+          description = "The number of queued alerts allowed before discarding old alerts which have not been handled. The value should be increased as the size of the cluster increases."))
+  public static final ConfigurationProperty<Integer> ALERTS_EXECUTION_SCHEDULER_WORKER_QUEUE_SIZE = new ConfigurationProperty<>(
+      "alerts.execution.scheduler.threadpool.worker.size", 2000);
 
   /**
    * If {@code true} then alert information is cached and not immediately
@@ -4511,10 +4545,24 @@ public class Configuration {
   }
 
   /**
+   * @return core thread pool size for AlertEventPublisher, default 2
+   */
+  public int getAlertEventPublisherCorePoolSize() {
+    return Integer.parseInt(getProperty(ALERTS_EXECUTION_SCHEDULER_THREADS_CORE_SIZE));
+  }
+
+  /**
    * @return max thread pool size for AlertEventPublisher, default 2
    */
-  public int getAlertEventPublisherPoolSize() {
-    return Integer.parseInt(getProperty(ALERTS_EXECUTION_SCHEDULER_THREADS));
+  public int getAlertEventPublisherMaxPoolSize() {
+    return Integer.parseInt(getProperty(ALERTS_EXECUTION_SCHEDULER_THREADS_MAX_SIZE));
+  }
+
+  /**
+   * @return the size of the queue for unhandled alert events
+   */
+  public int getAlertEventPublisherWorkerQueueSize() {
+    return Integer.parseInt(getProperty(ALERTS_EXECUTION_SCHEDULER_WORKER_QUEUE_SIZE));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/07a30a12/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/AlertEventPublisher.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/AlertEventPublisher.java b/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/AlertEventPublisher.java
index 5427a7b..78d5df6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/AlertEventPublisher.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/AlertEventPublisher.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.events.publishers;
 
-import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -25,6 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import com.google.inject.Inject;
 import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.utilities.ScalingThreadPoolExecutor;
 import org.apache.ambari.server.events.AlertEvent;
 
 import com.google.common.eventbus.AsyncEventBus;
@@ -53,13 +53,18 @@ public final class AlertEventPublisher {
    */
   @Inject
   public AlertEventPublisher(Configuration config) {
-    // create a fixed executor that is unbounded for now and will run rejected
-    // requests in the calling thread to prevent loss of alert handling
-    int poolsize = config.getAlertEventPublisherPoolSize();
-    ThreadPoolExecutor executor = new ThreadPoolExecutor(2, poolsize, 0L,
-        TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(),
-        new AlertEventBusThreadFactory(),
-        new ThreadPoolExecutor.CallerRunsPolicy());
+    // create an executor which will scale with the number of queued work items
+    // when handling incoming alerts
+    int corePoolSize = config.getAlertEventPublisherCorePoolSize();
+    int maxPoolSize = config.getAlertEventPublisherMaxPoolSize();
+    int workerQueueSize = config.getAlertEventPublisherWorkerQueueSize();
+
+    ThreadPoolExecutor executor = new ScalingThreadPoolExecutor(corePoolSize, maxPoolSize, 0L,
+        TimeUnit.SECONDS, workerQueueSize);
+
+    executor.allowCoreThreadTimeOut(false);
+    executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
+    executor.setThreadFactory(new AlertEventBusThreadFactory());
 
     m_eventBus = new AsyncEventBus(executor);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/07a30a12/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 25b9821..f1c5c35 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
@@ -737,7 +737,9 @@ public class AlertResourceProviderTest {
       expect(configuration.getDatabaseDriver()).andReturn(JDBC_IN_MEMORY_DRIVER).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.getAlertEventPublisherCorePoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS_CORE_SIZE.getDefaultValue())).anyTimes();
+      expect(configuration.getAlertEventPublisherMaxPoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS_MAX_SIZE.getDefaultValue())).anyTimes();
+      expect(configuration.getAlertEventPublisherWorkerQueueSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_WORKER_QUEUE_SIZE.getDefaultValue())).anyTimes();
       expect(configuration.getMasterKeyLocation()).andReturn(new File("/test")).anyTimes();
       expect(configuration.getTemporaryKeyStoreRetentionMinutes()).andReturn(2l).anyTimes();
       expect(configuration.isActivelyPurgeTemporaryKeyStore()).andReturn(true).anyTimes();

http://git-wip-us.apache.org/repos/asf/ambari/blob/07a30a12/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
index 02d942a..f47a997 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
@@ -17,6 +17,8 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import static org.easymock.EasyMock.expect;
+
 import java.util.List;
 
 import javax.persistence.EntityManager;
@@ -274,7 +276,9 @@ public class AlertsDAOCachedTest {
 
       // required for since the configuration is being mocked
       Configuration configuration = EasyMock.createNiceMock(Configuration.class);
-      EasyMock.expect(configuration.getAlertEventPublisherPoolSize()).andReturn(2).anyTimes();
+      EasyMock.expect(configuration.getAlertEventPublisherCorePoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS_CORE_SIZE.getDefaultValue())).anyTimes();
+      EasyMock.expect(configuration.getAlertEventPublisherMaxPoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS_MAX_SIZE.getDefaultValue())).anyTimes();
+      EasyMock.expect(configuration.getAlertEventPublisherWorkerQueueSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_WORKER_QUEUE_SIZE.getDefaultValue())).anyTimes();
       EasyMock.expect(configuration.isAlertCacheEnabled()).andReturn(Boolean.TRUE).anyTimes();
       EasyMock.expect(configuration.getAlertCacheSize()).andReturn(100).anyTimes();
       EasyMock.replay(configuration);

http://git-wip-us.apache.org/repos/asf/ambari/blob/07a30a12/ambari-server/src/test/java/org/apache/ambari/server/state/services/CachedAlertFlushServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/services/CachedAlertFlushServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/services/CachedAlertFlushServiceTest.java
index 0ad67d0..992c7c4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/services/CachedAlertFlushServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/services/CachedAlertFlushServiceTest.java
@@ -17,6 +17,8 @@
  */
 package org.apache.ambari.server.state.services;
 
+import static org.easymock.EasyMock.expect;
+
 import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.configuration.Configuration;
@@ -123,7 +125,10 @@ public class CachedAlertFlushServiceTest extends EasyMockSupport {
 
       // required for since the configuration is being mocked
       Configuration configuration = createNiceMock(Configuration.class);
-      EasyMock.expect(configuration.getAlertEventPublisherPoolSize()).andReturn(2).anyTimes();
+      expect(configuration.getAlertEventPublisherCorePoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS_CORE_SIZE.getDefaultValue())).anyTimes();
+      expect(configuration.getAlertEventPublisherMaxPoolSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_THREADS_MAX_SIZE.getDefaultValue())).anyTimes();
+      expect(configuration.getAlertEventPublisherWorkerQueueSize()).andReturn(Integer.valueOf(Configuration.ALERTS_EXECUTION_SCHEDULER_WORKER_QUEUE_SIZE.getDefaultValue())).anyTimes();
+
 
       EasyMock.replay(configuration);
 


[44/50] [abbrv] ambari git commit: AMBARI-20373. Complete button after move masters is grayed out even after move has completed (akovalenko)

Posted by ol...@apache.org.
AMBARI-20373. Complete button after move masters is grayed out even after move has completed (akovalenko)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 4534e0a5aa91f34b44ac32e492cc960d91c07046
Parents: c52027c
Author: Aleksandr Kovalenko <ak...@hortonworks.com>
Authored: Thu Mar 9 13:14:53 2017 +0200
Committer: Aleksandr Kovalenko <ak...@hortonworks.com>
Committed: Thu Mar 9 16:25:57 2017 +0200

----------------------------------------------------------------------
 ambari-web/app/routes/reassign_master_routes.js | 33 ++++++++------------
 1 file changed, 13 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4534e0a5/ambari-web/app/routes/reassign_master_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/reassign_master_routes.js b/ambari-web/app/routes/reassign_master_routes.js
index d5cbadb..9bc7d06 100644
--- a/ambari-web/app/routes/reassign_master_routes.js
+++ b/ambari-web/app/routes/reassign_master_routes.js
@@ -292,22 +292,21 @@ module.exports = App.WizardRoute.extend({
 
     next: function (router) {
       var controller = router.get('reassignMasterController');
-      var reassignMasterWizardStep6 = router.get('reassignMasterWizardStep6Controller');
-      if (!reassignMasterWizardStep6.get('isSubmitDisabled')) {
-        controller.finish();
-        controller.get('popup').hide();
-        App.clusterStatus.setClusterStatus({
-          clusterName: router.get('reassignMasterController.content.cluster.name'),
-          clusterState: 'DEFAULT',
-          localdb: App.db.data
-        }, {alwaysCallback: function () {
+      controller.finish();
+      controller.get('popup').hide();
+      App.clusterStatus.setClusterStatus({
+        clusterName: router.get('reassignMasterController.content.cluster.name'),
+        clusterState: 'DEFAULT',
+        localdb: App.db.data
+      }, {
+        alwaysCallback: function () {
           controller.get('popup').hide();
           router.transitionTo('main.index');
-          Em.run.next(function() {
+          Em.run.next(function () {
             location.reload();
           });
-        }});
-      }
+        }
+      });
     },
 
     unroutePath: function () {
@@ -331,18 +330,12 @@ module.exports = App.WizardRoute.extend({
 
     next: function (router) {
       var controller = router.get('reassignMasterController');
-      var reassignMasterWizardStep7 = router.get('reassignMasterWizardStep7Controller');
-      if (!reassignMasterWizardStep7.get('isSubmitDisabled')) {
-        controller.resetOnClose(controller, 'main.index');
-      }
+      controller.resetOnClose(controller, 'main.index');
     },
 
     complete: function (router) {
       var controller = router.get('reassignMasterController');
-      var reassignMasterWizardStep7 = router.get('reassignMasterWizardStep7Controller');
-      if (!reassignMasterWizardStep7.get('isSubmitDisabled')) {
-        controller.resetOnClose(controller, 'main.index');
-      }
+      controller.resetOnClose(controller, 'main.index');
     },
 
     unroutePath: function () {


[14/50] [abbrv] ambari git commit: AMBARI-20317. Update stack advisor logic for getting enable atlas hook flag value (Mugdha Varadkar via smohanty)

Posted by ol...@apache.org.
AMBARI-20317. Update stack advisor logic for getting enable atlas hook flag value (Mugdha Varadkar via smohanty)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 1b8b91dc87a0694cb7b3aa3a55829a90b202bb35
Parents: 23bd418
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Mon Mar 6 11:30:05 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Mon Mar 6 11:53:04 2017 -0800

----------------------------------------------------------------------
 .../1.4.4.2.0/configuration/sqoop-site.xml      |  4 +++
 .../stacks/HDP/2.3/services/stack_advisor.py    | 31 ++++++++++----------
 2 files changed, 19 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/1b8b91dc/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-site.xml b/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-site.xml
index 5d87c4d..5c9804b 100644
--- a/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-site.xml
+++ b/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-site.xml
@@ -40,6 +40,10 @@
         <type>sqoop-env</type>
         <name>sqoop.atlas.hook</name>
       </property>
+      <property>
+        <type>application-properties</type>
+        <name>atlas.rest.address</name>
+      </property>
     </depends-on>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/1b8b91dc/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
index f18bfe9..6d0ce38 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
@@ -257,7 +257,6 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
     else:
       hooks_value = ""
 
-
     hive_hooks = [x.strip() for x in hooks_value.split(",")]
     hive_hooks = [x for x in hive_hooks if x != ""]
     is_atlas_present_in_cluster = "ATLAS" in servicesList
@@ -268,11 +267,10 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
     else:
       putHiveEnvProperty("hive.atlas.hook", "false")
 
-    if ('hive-env' in services['configurations']) and ('hive.atlas.hook' in services['configurations']['hive-env']['properties']):
-      if 'hive-env' in configurations and 'hive.atlas.hook' in configurations['hive-env']['properties']:
-        enable_atlas_hook = configurations['hive-env']['properties']['hive.atlas.hook'] == "true"
-      elif 'hive-env' in services['configurations'] and 'hive.atlas.hook' in services['configurations']['hive-env']['properties']:
-        enable_atlas_hook = services['configurations']['hive-env']['properties']['hive.atlas.hook'] == "true"
+    if 'hive-env' in configurations and 'hive.atlas.hook' in configurations['hive-env']['properties']:
+      enable_atlas_hook = configurations['hive-env']['properties']['hive.atlas.hook'] == "true"
+    elif 'hive-env' in services['configurations'] and 'hive.atlas.hook' in services['configurations']['hive-env']['properties']:
+      enable_atlas_hook = services['configurations']['hive-env']['properties']['hive.atlas.hook'] == "true"
 
     if enable_atlas_hook:
       # Append atlas hook if not already present.
@@ -852,14 +850,16 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
     else:
       putSqoopEnvProperty("sqoop.atlas.hook", "false")
 
-    if ('sqoop-env' in services['configurations']) and ('sqoop.atlas.hook' in services['configurations']['sqoop-env']['properties']):
-      if 'sqoop-env' in configurations and 'sqoop.atlas.hook' in configurations['sqoop-env']['properties']:
-        enable_atlas_hook = configurations['sqoop-env']['properties']['sqoop.atlas.hook'] == "true"
-      elif 'sqoop-env' in services['configurations'] and 'sqoop.atlas.hook' in services['configurations']['sqoop-env']['properties']:
-        enable_atlas_hook = services['configurations']['sqoop-env']['properties']['sqoop.atlas.hook'] == "true"
+    if 'sqoop-env' in configurations and 'sqoop.atlas.hook' in configurations['sqoop-env']['properties']:
+      enable_atlas_hook = configurations['sqoop-env']['properties']['sqoop.atlas.hook'] == "true"
+    elif 'sqoop-env' in services['configurations'] and 'sqoop.atlas.hook' in services['configurations']['sqoop-env']['properties']:
+      enable_atlas_hook = services['configurations']['sqoop-env']['properties']['sqoop.atlas.hook'] == "true"
 
     if enable_atlas_hook:
       putSqoopSiteProperty('sqoop.job.data.publish.class', 'org.apache.atlas.sqoop.hook.SqoopHook')
+    else:
+      putSqoopSitePropertyAttribute = self.putPropertyAttribute(configurations, "sqoop-site")
+      putSqoopSitePropertyAttribute('sqoop.job.data.publish.class', 'delete', 'true')
 
   def recommendStormConfigurations(self, configurations, clusterData, services, hosts):
     super(HDP23StackAdvisor, self).recommendStormConfigurations(configurations, clusterData, services, hosts)
@@ -887,11 +887,10 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
       else:
         putStormEnvProperty("storm.atlas.hook", "false")
 
-      if ('storm-env' in services['configurations']) and ('storm.atlas.hook' in services['configurations']['storm-env']['properties']):
-        if 'storm-env' in configurations and 'storm.atlas.hook' in configurations['storm-env']['properties']:
-          enable_atlas_hook = configurations['storm-env']['properties']['storm.atlas.hook'] == "true"
-        elif 'storm-env' in services['configurations'] and 'storm.atlas.hook' in services['configurations']['storm-env']['properties']:
-          enable_atlas_hook = services['configurations']['storm-env']['properties']['storm.atlas.hook'] == "true"
+      if 'storm-env' in configurations and 'storm.atlas.hook' in configurations['storm-env']['properties']:
+        enable_atlas_hook = configurations['storm-env']['properties']['storm.atlas.hook'] == "true"
+      elif 'storm-env' in services['configurations'] and 'storm.atlas.hook' in services['configurations']['storm-env']['properties']:
+        enable_atlas_hook = services['configurations']['storm-env']['properties']['storm.atlas.hook'] == "true"
 
       if enable_atlas_hook and not atlas_hook_is_set:
         notifier_plugin_value = atlas_hook_class if notifier_plugin_value == " " else ",".join([notifier_plugin_value, atlas_hook_class])


[50/50] [abbrv] ambari git commit: AMBARI-20349. When SPNEGO authentication is enabled for Hadoop in a cluster with NN HA, PXF Process alert fails (rlevas)

Posted by ol...@apache.org.
AMBARI-20349. When SPNEGO authentication is enabled for Hadoop in a cluster with NN HA, PXF Process alert fails (rlevas)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 245fd5cf3689097fdcdde6a75c39de9d38e0bde8
Parents: 221ad28
Author: Robert Levas <rl...@hortonworks.com>
Authored: Thu Mar 9 10:25:53 2017 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Thu Mar 9 10:25:53 2017 -0500

----------------------------------------------------------------------
 .../PXF/3.0.0/package/alerts/api_status.py      | 36 ++++++++++++++------
 1 file changed, 25 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/245fd5cf/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/alerts/api_status.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/alerts/api_status.py b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/alerts/api_status.py
index d0ed0a4..dcdb372 100644
--- a/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/alerts/api_status.py
+++ b/ambari-server/src/main/resources/common-services/PXF/3.0.0/package/alerts/api_status.py
@@ -24,15 +24,17 @@ import socket
 import urllib2
 import urllib
 
+from resource_management.core import shell
 from resource_management.libraries.functions.curl_krb_request import curl_krb_request
+from resource_management.libraries.functions.get_kinit_path import get_kinit_path
 from resource_management.libraries.functions.namenode_ha_utils import get_active_namenode
 from resource_management.libraries.script.config_dictionary import ConfigDictionary
 from resource_management.core.environment import Environment
 
 CLUSTER_ENV_SECURITY = '{{cluster-env/security_enabled}}'
-HADOOP_ENV_HDFS_USER = '{{hadoop-env/hdfs_user}}'
-HADOOP_ENV_HDFS_USER_KEYTAB = '{{hadoop-env/hdfs_user_keytab}}'
-HADOOP_ENV_HDFS_PRINCIPAL_NAME = '{{hadoop-env/hdfs_principal_name}}'
+ACTING_USER = 'pxf'
+KEYTAB_FILE = '{{pxf-site/pxf.service.kerberos.keytab}}'
+PRINCIPAL_NAME = '{{pxf-site/pxf.service.kerberos.principal}}'
 HDFS_SITE = '{{hdfs-site}}'
 
 
@@ -58,9 +60,9 @@ commonPXFHeaders = {
 
 def get_tokens():
   return (CLUSTER_ENV_SECURITY,
-          HADOOP_ENV_HDFS_USER,
-          HADOOP_ENV_HDFS_USER_KEYTAB,
-          HADOOP_ENV_HDFS_PRINCIPAL_NAME,
+          ACTING_USER,
+          KEYTAB_FILE,
+          PRINCIPAL_NAME,
           HDFS_SITE)
 
 def _get_delegation_token(namenode_address, user, keytab, principal, kinit_path):
@@ -130,21 +132,33 @@ def _get_pxf_protocol_version(base_url):
 
   raise Exception("version could not be found in response " + response)
 
+
+def _ensure_kerberos_authentication(user, principal, keytab_file, kinit_path):
+  kinit_path_local = get_kinit_path(kinit_path)
+  shell.checked_call("{0} -kt {1} {2} > /dev/null".format(kinit_path_local, keytab_file, principal),
+                     user=user)
+
 def execute(configurations={}, parameters={}, host_name=None):
   BASE_URL = "http://{0}:{1}/pxf/".format(host_name, PXF_PORT)
   try:
     # Get delegation token if security is enabled
     if CLUSTER_ENV_SECURITY in configurations and configurations[CLUSTER_ENV_SECURITY].lower() == "true":
+      resolved_principal = configurations[PRINCIPAL_NAME]
+      if resolved_principal is not None:
+        resolved_principal = resolved_principal.replace('_HOST', host_name)
+
       if 'dfs.nameservices' in configurations[HDFS_SITE]:
-        namenode_address = get_active_namenode(ConfigDictionary(configurations[HDFS_SITE]), configurations[CLUSTER_ENV_SECURITY], configurations[HADOOP_ENV_HDFS_USER])[1]
+        if configurations[CLUSTER_ENV_SECURITY]:
+          _ensure_kerberos_authentication(configurations[ACTING_USER], resolved_principal, configurations[KEYTAB_FILE], None)
+        namenode_address = get_active_namenode(ConfigDictionary(configurations[HDFS_SITE]), configurations[CLUSTER_ENV_SECURITY], configurations[ACTING_USER])[1]
       else:
         namenode_address = configurations[HDFS_SITE]['dfs.namenode.http-address']
 
       token = _get_delegation_token(namenode_address,
-                                     configurations[HADOOP_ENV_HDFS_USER],
-                                     configurations[HADOOP_ENV_HDFS_USER_KEYTAB],
-                                     configurations[HADOOP_ENV_HDFS_PRINCIPAL_NAME],
-                                     None)
+                                    configurations[ACTING_USER],
+                                    configurations[KEYTAB_FILE],
+                                    resolved_principal,
+                                    None)
       commonPXFHeaders.update({"X-GP-TOKEN": token})
 
     if _get_pxf_protocol_version(BASE_URL).startswith("v"):


[30/50] [abbrv] ambari git commit: AMBARI-20353. Log error while importing the workflow from encrypted path. (Madhan Mohan Reddy via gauravn7)

Posted by ol...@apache.org.
AMBARI-20353. Log error while importing the workflow from encrypted path. (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/ba04d221
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ba04d221
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ba04d221

Branch: refs/heads/branch-dev-logsearch
Commit: ba04d2211c1db5f6f7ca2feeede1b5667410344d
Parents: 3fd1c24
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Wed Mar 8 17:00:23 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Wed Mar 8 17:01:00 2017 +0530

----------------------------------------------------------------------
 .../ambari/view/OozieProxyImpersonator.java     | 42 ++------------------
 .../org/apache/oozie/ambari/view/Utils.java     | 30 ++++++++++++++
 2 files changed, 34 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ba04d221/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/OozieProxyImpersonator.java
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/OozieProxyImpersonator.java b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/OozieProxyImpersonator.java
index 9bf2f90..d82f928 100644
--- a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/OozieProxyImpersonator.java
+++ b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/OozieProxyImpersonator.java
@@ -23,7 +23,6 @@ import static org.apache.oozie.ambari.view.Constants.STATUS_OK;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -37,7 +36,6 @@ import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.QueryParam;
-import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
@@ -335,15 +333,7 @@ public class OozieProxyImpersonator {
     }
     try {
       final InputStream is = workflowFilesService.readAssset(assetPath);
-      StreamingOutput streamer = new StreamingOutput() {
-        @Override
-        public void write(OutputStream os) throws IOException,
-                WebApplicationException {
-          IOUtils.copy(is, os);
-          is.close();
-          os.close();
-        }
-      };
+      StreamingOutput streamer = utils.streamResponse(is);
       return Response.ok(streamer).status(200).build();
     } catch (IOException ex) {
       LOGGER.error(ex.getMessage(),ex);
@@ -359,15 +349,7 @@ public class OozieProxyImpersonator {
     }
     try {
       final InputStream is = workflowFilesService.readDraft(workflowPath);
-      StreamingOutput streamer = new StreamingOutput() {
-        @Override
-        public void write(OutputStream os) throws IOException,
-          WebApplicationException {
-          IOUtils.copy(is, os);
-          is.close();
-          os.close();
-        }
-      };
+      StreamingOutput streamer = utils.streamResponse(is);
       return Response.ok(streamer).status(200).build();
     } catch (IOException ex) {
       LOGGER.error(ex.getMessage(),ex);
@@ -426,15 +408,7 @@ public class OozieProxyImpersonator {
   private Response getWorkflowResponse(String filePath, String responseType,
                                        boolean olderFormatDraftIngored) throws IOException {
     final InputStream is = workflowFilesService.readWorkflowXml(filePath);
-    StreamingOutput streamer = new StreamingOutput() {
-      @Override
-      public void write(OutputStream os) throws IOException,
-        WebApplicationException {
-        IOUtils.copy(is, os);
-        is.close();
-        os.close();
-      }
-    };
+    StreamingOutput streamer = utils.streamResponse(is);
     Response.ResponseBuilder responseBuilder = Response.ok(streamer).header(RESPONSE_TYPE, responseType);
     if (olderFormatDraftIngored) {
       responseBuilder.header(OLDER_FORMAT_DRAFT_INGORED, Boolean.TRUE.toString());
@@ -455,15 +429,7 @@ public class OozieProxyImpersonator {
         throw new WfmWebException(ErrorCode.WORKFLOW_XML_DOES_NOT_EXIST);
       }
       final InputStream is = workflowFilesService.readWorkflowXml(workflowPath);
-      StreamingOutput streamer = new StreamingOutput() {
-        @Override
-        public void write(OutputStream os) throws IOException,
-          WebApplicationException {
-          IOUtils.copy(is, os);
-          is.close();
-          os.close();
-        }
-      };
+      StreamingOutput streamer = utils.streamResponse(is);
       return Response.ok(streamer).status(200).build();
     } catch (WfmWebException ex) {
       LOGGER.error(ex.getMessage(),ex);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ba04d221/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/Utils.java
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/Utils.java b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/Utils.java
index 0b9adda..8f427bd 100644
--- a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/Utils.java
+++ b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/Utils.java
@@ -18,6 +18,10 @@
 package org.apache.oozie.ambari.view;
 
 import java.io.IOException;
+import java.io.OutputStream;
+import java.io.InputStream;
+import java.io.BufferedOutputStream;
+import java.io.BufferedInputStream;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.HashMap;
@@ -26,9 +30,11 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Map.Entry;
 
+import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.StreamingOutput;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -163,4 +169,28 @@ public class Utils {
 			return false;
 		}
   }
+	public StreamingOutput streamResponse(final InputStream is) {
+		return new StreamingOutput() {
+			@Override
+			public void write(OutputStream os) throws IOException,
+				WebApplicationException {
+				BufferedInputStream bis=new BufferedInputStream(is);
+				BufferedOutputStream bos=new BufferedOutputStream(os);
+				try {
+					int data;
+					while ((data = bis.read()) != -1) {
+						bos.write(data);
+					}
+					is.close();
+					os.close();
+				}catch (IOException e){
+					LOGGER.error(e.getMessage(),e);
+					throw e;
+				}catch (Exception e){
+					LOGGER.error(e.getMessage(),e);
+					throw new RuntimeException(e);
+				}
+			}
+		};
+	}
 }


[04/50] [abbrv] ambari git commit: AMBARI-20314. Revert AMBARI-20227 as it is causing wokflow id to be not shown after submission (Venkat Ranganathan via smohanty)

Posted by ol...@apache.org.
AMBARI-20314. Revert AMBARI-20227 as it is causing wokflow id to be not shown after submission (Venkat Ranganathan via smohanty)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 0bbd5455aa61eadd5f9ec7dbfee3a6ae79ed2953
Parents: df3b028
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Sun Mar 5 13:38:24 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Sun Mar 5 13:38:24 2017 -0800

----------------------------------------------------------------------
 .../resources/ui/app/components/bundle-config.js   | 17 -----------------
 .../resources/ui/app/components/coord-config.js    | 17 -----------------
 .../resources/ui/app/components/flow-designer.js   | 13 -------------
 .../main/resources/ui/app/components/job-config.js |  2 --
 .../main/resources/ui/app/components/save-wf.js    |  2 --
 .../ui/app/templates/components/bundle-config.hbs  | 11 ++---------
 .../ui/app/templates/components/coord-config.hbs   | 11 ++---------
 .../ui/app/templates/components/flow-designer.hbs  | 15 ++++-----------
 8 files changed, 8 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbd5455/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 59ffbb8..e94d51a 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
@@ -146,7 +146,6 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
   importBundle (filePath){
     this.set("bundleFilePath", filePath);
     this.set("isImporting", true);
-    this.hideSuccessMsg();
     filePath = this.appendFileName(filePath, 'bundle');
     var deferred = this.getBundleFromHdfs(filePath);
     deferred.promise.then(function(response){
@@ -250,22 +249,7 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
       return filePath;
     }
   },
-  hideSuccessMsg(){
-    this.set('successMessage', '');
-    this.set('isWFSaveSuccess', false);
-  },
   actions : {
-    showSuccessMessage(msg, isHideSuccessMsg) {
-      if(isHideSuccessMsg){
-        this.set("isWFSaveSuccess", false);
-      } else {
-        this.set("isWFSaveSuccess", true);
-      }
-      Ember.run.later(()=>{
-      this.$('#successMsg').fadeOut();
-      }, 3000);
-      this.set("successMessage", msg);
-    },
     closeFileBrowser(){
       this.set("showingFileBrowser", false);
       this.get('fileBrowser').getContext().trigger('fileSelected', this.get('filePath'));
@@ -324,7 +308,6 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
       this.set('showingResetConfirmation', true);
     },
     resetBundle(){
-      this.hideSuccessMsg();
       this.get('errors').clear();
       this.set('showingResetConfirmation', false);
       if(this.get('bundleFilePath')){

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbd5455/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 2d0a23c..c87ea99 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
@@ -262,7 +262,6 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
     return deferred;
   },
   importCoordinator (filePath){
-    this.hideSuccessMsg();
     filePath = this.appendFileName(filePath, 'coord');
     this.set("coordinatorFilePath", filePath);
     this.set("isImporting", false);
@@ -368,22 +367,7 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
     }.bind(this));
     return isChildComponentsValid;
   },
-  hideSuccessMsg(){
-    this.set('successMessage', '');
-    this.set('isWFSaveSuccess', false);
-  },
   actions : {
-    showSuccessMessage(msg, isHideSuccessMsg) {
-      if(isHideSuccessMsg){
-        this.set("isWFSaveSuccess", false);
-      } else {
-        this.set("isWFSaveSuccess", true);
-      }
-      Ember.run.later(()=>{
-      this.$('#successMsg').fadeOut();
-      }, 3000);
-      this.set("successMessage", msg);
-    },
     registerChild(key, context){
       this.get('childComponents').set(key, context);
     },
@@ -587,7 +571,6 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
     },
     resetCoordinator(){
       this.get("errors").clear();
-      this.hideSuccessMsg();
       this.set('showingResetConfirmation', false);
       if(this.get('coordinatorFilePath')){
         this.importCoordinator(this.get('coordinatorFilePath'));

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbd5455/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 6af82ba..01f8fe6 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
@@ -484,8 +484,6 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     this.set('counterMap', {});
     this.set("undoAvailable", false);
     this.set("showingConfirmationNewWorkflow", false);
-    this.set("successMessage", "");
-    this.set("isWFSaveSuccess", false);
     if(this.get('workflow.parameters') !== null){
       this.set('workflow.parameters', {});
     }
@@ -752,17 +750,6 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
     }
   },
   actions:{
-    showSuccessMessage(msg, isHideSuccessMsg) {
-      if(isHideSuccessMsg){
-        this.set("isWFSaveSuccess", false);
-      } else {
-        this.set("isWFSaveSuccess", true);
-      }
-      Ember.run.later(()=>{
-      this.$('#successMsg').fadeOut();
-      }, 3000);
-      this.set("successMessage", msg);
-    },
     importWorkflowStream(dataStr){
       this.importWorkflowFromFile(dataStr);
     },

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbd5455/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 fe6f34c..15c1fbf 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
@@ -227,8 +227,6 @@ export default Ember.Component.extend(Validations, {
           });
         }
         this.set("savingInProgress",false);
-        this.$("#configureJob").modal("hide");
-        this.sendAction("showSuccessMessage", this.get("displayName")+" have been submitted successfully.");
       }.bind(this),
       error: function(response) {
         console.error(response);

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbd5455/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 cd9424a..017bc61 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
@@ -101,8 +101,6 @@ export default Ember.Component.extend(Validations, {
         });
         self.set("savingInProgress",false);
         this.set('jobFilePath', this.get('filePath'));
-        self.$("#configureJob").modal("hide");
-        self.sendAction("showSuccessMessage", this.get("displayName")+" have been saved successfully.");
     }.bind(this)).catch(function(response){
         self.set("savingInProgress",false);
         self.showNotification({

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbd5455/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 d17a857..2d374a5 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
@@ -72,13 +72,6 @@
     <div id='loading'>
       {{spin-spinner lines=13 length=20 width=10}}
     </div>
-    {{#if isWFSaveSuccess}}
-      <div id="successMsg">
-          <div id="alert" class="alert alert-info alert-dismissible workflow-error" role="alert">
-            {{successMessage}}
-          </div>
-      </div>
-    {{/if}}
     {{designer-errors errors=errors validationErrors=validationErrors errorMsg=errorMsg data=data}}
     <form class="form-horizontal">
       <div class="col-sm-12 paddingtop10">
@@ -131,7 +124,7 @@
   {{hdfs-browser closeFileBrowser="closeFileBrowser" selectFileCallback=selectFileCallback filePath=filePath}}
 {{/if}}
 {{#if showingJobConfig}}
-  {{job-config type='bundle' closeJobConfigs="closeBundleSubmitConfig" showSuccessMessage="showSuccessMessage" jobFilePath=bundleFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=bundleConfigs}}
+  {{job-config type='bundle' closeJobConfigs="closeBundleSubmitConfig" jobFilePath=bundleFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=bundleConfigs containsParameteriedPaths=containsParameteriedPaths}}
 {{/if}}
 {{#if showingResetConfirmation}}
   {{#confirmation-dialog title="Confirm Bundle Reset"
@@ -145,5 +138,5 @@
   {{bundle-version-settings bundle=bundle showVersionSettings="showVersionSettings" }}
 {{/if}}
 {{#if showingSaveWorkflow}}
-  {{save-wf type='bundle' close="closeSave" showSuccessMessage="showSuccessMessage" 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/0bbd5455/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 71d0080..0e35d0e 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
@@ -92,13 +92,6 @@
 <div id='loading'>
   {{spin-spinner lines=13 length=20 width=10}}
 </div>
-{{#if isWFSaveSuccess}}
-  <div id="successMsg">
-      <div id="alert" class="alert alert-info alert-dismissible workflow-error" role="alert">
-        {{successMessage}}
-      </div>
-  </div>
-{{/if}}
 <div class="container-fluid">
   {{designer-errors errors=errors validationErrors=validationErrors errorMsg=errorMsg data=data}}
   <form class="form-horizontal">
@@ -346,7 +339,7 @@
     parameterizedWorkflowPath=parameterizedWorkflowPath
     extractProperties="extractProperties" containsParameteriedPaths=containsParameteriedPaths
     jobFilePath=coordinatorFilePath openFileBrowser="openFileBrowser"
-    closeFileBrowser="closeFileBrowser" jobConfigs=coordinatorConfigs showSuccessMessage="showSuccessMessage" isDryrun=dryrun}}
+    closeFileBrowser="closeFileBrowser" jobConfigs=coordinatorConfigs isDryrun=dryrun}}
 {{/if}}
 {{#if showingResetConfirmation}}
 {{#confirmation-dialog title="Confirm Coordinator Reset"
@@ -388,5 +381,5 @@ okBtnText="Continue" cancelBtnText="Cancel" onOk="resetCoordinator"}}{{/confirma
 </div>
 {{/if}}
 {{#if showingSaveWorkflow}}
-  {{save-wf type='coord' close="closeSave" showSuccessMessage="showSuccessMessage" 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/0bbd5455/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 2c85985..b5c3807 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
@@ -159,25 +159,18 @@
       {{/if}}
       {{#if isAssetPublishing}}
         <div id="loader">
-            <div id="alert" class="alert alert-info alert-dismissible workflow-error" role="alert">
+            <div id="alert"class="alert alert-info alert-dismissible workflow-error" role="alert">
               Publishing asset. Please wait...
             </div>
         </div>
       {{/if}}
       {{#if isAssetImporting}}
         <div id="loader">
-            <div id="alert" class="alert alert-info alert-dismissible workflow-error" role="alert">
+            <div id="alert"class="alert alert-info alert-dismissible workflow-error" role="alert">
               Importing asset. Please wait...
             </div>
         </div>
       {{/if}}
-      {{#if isWFSaveSuccess}}
-        <div id="successMsg">
-            <div id="alert" class="alert alert-info alert-dismissible workflow-error" role="alert">
-              {{successMessage}}
-            </div>
-        </div>
-      {{/if}}
       <div id="flow-designer">
         {{#each flattenedNodes as |node|}}
         <div class="node-wrapper">
@@ -272,10 +265,10 @@
   {{workflow-action-editor actionType=currentAction closeActionEditor="closeActionEditor" setNodeTransitions="setNodeTransitions" actionModel=currentNode.domain nodeType=currentNode.type currentNode=currentNode killNodes=workflow.killNodes credentials=workflow.credentials validateWorkflow="validateWorkflow"}}
 {{/if}}
 {{#if showingSaveWorkflow}}
-  {{save-wf type='wf' close="closeSaveWorkflow" showSuccessMessage="showSuccessMessage" jobFilePath=workflowFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=configForSave}}
+  {{save-wf type='wf' close="closeSaveWorkflow" jobFilePath=workflowFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=configForSave}}
 {{/if}}
 {{#if showingWorkflowConfigProps}}
-  {{job-config type='wf' closeJobConfigs="closeWorkflowSubmitConfigs" showSuccessMessage="showSuccessMessage" jobFilePath=workflowFilePath tabInfo=tabInfo openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=workflowSubmitConfigs isDryrun=dryrun}}
+  {{job-config type='wf' closeJobConfigs="closeWorkflowSubmitConfigs" jobFilePath=workflowFilePath tabInfo=tabInfo openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=workflowSubmitConfigs isDryrun=dryrun}}
 {{/if}}
 {{#if showGlobalConfig}}
   {{#global-config closeGlobalConfig="closeWorkflowGlobalProps" saveGlobalConfig="saveGlobalConfig" actionModel=globalConfig}}{{/global-config}}


[40/50] [abbrv] ambari git commit: AMBARI-20330 : Unit test failures - testThreadPoolEnabledPropertyProviderDefaults & testMetricsRetrieveServiceDefaults. (avijayan)

Posted by ol...@apache.org.
AMBARI-20330 : Unit test failures - testThreadPoolEnabledPropertyProviderDefaults & testMetricsRetrieveServiceDefaults. (avijayan)


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

Branch: refs/heads/branch-dev-logsearch
Commit: ec33f228a8213a0820af25290219fa13cabb974a
Parents: 6910263
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Wed Mar 8 12:41:13 2017 -0800
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Wed Mar 8 12:41:23 2017 -0800

----------------------------------------------------------------------
 .../apache/ambari/server/configuration/ConfigurationTest.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ec33f228/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java b/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
index 5f6dd72..b9288d2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
@@ -866,7 +866,7 @@ public class ConfigurationTest {
     Assert.assertTrue(completionServiceTimeout >= SMALLEST_COMPLETION_SERIVCE_TIMEOUT_MS);
     Assert.assertTrue(completionServiceTimeout <= LARGEST_COMPLETION_SERIVCE_TIMEOUT_MS);
     Assert.assertTrue(corePoolSize <= maxPoolSize);
-    Assert.assertTrue(corePoolSize > 2 && corePoolSize <= 32);
+    Assert.assertTrue(corePoolSize > 2 && corePoolSize <= 128);
     Assert.assertTrue(maxPoolSize > 2 && maxPoolSize <= processorCount * 4);
     Assert.assertTrue(workerQueueSize > processorCount * 10);
   }
@@ -902,7 +902,7 @@ public class ConfigurationTest {
     Assert.assertTrue(priority > Thread.MIN_PRIORITY);
 
     Assert.assertTrue(cacheTimeout >= LOWEST_CACHE_TIMEOUT_MINUTES);
-    Assert.assertTrue(corePoolSize > 2 && corePoolSize <= 32);
+    Assert.assertTrue(corePoolSize > 2 && corePoolSize <= 128);
     Assert.assertTrue(maxPoolSize > 2 && maxPoolSize <= processorCount * 4);
     Assert.assertTrue(workerQueueSize >= processorCount * 10);
   }


[31/50] [abbrv] ambari git commit: AMBARI-20337.Need to show timer while loading coordinator name while bundle creation.(Madhan Mohan Reddy via gauravn7)

Posted by ol...@apache.org.
AMBARI-20337.Need to show timer while loading coordinator name while bundle creation.(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/934f3f18
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/934f3f18
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/934f3f18

Branch: refs/heads/branch-dev-logsearch
Commit: 934f3f18277b3cb48e1e8c9a16836aebdec1d1b0
Parents: ba04d22
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Wed Mar 8 17:24:45 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Wed Mar 8 17:24:45 2017 +0530

----------------------------------------------------------------------
 .../ui/app/components/bundle-coord-config.js    | 28 +++++++++++++++++---
 .../app/templates/components/bundle-config.hbs  |  4 +--
 .../components/bundle-coord-config.hbs          |  5 +++-
 3 files changed, 30 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/934f3f18/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-coord-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-coord-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-coord-config.js
index 2280f82..c2ac96b 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-coord-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-coord-config.js
@@ -26,6 +26,7 @@ const Validations = buildValidations({
   })
 });
 export default Ember.Component.extend(Validations, {
+  propertyExtractor : Ember.inject.service('property-extractor'),
   initialize : function(){
     this.on('fileSelected',function(fileName){
       this.set(this.get('filePathModel'), fileName);
@@ -52,8 +53,8 @@ export default Ember.Component.extend(Validations, {
       }
     }).done(function(data){
       deferred.resolve(data);
-    }).fail(function(){
-      deferred.reject();
+    }).fail(function(data){
+      deferred.reject(data);
     });
     return deferred;
   },
@@ -95,13 +96,32 @@ export default Ember.Component.extend(Validations, {
     },
     showCoordinatorName(){
       this.set('coordinatorName', null);
-      var deferred = this.readFromHdfs(this.get('coordinator.appPath'));
+      this.set('errorMsg', '');
+      if (this.get('coordinator.appPath') === '') {
+        return;
+      }
+      var path = this.get('appendFileName')(this.get('coordinator.appPath'), 'coord');
+      if (this.get('propertyExtractor').containsParameters(path)) {
+        this.set('containsParameteriedPaths', true);
+        this.set('parameterizedPathWarning', 'Coordinator path contains variables');
+        return;
+      } else {
+        this.set('containsParameteriedPaths', false);
+        this.set('parameterizedPathWarning', '');
+      }
+      this.set('coordNameFetchingInProgress', true);
+      var deferred = this.readFromHdfs(path);
       deferred.promise.then(function(data){
         var x2js = new X2JS();
         var coordJson = x2js.xml_str2json(data);
         this.set('coordinator.name', coordJson["coordinator-app"]._name);
-      }.bind(this)).catch(function(){
+        this.set('coordNameFetchingInProgress', false);
+      }.bind(this)).catch(function(data){
+        console.error(data);
         this.set('coordinatorName', null);
+        this.set('errorMsg', 'There is some problem while fetching coordinator name.');
+        this.set('data', data);
+        this.set('coordNameFetchingInProgress', false);
       }.bind(this));
     }
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/934f3f18/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 2d374a5..39ab06d 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
@@ -103,10 +103,10 @@
                 {{#field-error model=this field='bundle.coordinators' showErrorMessage=showErrorMessage}}{{/field-error}}
 
               {{#if coordinatorCreateMode}}
-              {{#bundle-coord-config coordinator=currentCoordinator openTab="openTab" openFileBrowser="openFileBrowser" add="addCoordinator" cancel="cancelCoordinatorOperation" createMode=coordinatorCreateMode}}{{/bundle-coord-config}}
+              {{#bundle-coord-config coordinator=currentCoordinator openTab="openTab" openFileBrowser="openFileBrowser" add="addCoordinator" cancel="cancelCoordinatorOperation" createMode=coordinatorCreateMode errorMsg=errorMsg data=data appendFileName=appendFileName}}{{/bundle-coord-config}}
               {{/if}}
               {{#if coordinatorEditMode}}
-              {{#bundle-coord-config coordinator=currentCoordinator openTab="openTab" openFileBrowser="openFileBrowser" update="updateCoordinator" cancel="cancelCoordinatorOperation" editMode=coordinatorEditMode}}{{/bundle-coord-config}}
+              {{#bundle-coord-config coordinator=currentCoordinator openTab="openTab" openFileBrowser="openFileBrowser" update="updateCoordinator" cancel="cancelCoordinatorOperation" editMode=coordinatorEditMode errorMsg=errorMsg data=data appendFileName=appendFileName}}{{/bundle-coord-config}}
               {{/if}}
             </div>
           </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/934f3f18/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 56cacd6..1ac1414 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
@@ -23,9 +23,12 @@
         {{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-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>
+          <button class="btn btn-default" type="button" disabled={{containsParameteriedPaths}} title={{parameterizedPathWarning}} {{action "openTab" 'coord' coordinator.appPath}} name="button"><i class="fa fa-external-link"></i></button>
         </span>
       </div>
+      {{#if coordNameFetchingInProgress}}
+        {{spin-spinner lines=8 length=5 width=3 radius=5 top=16 left=440}}
+      {{/if}}
       {{#field-error model=this field='coordinator.appPath' showErrorMessage=showErrorMessage}}{{/field-error}}
     </div>
   </div>


[42/50] [abbrv] ambari git commit: AMBARI-20371. WFM: Delete option in Manage recent list. (Venkata Sairam via pallavkul)

Posted by ol...@apache.org.
AMBARI-20371. WFM: Delete option in Manage recent list. (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/c9f70565
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c9f70565
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c9f70565

Branch: refs/heads/branch-dev-logsearch
Commit: c9f70565538ea7710b2824c95c6190417711ff1b
Parents: c7086b1
Author: pallavkul <pa...@gmail.com>
Authored: Thu Mar 9 19:28:52 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Thu Mar 9 19:29:57 2017 +0530

----------------------------------------------------------------------
 .../ui/app/components/designer-workspace.js     |   1 +
 .../resources/ui/app/components/drafts-wf.js    |  84 +++++++--
 .../ui/app/components/recent-projects.js        |  32 +---
 .../src/main/resources/ui/app/styles/app.less   |  14 +-
 .../templates/components/designer-workspace.hbs |   2 +-
 .../ui/app/templates/components/drafts-wf.hbs   | 175 ++++++++++++-------
 .../templates/components/recent-projects.hbs    |  17 +-
 7 files changed, 195 insertions(+), 130 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f70565/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 0e49d70..980904f 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
@@ -213,6 +213,7 @@ export default Ember.Component.extend({
     },
     editWorkflow(path, type){
       this.sendAction('editWorkflow', path, type);
+      this.send('hideProjectManagerList');
     },
     showProjectManagerList(){
       var deferred = Ember.RSVP.defer();

http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f70565/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 1d01e9b..ed448d9 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
@@ -24,9 +24,10 @@ export default Ember.Component.extend({
   "isCoordinator": true,
   "isWorkflow": true,
   "sortProp": ['updatedAt:desc'],
-  "filteredModels": Ember.computed("model", "search", "isBundle", "isCoordinator", "isWorkflow", function(){
+  "filteredModels": Ember.computed("recentFiles", "search", "isBundle", "isCoordinator", "isWorkflow", {
+    get(key) {
     var score = 0, condition = true, searchTxt = this.get("search").toLowerCase(), isWorkflow = this.get("isWorkflow"), isCoordinator = this.get("isCoordinator"), isBundle = this.get("isBundle");
-    return this.get("model").filter( (role) => {
+    return this.get("recentFiles").filter( (role) => {
       score = 0
       if(searchTxt && searchTxt.length) {
         condition = role.get('name') && role.get('name').toLowerCase().indexOf(searchTxt)>-1;
@@ -42,22 +43,42 @@ export default Ember.Component.extend({
       }
       return condition && score > 0;
     });
+    },
+    set(key, value) {
+      this.set('recentFiles', value);
+
+      var score = 0, condition = true, searchTxt = this.get("search").toLowerCase(), isWorkflow = this.get("isWorkflow"), isCoordinator = this.get("isCoordinator"), isBundle = this.get("isBundle");
+      return this.get("recentFiles").filter( (role) => {
+        score = 0
+        if(searchTxt && searchTxt.length) {
+          condition = role.get('name') && role.get('name').toLowerCase().indexOf(searchTxt)>-1;
+        }
+        if(isWorkflow && role.get('type') === 'WORKFLOW') {
+          score++;
+        }
+        if(isCoordinator && role.get('type') === 'COORDINATOR') {
+          score++;
+        }
+        if(isBundle && role.get('type') === 'BUNDLE') {
+          score++;
+        }
+        return condition && score > 0;
+      });
+      //return value;
+    }
   }),
+  resetDetails() {
+    this.set("deleteMsg", null);
+    this.set("deleteInProgress", false);
+  },
   modelSorted : Ember.computed.sort("filteredModels", "sortProp"),
   "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.$("#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);
@@ -73,15 +94,11 @@ export default Ember.Component.extend({
       this.sendAction('editWorkflow', path, type);
     },
     confirmDelete (job ){
-	    this.set("showingConfirmation", true);
-	    this.set("currentDraft", job);
-    },
-    deleteDraft () {
-	    this.sendAction("deleteWorkflow", this.get('currentDraft'));
+      this.send("showDeleteConfirmation", job);
     },
-    closeProjects () {
-		  //this.$('.modal-backdrop').remove();
-		  this.$("#projectsList").modal("hide");
+    close () {
+      this.$("#projectsList").modal("hide");
+      this.sendAction('close');
     },
     showActions (job) {
       this.$('.'+job.get("updatedAt")+'Actions').show();
@@ -90,6 +107,39 @@ export default Ember.Component.extend({
     hideActions (job) {
       this.$('.'+job.get("updatedAt")+'Actions').hide();
       this.$('.Actions'+job.get("updatedAt")).show();
+    },
+    showDeleteConfirmation(job) {
+      this.resetDetails();
+      this.set('currentDraft', job);
+      this.set('showingDeleteConfirmation', true);
+      Ember.run.later(()=>{
+        this.$("#projectsDeleteConfirmation").modal("show");
+      }, 100);
+    },
+    deleteWorkflow () {
+      let job = this.get("currentDraft");
+      this.set("deleteInProgress", true);
+      var self= this;
+      var rec = this.get("store").peekRecord('wfproject', job.id);
+      if(rec){
+        rec.destroyRecord().then(function () {
+          self.get('recentFiles', self.get('store').peekAll("wfproject"));
+          self.set("deleteInProgress", false);
+          self.set("deleteMsg", "Workflow successfully deleted.");
+          self.get('store').unloadRecord(rec);
+          self.set('filteredModels', self.get('store').peekAll("wfproject"));
+          Ember.run.later(()=>{
+            self.set('showingDeleteConfirmation', false);
+            self.$("#projectsDeleteConfirmation").modal("hide");
+          }, 1000);
+        }).catch(function (response) {
+          self.get('store').unloadRecord(rec);
+          self.get('filteredModels', self.get('store').peekAll("wfproject"));
+          self.sendAction("showProjectManagerList");
+          self.set("deleteInProgress", false);
+          self.set("deleteMsg", "There is some problem while deletion.Please try again.");
+        });
+      }
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f70565/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
index 18a57f6..bbc51cc 100644
--- 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
@@ -18,40 +18,12 @@
 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");
+  		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/c9f70565/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 a30833c..5577239 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
@@ -1597,7 +1597,7 @@ input:invalid {
 .inlineBlock{
   display:inline-block;
 }
-.asset-list .fa-trash-o {
+.asset-list .fa-trash-o, #projectsList .fa-trash-o{
   color: @defaultRed;
   cursor: pointer;
 }
@@ -1713,9 +1713,6 @@ input:invalid {
 .displayBlock {
   display : block;
 }
-.tab-pane #draftsTable, #projectsList #dashboard, .tab-pane .searchWorkflows {
-   display : none;
- }
  .projects-list {
    white-space: nowrap;
    width: 100%;
@@ -1760,3 +1757,12 @@ input:invalid {
 .processing-message {
   padding-left: 48%;
 }
+#projectsList .modal-body {
+   max-height: 70vh;
+   overflow-y: scroll;
+   overflow-x: auto;
+ }
+#projectsDeleteConfirmation .modal-body {
+   max-height: 70vh;
+   overflow: auto;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f70565/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 c8d8dc3..c190511 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
@@ -160,7 +160,7 @@
     {{#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}}
+    {{recent-projects recentFiles=recentFiles routeToDesigner="routeToDesigner" editWorkflow="editWorkflow" deleteWorkflow="deleteWorkflow" close="hideProjectManagerList" deleteWorkflowJob="deleteWorkflowJob" currentDraft=currentDraft showProjectManagerList="showProjectManagerList"}}
   {{/if}}
   {{#if showingWarning}}
   {{#confirmation-dialog title="Confirm workflow reset"

http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f70565/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 632d6bd..ac28de3 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,68 +15,119 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<div id="loading" class="displayBlock">
-    {{spin-spinner lines=13 length=20 width=10}}
-</div>
-<div class="searchWorkflows">
-  {{input type="checkbox" class="marginright5" name="isWorkflow" checked=isWorkflow}}Workflow&nbsp;&nbsp;
-  {{input type="checkbox" class="marginright5" name="isCoordinator" checked=isCoordinator}}Coordinator&nbsp;&nbsp;
-  {{input type="checkbox" class="marginright5" name="isBundle" checked=isBundle}}Bundle&nbsp;&nbsp;
-  {{input type="text" class="l-input" value=search placeholder="Type Workflow name or path"}}
-</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>
-              </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}} class="pointer action-link">
-                            <div class="width100" {{action "importActionToEditor" job.workflowDefinitionPath job.type}}>
-                              {{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>
-                    </tr>
+
+
+<div class="modal" id="projectsList" role="dialog">
+  <div class="modal-dialog">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close"  {{action "close"}}>&times;</button>
+        <h4 class="modal-title">My Workflows</h4>
+      </div>
+      <div class="modal-body">
+
+
+
+        <div class="searchWorkflows">
+          {{input type="checkbox" class="marginright5" name="isWorkflow" checked=isWorkflow}}Workflow&nbsp;&nbsp;
+          {{input type="checkbox" class="marginright5" name="isCoordinator" checked=isCoordinator}}Coordinator&nbsp;&nbsp;
+          {{input type="checkbox" class="marginright5" name="isBundle" checked=isBundle}}Bundle&nbsp;&nbsp;
+          {{input type="text" class="l-input" value=search placeholder="Type Workflow name or path"}}
+        </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>
+                      </tr>
+                    </thead>
+                    <tbody>
+                    {{#if modelSorted}}
+                        {{#each modelSorted as |job idx|}}
+                            <tr id={{job.id}}>
+                                <!--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}} class="pointer action-link">
+                                    <div class="width100" {{action "importActionToEditor" job.workflowDefinitionPath job.type}}>
+                                      {{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>
+                                    <div class="width50">
+                                        <span title="Delete Workflow" {{action "confirmDelete" job}}><i class="fa fa-trash-o"></i></span>
+                                    </div>
+                                </td>
+                            </tr>
+                        {{/each}}
                     {{/if}}
-                {{/each}}
-            {{/if}}
-            </tbody>
-        </table>
+                    </tbody>
+                </table>
+            </div>
+            <div id="draftsNum">Displaying {{modelSorted.length}} workflows</div>
+        {{else}}
+            <div id="emptyDrafts">
+                <label class="control-label" for="{{type}}-path">There are no workflows currently</label>
+            </div>
+        {{/if}}
+
+
+      </div>
+      <div class="modal-footer">
+        <button type="button" class="btn btn-default" {{action "close"}}>Close</button>
+      </div>
     </div>
-    <div id="draftsNum">Displaying {{modelSorted.length}} workflows</div>
-{{else}}
-    <div id="emptyDrafts">
-        <label class="control-label" for="{{type}}-path">There are no workflows currently</label>
+  </div>
+</div>
+
+
+{{#if showingDeleteConfirmation}}
+<div class="modal" id="projectsDeleteConfirmation" 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 confirmation</h4>
+      </div>
+      <div class="modal-body">
+         {{#unless deleteMsg}}
+           <label>Do you want to delete the draft?</label>
+         {{/unless}}
+         {{#if true}}
+           {{spin-spinner lines=7 length=3 width=3 radius=3 top=-10 left=150}}
+         {{/if}}
+         <div><label>{{deleteMsg}}</label></div>
+      </div>
+      <div class="modal-footer">
+        {{#unless deleteMsg}}
+          <button type="button" class="btn btn-primary" {{action "deleteWorkflow"}}>Delete</button>
+        {{/unless}}
+        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+      </div>
     </div>
-{{/if}}
\ No newline at end of file
+  </div>
+</div>
+{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f70565/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
index cd8f6af..c616586 100644
--- 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
@@ -15,19 +15,4 @@
 * 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>
+{{drafts-wf recentFiles=recentFiles routeToDesigner="routeToDesigner" editWorkflow="editWorkflow" deleteWorkflow="deleteWorkflow" showDeleteConfirmation="showDeleteConfirmation" showProjectManagerList="showProjectManagerList" close="close"}}


[12/50] [abbrv] ambari git commit: AMBARI-20308 - Atlas service check fails during EU on wire encrypted cluster (jonathanhurley)

Posted by ol...@apache.org.
AMBARI-20308 - Atlas service check fails during EU on wire encrypted cluster (jonathanhurley)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 8e68824473cf68b5129ead6f81d4d9e5b9cfdc8f
Parents: e19f57e
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Mar 6 14:21:11 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Mar 6 14:23:44 2017 -0500

----------------------------------------------------------------------
 .../configuration/application-properties.xml    | 42 ++++++++++++++++++++
 .../stacks/HDP/2.5/upgrades/config-upgrade.xml  |  6 +++
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml | 16 +++++---
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml |  6 +++
 .../stacks/HDP/2.5/upgrades/upgrade-2.5.xml     |  6 +++
 .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml     |  1 +
 .../configuration/application-properties.xml    |  3 +-
 7 files changed, 73 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
new file mode 100644
index 0000000..366ecf6
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+<!--
+/**
+ * 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="false">
+
+  <!-- Supported in HDP 2.5.4 -->
+  <property>
+    <name>atlas.ssl.exclude.protocols</name>
+    <display-name>Excluded Wire Encryption Protocols</display-name>
+    <value>TLSv1.2</value>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <description>A comma-separate list of the wire encryption protocols to exclude when TLS is enabled. Some versions of cURL do not work with TLSv1.2.</description>
+    <used-by>
+      <property>
+        <type>application-properties</type>
+        <name>atlas.enableTLS</name>
+      </property>
+    </used-by>
+    <on-ambari-upgrade add="false"/>
+  </property>
+
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
index 93e0149..6f3fe42 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
@@ -103,6 +103,11 @@
             <replace key="content" find="&lt;appender name=&quot;FILE&quot; class=&quot;org.apache.log4j.DailyRollingFileAppender&quot;&gt;" replace-with="&lt;appender name=&quot;FILE&quot; class=&quot;org.apache.log4j.DailyRollingFileAppender&quot;&gt;\n&lt;param name=&quot;MaxFileSize&quot; value=&quot;{{atlas_log_max_backup_size}}MB&quot; /&gt;"/>
             <replace key="content" find="&lt;appender name=&quot;FILE&quot; class=&quot;org.apache.log4j.DailyRollingFileAppender&quot;&gt;" replace-with="&lt;appender name=&quot;FILE&quot; class=&quot;org.apache.log4j.DailyRollingFileAppender&quot;&gt;\n&lt;param name=&quot;MaxFileSize&quot; value=&quot;{{atlas_log_number_of_backup_files}}&quot; /&gt;"/>
           </definition>
+
+          <definition xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol" summary="Excluding TLS v1.2 Protocol">
+            <type>application-properties</type>
+            <set key="atlas.ssl.exclude.protocols" value="TLSv1.2" if-type="application-properties" if-key="atlas.ssl.exclude.protocols" if-key-state="absent"/>
+          </definition>
         </changes>
       </component>
       <component name="SPARK_CLIENT">
@@ -136,6 +141,7 @@
         </changes>
       </component>
     </service>
+
    <service name="OOZIE">
     <component name="OOZIE_SERVER">
       <changes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
index 5b37375..e7ada04 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
@@ -75,7 +75,7 @@
       <service name="FLUME">
         <component>FLUME_HANDLER</component>
       </service>
-      
+
       <service name="ACCUMULO">
         <component>ACCUMULO_TRACER</component>
         <component>ACCUMULO_GC</component>
@@ -300,6 +300,12 @@
       <execute-stage service="STORM" component="NIMBUS" title="Apply config changes for Nimbus">
         <task xsi:type="configure" id="increase_storm_zookeeper_timeouts"/>
       </execute-stage>
+      
+      <execute-stage service="ATLAS" component="ATLAS_SERVER" title="Updating Atlas TLS Exclude Protocols">
+        <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol">
+          <summary>Updating Atlas TLS Exclude Protocols to exclude TLS v1.2</summary>
+        </task>
+      </execute-stage>
     </group>
 
     <!--
@@ -329,7 +335,7 @@
         </task>
       </execute-stage>
     </group>
-    
+
     <!-- Now, restart all of the services. -->
     <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper">
       <service-check>false</service-check>
@@ -671,7 +677,7 @@
         <component>FLUME_HANDLER</component>
       </service>
     </group>
-    
+
     <group xsi:type="restart" name="ACCUMULO" title="Accumulo">
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -700,7 +706,7 @@
 
     <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
       <direction>UPGRADE</direction>
-      
+
       <execute-stage title="Check Component Versions">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
       </execute-stage>
@@ -770,7 +776,7 @@
             <function>setup_ranger_java_patches</function>
           </task>
         </pre-upgrade>
-        
+
         <pre-downgrade copy-upgrade="true" />
 
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
index 55e8924..fe297c3 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
@@ -431,6 +431,12 @@
           <summary>Updating the Atlas Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
+      
+      <execute-stage service="ATLAS" component="ATLAS_SERVER" title="Updating Atlas TLS Exclude Protocols">
+        <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol">
+          <summary>Updating Atlas TLS Exclude Protocols to exclude TLS v1.2</summary>
+        </task>
+      </execute-stage>
 
       <!--KAFKA-->
       <execute-stage service="KAFKA" component="KAFKA_BROKER" title="Parameterizing Kafka Log4J Properties">

http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
index 15e5536..a030adb 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
@@ -934,6 +934,12 @@
 
     <service name="ATLAS">
       <component name="ATLAS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol"/>
+        </pre-upgrade>
+        
+        <pre-downgrade/>
+
         <upgrade>
           <task xsi:type="restart-task"/>
         </upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
index 0c0b08e..97313b5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
@@ -1066,6 +1066,7 @@
       <component name="ATLAS_SERVER">
         <pre-upgrade>
           <task xsi:type="configure" id="atlas_log4j_parameterize" />
+          <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol"/>
         </pre-upgrade>
         <pre-downgrade />
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8e688244/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
index 47e1fb5..91de1b0 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
@@ -60,7 +60,7 @@
     <on-ambari-upgrade add="true"/>
   </property>
 
-    <property>
+  <property>
     <name>atlas.sso.knox.browser.useragent</name>
     <value/>
     <description/>
@@ -92,5 +92,4 @@
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
-
 </configuration>


[02/50] [abbrv] ambari git commit: AMBARI-20259. Superset not able to start on Ubuntu if ASCII encoding is set as default encoding - addendum patch (Nishant Bangarwa via smohanty)

Posted by ol...@apache.org.
AMBARI-20259. Superset not able to start on Ubuntu if ASCII encoding is set as default encoding - addendum patch (Nishant Bangarwa via smohanty)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 0ba42cf6c101a435a97b08188ec628f26cdd324d
Parents: 34eafc3
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Sun Mar 5 08:40:06 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Sun Mar 5 08:40:11 2017 -0800

----------------------------------------------------------------------
 .../DRUID/0.9.2/configuration/druid-superset-env.xml             | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0ba42cf6/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-superset-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-superset-env.xml b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-superset-env.xml
index 2ca83de..7284342 100644
--- a/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-superset-env.xml
+++ b/ambari-server/src/main/resources/common-services/DRUID/0.9.2/configuration/druid-superset-env.xml
@@ -90,8 +90,8 @@
     <value>
       # Set environment variables here.
       
-      export LC_ALL=C.UTF-8
-      export LANG=C.UTF-8
+      export LC_ALL=en_US.UTF-8
+      export LANG=en_US.UTF-8
 
       # Superset Home Dir
       export SUPERSET_CONFIG_DIR={{superset_config_dir}}


[21/50] [abbrv] ambari git commit: AMBARI-20344. RU: MR2 service check failed during rolling upgrade (dlysnichenko)

Posted by ol...@apache.org.
AMBARI-20344. RU: MR2 service check failed during rolling upgrade (dlysnichenko)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 7e8a8150e8e103e1835c72cfd8bcc65a623b6d46
Parents: 3bc3d68
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Tue Mar 7 18:02:05 2017 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Tue Mar 7 18:02:05 2017 +0200

----------------------------------------------------------------------
 .../resource_management/libraries/functions/stack_select.py     | 5 ++++-
 .../SLIDER/0.60.0.2.2/package/scripts/service_check.py          | 4 +++-
 2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7e8a8150/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py b/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
index 513ceac..34c311d 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
@@ -91,7 +91,10 @@ SERVICE_CHECK_DIRECTORY_MAP = {
   "PIG_SERVICE_CHECK" : "hadoop-client",
   "HIVE_SERVICE_CHECK" : "hadoop-client",
   "OOZIE_SERVICE_CHECK" : "hadoop-client",
-  "MAHOUT_SERVICE_CHECK" : "mahout-client"
+  "MAHOUT_SERVICE_CHECK" : "mahout-client",
+  "MAPREDUCE2_SERVICE_CHECK" : "hadoop-client",
+  "YARN_SERVICE_CHECK" : "hadoop-client",
+  "SLIDER_SERVICE_CHECK" : "slider-client"
 }
 
 # <stack-root>/current/hadoop-client/[bin|sbin|libexec|lib]

http://git-wip-us.apache.org/repos/asf/ambari/blob/7e8a8150/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
index 2f656c7..3b2c4ab 100644
--- a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
+++ b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/service_check.py
@@ -39,6 +39,7 @@ class SliderServiceCheck(Script):
   def service_check(self, env):
     import params
     env.set_params(params)
+    environment={'HADOOP_CONF_DIR': '/usr/hdp/2.4.3.0-227/hadoop/conf'}
 
     if params.stack_version_formatted and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted):
       copy_to_hdfs("slider", params.user_group, params.hdfs_user, skip=params.sysprep_skip_copy_tarballs_hdfs)
@@ -52,7 +53,8 @@ class SliderServiceCheck(Script):
             tries=3,
             try_sleep=5,
             user=params.smokeuser,
-            logoutput=True
+            logoutput=True,
+            environment=environment
     )
 
 


[34/50] [abbrv] ambari git commit: AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)

Posted by ol...@apache.org.
AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 63dad097a730d6403f052e0083fa0e665de26f25
Parents: 60095bc
Author: pallavkul <pa...@gmail.com>
Authored: Wed Mar 8 20:50:09 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Wed Mar 8 20:51:44 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/udf-item.js     | 148 +++++++++++++------
 .../resources/ui/app/routes/queries/query.js    |   4 +-
 .../src/main/resources/ui/app/routes/udfs.js    |  18 ++-
 .../main/resources/ui/app/routes/udfs/new.js    | 138 ++++++++++-------
 .../resources/ui/app/services/auto-refresh.js   |   2 +-
 .../ui/app/templates/components/udf-item.hbs    |  26 ++--
 .../main/resources/ui/app/templates/udfs.hbs    |   3 +
 7 files changed, 221 insertions(+), 118 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
index 44f56e5..3e6e623 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js
@@ -17,8 +17,9 @@
  */
 
 import Ember from 'ember';
+import UILoggerMixin from '../mixins/ui-logger';
 
-export default Ember.Component.extend({
+export default Ember.Component.extend(UILoggerMixin, {
 
   store: Ember.inject.service(),
 
@@ -30,10 +31,43 @@ export default Ember.Component.extend({
   showDeleteUdfModal: false,
   expandedValue: null,
   udfId: null,
+  editUdfId: Ember.computed('udf', function () {
+    return this.get('udf.id');
+  }),
+  editUdfName: Ember.computed('udf', function () {
+    return this.get('udf.name');
+  }),
+  editUdfClassName: Ember.computed('udf', function () {
+    return this.get('udf.classname');
+  }),
+  editOwner: Ember.computed('udf', function () {
+    return this.get('udf.owner');
+  }),
+  editFileResource: Ember.computed('udf', function () {
+    return this.get('udf.fileResource');
+  }),
   fileResourceList:[],
   selectedFileResource: null,
   isAddingNewFileResource: false,
 
+  validate(udfName, udfClassName, resourceName, resourcePath){
+    if (Ember.isEmpty(udfName)) {
+      this.get('logger').danger('UDF Name can not be empty.');
+      return false;
+    }
+
+    if (Ember.isEmpty(udfClassName)) {
+      this.get('logger').danger('UDF Class Name can not be empty.');
+      return false;
+    }
+
+    if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) {
+      this.get('logger').danger('File Resource can not be empty.');
+      return false;
+    }
+    return true;
+  },
+
   actions: {
     toggleExpandUdf(fileResourceId) {
 
@@ -59,14 +93,30 @@ export default Ember.Component.extend({
         this.set('expandedEdit', true);
         this.set('valueLoading', true);
 
-        this.get('store').find('fileResource', fileResourceId).then((data) => {
-          this.set('udfFileResourceName', data.get('name'));
-          this.set('udfFileResourcePath', data.get('path'));
-        });
+        this.get('store').findAll('file-resource').then((data) => {
+          let fileResourceList = [];
+          data.forEach(x => {
+            let localFileResource = {'id': x.get('id'),
+              'name': x.get('name'),
+              'path': x.get('path'),
+              'owner': x.get('owner')
+            };
+            fileResourceList.push(localFileResource);
+          });
 
+          fileResourceList.filterBy('id', fileResourceId).map((data) => {
+            this.set('udfFileResourceName', data.name);
+            this.set('udfFileResourcePath', data.path);
 
+                    this.get('store').find('udf', udfId).then((data) => {
+                        this.set('editUdfId', udfId);
+                        this.set('editUdfName', data.get('name'));
+                        this.set('editUdfClassName', data.get('classname'));
+                        this.set('editOwner', data.get('owner'));
+                      });
+          });
+        });
         this.send('setFileResource', fileResourceId);
-
       }
     },
 
@@ -75,39 +125,38 @@ export default Ember.Component.extend({
     },
 
     saveUDf(name, classname, udfid, udfFileResourceName, udfFileResourcePath){
-
       let self = this;
-
-      if(!Ember.isEmpty(this.get('selectedFileResource'))){
-        this.get('store').findRecord('udf', udfid).then(function(resultUdf) {
-          resultUdf.set('name', name);
-          resultUdf.set('classname', classname);
-          resultUdf.set('fileResource', self.get('selectedFileResource').id);
-          resultUdf.save();
-          self.set('expandedEdit', false);
-        });
-      } else {
-
-        let resourcePayload = {"name":udfFileResourceName,"path":udfFileResourcePath};
-
-        this.get('udfService').savefileResource(resourcePayload)
-          .then((data) => {
-            console.log('fileResource is', data.fileResource.id);
-            self.get('store').findRecord('udf', udfid).then(function(resultUdf) {
-
-              resultUdf.set('name', name);
-              resultUdf.set('classname', classname);
-              resultUdf.set('fileResource', data.fileResource.id);
-              resultUdf.save();
-              self.set('expandedEdit', false);
-            });
-          }, (error) => {
-            console.log("Error encountered", error);
+      if (this.validate(name, classname, udfFileResourceName, udfFileResourcePath)) {
+        if (!Ember.isEmpty(this.get('selectedFileResource'))) {
+          this.get('store').findRecord('udf', udfid).then(function (resultUdf) {
+            resultUdf.set('name', name);
+            resultUdf.set('classname', classname);
+            resultUdf.set('fileResource', self.get('selectedFileResource').id);
+            resultUdf.save();
+            self.set('expandedEdit', false);
           });
+        }
+        else {
+
+          let resourcePayload = {"name": udfFileResourceName, "path": udfFileResourcePath};
+
+          this.get('udfService').savefileResource(resourcePayload)
+            .then((data) => {
+              console.log('fileResource is', data.fileResource.id);
+              self.get('store').findRecord('udf', udfid).then(function (resultUdf) {
+
+                resultUdf.set('name', name);
+                resultUdf.set('classname', classname);
+                resultUdf.set('fileResource', data.fileResource.id);
+                resultUdf.save();
+                self.set('expandedEdit', false);
+              });
+            }, (error) => {
+              console.log("Error encountered", error);
+            });
+        }
       }
-
       this.set('isAddingNewFileResource', false);
-
     },
 
     showRemoveUdfModal(udfId){
@@ -117,16 +166,7 @@ export default Ember.Component.extend({
     },
 
     removeUdf(){
-      let self = this;
-      this.get('store').find('udf', this.get('udfId')).then(function(resultUdf) {
-        resultUdf.destroyRecord().then(function() {
-          self.send('cancelUdf');
-          self.sendAction('refreshUdfList');
-        }, function(response) {
-          console.log('UDF NOT deleted', response);
-        });
-        return false;
-      });
+      this.sendAction('removeUdf', this.get('udfId') );
     },
 
     cancelUdf(){
@@ -144,10 +184,22 @@ export default Ember.Component.extend({
     },
 
     setFileResource(fileResourceId){
-      let localSelectedFileResource = this.get('fileResourceList').filterBy('id', fileResourceId);
-      this.set('selectedFileResource',localSelectedFileResource[0]);
-    }
+      this.get('store').findAll('file-resource').then((data) => {
+        let fileResourceList = [];
+        data.forEach(x => {
+          let localFileResource = {'id': x.get('id'),
+            'name': x.get('name'),
+            'path': x.get('path'),
+            'owner': x.get('owner')
+          };
+          fileResourceList.push(localFileResource);
+        });
+
+        let localSelectedFileResource =  fileResourceList.filterBy('id', fileResourceId);
+        this.set('selectedFileResource',localSelectedFileResource.get('firstObject'));
+      });
 
+    }
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index 80116da..6b395ac 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -522,7 +522,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       Ember.run.later(() => {
 
       if(this.get('controller.model').get('isQueryDirty')) {
-        this.get('controller.model').set('tabDataToClose', {index:index, id:id})
+        this.get('controller.model').set('tabDataToClose', {index:index, id:id});
         this.send('openWorksheetModal');
       } else {
          this.send('closeWorksheet', index, id);
@@ -627,7 +627,7 @@ export default Ember.Route.extend(UILoggerMixin, {
     closeWorksheetModal(){
       this.get('controller').set('showWorksheetModal', false);
       this.closeWorksheetAfterSave();
-      this.get('controller.model').set('tabDataToClose', null)
+      this.get('controller.model').set('tabDataToClose', null);
   },
 
     expandQueryEdidorPanel(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
index 138e85f..5733d5c 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js
@@ -19,6 +19,9 @@
 import Ember from 'ember';
 
 export default Ember.Route.extend({
+
+  showDeleteUdfModal: false,
+
   model() {
     return this.store.findAll('udf').then(udfs => udfs.toArray());
   },
@@ -48,7 +51,6 @@ export default Ember.Route.extend({
   actions:{
 
     refreshUdfList(){
-
       this.get('store').findAll('udf').then((data) => {
         let udfList = [];
         data.forEach(x => {
@@ -65,8 +67,20 @@ export default Ember.Route.extend({
         this.controllerFor('udfs').set('udflist',udfList);
         this.transitionTo('udfs');
       });
+    },
 
-    }
+    removeUdf(udfId){
+      var self = this;
+      let record = this.get('store').peekRecord('udf', udfId );
+      if(record){
+        record.destroyRecord().then(function(){
+          self.send('cancelUdf');
+          self.send('refreshUdfList');
+        })}
+    },
 
+    cancelUdf(){
+      this.set('showDeleteUdfModal', false);
+    }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
index 84733e8..6207b77 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js
@@ -25,6 +25,26 @@ export default Ember.Route.extend(UILoggerMixin, {
 
   },
 
+  validateUDF(udfName, udfClassName){
+    if (Ember.isEmpty(udfName)) {
+      this.get('logger').danger('UDF Name can not be empty.');
+      return false;
+    }
+    if (Ember.isEmpty(udfClassName)) {
+      this.get('logger').danger('UDF Class Name can not be empty.');
+      return false;
+    }
+    return true;
+  },
+
+  validateFileResource(resourceName, resourcePath){
+    if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) {
+      this.get('logger').danger('File Resource can not be empty.');
+      return false;
+    }
+    return true;
+  },
+
   udf: Ember.inject.service(),
   store: Ember.inject.service(),
 
@@ -41,7 +61,7 @@ export default Ember.Route.extend(UILoggerMixin, {
                                 };
         fileResourceList.push(localFileResource);
       });
-      fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'})
+      fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'});
       controller.set('fileResourceList', fileResourceList);
 
     });
@@ -60,52 +80,19 @@ export default Ember.Route.extend(UILoggerMixin, {
       this.get('controller').set('udfName', udfName);
       this.get('controller').set('udfClassName', udfClassName);
 
-      if(!Ember.isEmpty( this.get('controller').get('resourceId'))){
 
-        let newUDF = this.get('store').createRecord('udf',
-          {name:udfName,
-           classname:udfClassName,
-           fileResource: this.get('controller').get('resourceId')
-          });
 
 
-        newUDF.save().then((data) => {
-          console.log('udf saved');
-
-          this.get('store').findAll('udf').then((data) => {
-            let udfList = [];
-            data.forEach(x => {
-              let localUdf = {
-                'id': x.get('id'),
-                'name': x.get('name'),
-                'classname': x.get('classname'),
-                'fileResource': x.get('fileResource'),
-                'owner': x.get('owner')
-              };
-              udfList.pushObject(localUdf);
-            });
-
-            this.controllerFor('udfs').set('udflist',udfList);
-            this.transitionTo('udfs');
-          })
+      if(!Ember.isEmpty( this.get('controller').get('resourceId'))){
 
-        });
+        if (this.validateUDF(udfName, udfClassName)) {
 
-      } else {
-
-        let resourcePayload = {"name":resourceName,"path":resourcePath};
-
-        var newFileResource = this.get('store').createRecord('file-resource',
-          {name:resourceName,
-            path:resourcePath
-          });
 
-        newFileResource.save().then((data) => {
-          console.log('fileResource is', data.get('id'));
           let newUDF = this.get('store').createRecord('udf',
-            {name:udfName,
-              classname:udfClassName,
-              fileResource: data.get('id')
+            {
+              name: udfName,
+              classname: udfClassName,
+              fileResource: this.get('controller').get('resourceId')
             });
 
           newUDF.save().then((data) => {
@@ -124,20 +111,66 @@ export default Ember.Route.extend(UILoggerMixin, {
                 udfList.pushObject(localUdf);
               });
 
-              this.controllerFor('udfs').set('udflist',udfList);
+              this.controllerFor('udfs').set('udflist', udfList);
               this.transitionTo('udfs');
-            })
-          })
-          .catch((error) => {
-            this.get('logger').danger('Failed to create UDF.', this.extractError(error));
-            this.transitionTo('udfs');
+            });
 
           });
-        })
-        .catch((error) => {
-          this.get('logger').danger('Failed to create File Resource.', this.extractError(error));
-          this.transitionTo('udfs');
-        });
+
+        }
+
+      } else {
+
+        let resourcePayload = {"name":resourceName,"path":resourcePath};
+
+        var newFileResource = this.get('store').createRecord('file-resource',
+          {name:resourceName,
+            path:resourcePath
+          });
+
+
+        if (this.validateFileResource(resourceName, resourcePath) && this.validateUDF(udfName, udfClassName)) {
+
+          newFileResource.save().then((data) => {
+              console.log('fileResource is', data.get('id'));
+              let newUDF = this.get('store').createRecord('udf',
+                {name:udfName,
+                  classname:udfClassName,
+                  fileResource: data.get('id')
+                });
+
+              newUDF.save().then((data) => {
+                  console.log('udf saved');
+
+                  this.get('store').findAll('udf').then((data) => {
+                    let udfList = [];
+                    data.forEach(x => {
+                      let localUdf = {
+                        'id': x.get('id'),
+                        'name': x.get('name'),
+                        'classname': x.get('classname'),
+                        'fileResource': x.get('fileResource'),
+                        'owner': x.get('owner')
+                      };
+                      udfList.pushObject(localUdf);
+                    });
+
+                    this.controllerFor('udfs').set('udflist',udfList);
+                    this.transitionTo('udfs');
+                  });
+                })
+                .catch((error) => {
+                  this.get('logger').danger('Failed to create UDF.', this.extractError(error));
+                  this.transitionTo('udfs');
+
+                });
+            })
+            .catch((error) => {
+              this.get('logger').danger('Failed to create File Resource.', this.extractError(error));
+              this.transitionTo('udfs');
+            });
+
+        }
 
       }
     },
@@ -153,10 +186,11 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     handleFileResourceChange(filter){
       console.log('filter', filter);
-      if(filter.action == "addNewFileResource"){
+      if(filter.action === "addNewFileResource"){
         this.get('controller').set('isAddingNewFileResource', true);
         this.get('controller').set('resourceName','');
         this.get('controller').set('resourcePath','');
+        this.get('controller').set('resourceId', null);
         this.get('controller').set('selectedFileResource',null);
 
       }else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
index 2e8ec62..b3276e7 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js
@@ -50,7 +50,7 @@ export default Ember.Service.extend({
       databaseRefreshStartingCallback();
       let oldDatabases = this.get('store').peekAll('database').mapBy('name');
       this.get('store').query('database', {}).then((data) => {
-        let deletedDbCount = 0
+        let deletedDbCount = 0;
         let newDatabases = data.mapBy('name');
         oldDatabases.forEach((oldDB) => {
           if (!newDatabases.contains(oldDB)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
index fec48fb..929b91a 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs
@@ -39,19 +39,19 @@
 
 {{#if expandedEdit}}
   {{udf-edit
-  udfid=udf.id
-  name=udf.name
-  classname=udf.classname
-  owner=udf.owner
-  fileResource=udf.fileResource
-  udfFileResourceName=udfFileResourceName
-  udfFileResourcePath=udfFileResourcePath
-  fileResourceList=fileResourceList
-  selectedFileResource=selectedFileResource
-  isAddingNewFileResource=isAddingNewFileResource
-  handleResourceChange='handleResourceChange'
-  cancelEditUdf='cancelEditUdf'
-  saveUDf='saveUDf'
+    udfid=editUdfId
+    name=editUdfName
+    classname=editUdfClassName
+    owner=editOwner
+    fileResource=editFileResource
+    udfFileResourceName=udfFileResourceName
+    udfFileResourcePath=udfFileResourcePath
+    fileResourceList=fileResourceList
+    selectedFileResource=selectedFileResource
+    isAddingNewFileResource=isAddingNewFileResource
+    handleResourceChange='handleResourceChange'
+    cancelEditUdf='cancelEditUdf'
+    saveUDf='saveUDf'
   }}
 {{/if}}
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
index ef6a01c..ffb824e 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs
@@ -35,7 +35,10 @@
           {{udf-item
           udf=udf
           fileResourceList=fileResourceList
+          showDeleteUdfModal=showDeleteUdfModal
           refreshUdfList='refreshUdfList'
+          removeUdf='removeUdf'
+          cancelUdf='cancelUdf'
           }}
         {{/each}}
       </tbody>


[19/50] [abbrv] ambari git commit: AMBARI-20335. Kerberos identity reference not working for ranger-audit property in hbase (rlevas)

Posted by ol...@apache.org.
AMBARI-20335. Kerberos identity reference not working for ranger-audit property in hbase (rlevas)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 225edb97f91428be6426f50b794ba051df2bb65e
Parents: 4df38c3
Author: Robert Levas <rl...@hortonworks.com>
Authored: Tue Mar 7 10:03:12 2017 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Tue Mar 7 10:03:12 2017 -0500

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog250.java       |  57 ++++---
 .../stacks/HDP/2.5/services/HBASE/kerberos.json |   3 +-
 .../PERF/1.0/services/FAKEHBASE/kerberos.json   |   3 +-
 .../server/upgrade/UpgradeCatalog250Test.java   |  71 ++++++---
 ...test_kerberos_descriptor_2_5_infra_solr.json | 148 ++++++++++++++++++-
 5 files changed, 238 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/225edb97/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 0246229..e244925 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
@@ -469,6 +469,7 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
           addInfrSolrDescriptor(artifactDAO, artifactEntity, kerberosDescriptor, logSearchKerberosDescriptor, "LOGSEARCH_SERVER");
           addInfrSolrDescriptor(artifactDAO, artifactEntity, kerberosDescriptor, rangerKerberosDescriptor, "RANGER_ADMIN");
           KerberosServiceDescriptor stormKerberosDescriptor = kerberosDescriptor.getService("STORM");
+
           if (stormKerberosDescriptor != null) {
             KerberosComponentDescriptor componentDescriptor = stormKerberosDescriptor.getComponent("NIMBUS");
             if (componentDescriptor != null) {
@@ -476,27 +477,24 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
               if (origIdentityDescriptor != null) {
                 KerberosPrincipalDescriptor origPrincipalDescriptor = origIdentityDescriptor.getPrincipalDescriptor();
                 KerberosPrincipalDescriptor newPrincipalDescriptor = new KerberosPrincipalDescriptor(
-                  null,
-                  null,
-                  (origPrincipalDescriptor == null) ?
-                    "ranger-storm-audit/xasecure.audit.jaas.Client.option.principal" : origPrincipalDescriptor.getConfiguration(),
-                  null
+                    null,
+                    null,
+                    (origPrincipalDescriptor == null) ?
+                        "ranger-storm-audit/xasecure.audit.jaas.Client.option.principal" : origPrincipalDescriptor.getConfiguration(),
+                    null
                 );
                 KerberosKeytabDescriptor origKeytabDescriptor = origIdentityDescriptor.getKeytabDescriptor();
                 KerberosKeytabDescriptor newKeytabDescriptor = new KerberosKeytabDescriptor(
-                  null,
-                  null,
-                  null,
-                  null,
-                  null,
-                  (origKeytabDescriptor == null) ?
-                    "ranger-storm-audit/xasecure.audit.jaas.Client.option.keyTab" : origKeytabDescriptor.getConfiguration(),
-                  false);
+                    null,
+                    null,
+                    null,
+                    null,
+                    null,
+                    (origKeytabDescriptor == null) ?
+                        "ranger-storm-audit/xasecure.audit.jaas.Client.option.keyTab" : origKeytabDescriptor.getConfiguration(),
+                    false);
                 componentDescriptor.removeIdentity("/STORM/NIMBUS/nimbus_server");
                 componentDescriptor.putIdentity(new KerberosIdentityDescriptor("/STORM/storm_components", null, newPrincipalDescriptor, newKeytabDescriptor, null));
-
-                artifactEntity.setArtifactData(kerberosDescriptor.toMap());
-                artifactDAO.merge(artifactEntity);
               }
             }
           }
@@ -508,11 +506,32 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
               Map<String, String> properties = yarnSiteConfigDescriptor.getProperties();
               if (properties != null && properties.containsKey(YARN_LCE_CGROUPS_MOUNT_PATH)) {
                 properties.remove(YARN_LCE_CGROUPS_MOUNT_PATH);
-                artifactEntity.setArtifactData(kerberosDescriptor.toMap());
-                artifactDAO.merge(artifactEntity);
               }
             }
           }
+
+          // Fix HBASE_MASTER Kerberos identity for Ranger audit by clearing out any keytab file or principal name values.
+          KerberosServiceDescriptor hbaseKerberosDescriptor = kerberosDescriptor.getService("HBASE");
+          if (hbaseKerberosDescriptor != null) {
+            KerberosComponentDescriptor hbaseMasterKerberosDescriptor = hbaseKerberosDescriptor.getComponent("HBASE_MASTER");
+            if (hbaseMasterKerberosDescriptor != null) {
+              KerberosIdentityDescriptor identityDescriptor = hbaseMasterKerberosDescriptor.getIdentity("/HBASE/HBASE_MASTER/hbase_master_hbase");
+
+              if (identityDescriptor != null) {
+                KerberosPrincipalDescriptor principalDescriptor = identityDescriptor.getPrincipalDescriptor();
+                KerberosKeytabDescriptor keytabDescriptor = identityDescriptor.getKeytabDescriptor();
+
+                identityDescriptor.setReference(identityDescriptor.getName());
+                identityDescriptor.setName("ranger_hbase_audit");
+
+                principalDescriptor.setValue(null);
+                keytabDescriptor.setFile(null);
+              }
+            }
+          }
+
+          artifactEntity.setArtifactData(kerberosDescriptor.toMap());
+          artifactDAO.merge(artifactEntity);
         }
       }
     }
@@ -532,8 +551,6 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
         } else {
           Predicate predicate = ContainsPredicate.fromMap(Collections.<String, Object>singletonMap(ContainsPredicate.NAME, Arrays.asList("services", "AMBARI_INFRA")));
           componentDescriptor.putIdentity(new KerberosIdentityDescriptor("/AMBARI_INFRA/INFRA_SOLR/infra-solr",null, null, null, predicate));
-          artifactEntity.setArtifactData(kerberosDescriptor.toMap());
-          artifactDAO.merge(artifactEntity);
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/225edb97/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
index f510770..011921b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
@@ -93,7 +93,8 @@
               }
             },
             {
-              "name": "/HBASE/HBASE_MASTER/hbase_master_hbase",
+              "name" : "ranger_hbase_audit",
+              "reference": "/HBASE/HBASE_MASTER/hbase_master_hbase",
               "principal": {
                 "configuration": "ranger-hbase-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/225edb97/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
index b053779..f1026f1 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
@@ -93,7 +93,8 @@
               }
             },
             {
-              "name": "/FAKEHBASE/FAKEHBASE_MASTER/hbase_master_hbase",
+              "name": "ranger_hbase_audit",
+              "reference": "/FAKEHBASE/FAKEHBASE_MASTER/hbase_master_hbase",
               "principal": {
                 "configuration": "ranger-hbase-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/225edb97/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 ad01e07..3dfc32f 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
@@ -56,8 +56,13 @@ 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.Service;
+import org.apache.ambari.server.state.kerberos.AbstractKerberosDescriptorContainer;
+import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
+import org.apache.ambari.server.state.kerberos.KerberosIdentityDescriptor;
+import org.apache.ambari.server.state.kerberos.KerberosKeytabDescriptor;
+import org.apache.ambari.server.state.kerberos.KerberosPrincipalDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.easymock.Capture;
@@ -1682,34 +1687,34 @@ public class UpgradeCatalog250Test {
 
     Capture<Map<String, Object>> updateData = Capture.newInstance(CaptureType.ALL);
     artifactEntity.setArtifactData(capture(updateData));
-    expectLastCall().times(4);
+    expectLastCall().times(1);
 
     ArtifactDAO artifactDAO = createNiceMock(ArtifactDAO.class);
-    expect(artifactDAO.merge(anyObject(ArtifactEntity.class))).andReturn(artifactEntity).times(4);
+    expect(artifactDAO.merge(anyObject(ArtifactEntity.class))).andReturn(artifactEntity).times(1);
 
     replay(artifactEntity, artifactDAO, upgradeMock);
     upgradeMock.updateKerberosDescriptorArtifact(artifactDAO, artifactEntity);
     verify(artifactEntity, artifactDAO, upgradeMock);
 
-    KerberosDescriptor atlasKerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(updateData.getValues().get(0));
-    KerberosDescriptor rangerKerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(updateData.getValues().get(1));
-    KerberosDescriptor stormKerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(updateData.getValues().get(2));
-    KerberosDescriptor yarnKerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(updateData.getValues().get(3));
-
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getIdentity("spnego"));
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getService("LOGSEARCH"));
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getService("LOGSEARCH").getComponent("LOGSEARCH_SERVER"));
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getService("LOGSEARCH").getComponent("LOGSEARCH_SERVER").getIdentity("/AMBARI_INFRA/INFRA_SOLR/infra-solr"));
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getService("ATLAS"));
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getService("ATLAS").getComponent("ATLAS_SERVER"));
-    Assert.assertNotNull(atlasKerberosDescriptorUpdated.getService("ATLAS").getComponent("ATLAS_SERVER").getIdentity("/AMBARI_INFRA/INFRA_SOLR/infra-solr"));
-    Assert.assertNotNull(rangerKerberosDescriptorUpdated.getService("RANGER"));
-    Assert.assertNotNull(rangerKerberosDescriptorUpdated.getService("RANGER").getComponent("RANGER_ADMIN"));
-    Assert.assertNotNull(rangerKerberosDescriptorUpdated.getService("RANGER").getComponent("RANGER_ADMIN").getIdentity("/AMBARI_INFRA/INFRA_SOLR/infra-solr"));
-    Assert.assertNotNull(stormKerberosDescriptorUpdated.getService("STORM"));
-    Assert.assertNotNull(stormKerberosDescriptorUpdated.getService("STORM").getComponent("NIMBUS"));
-    Assert.assertNotNull(stormKerberosDescriptorUpdated.getService("STORM").getComponent("NIMBUS").getIdentity("/STORM/storm_components"));
-    Assert.assertFalse(yarnKerberosDescriptorUpdated.getService("YARN").getConfigurations().get("yarn-site").getProperties().containsKey(propertyToRemove));
+    KerberosDescriptor kerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(updateData.getValue());
+
+    getIdentity(kerberosDescriptorUpdated,null, null, "spnego");
+    getIdentity(kerberosDescriptorUpdated,"LOGSEARCH", "LOGSEARCH_SERVER", "/AMBARI_INFRA/INFRA_SOLR/infra-solr");
+    getIdentity(kerberosDescriptorUpdated,"ATLAS", "ATLAS_SERVER", "/AMBARI_INFRA/INFRA_SOLR/infra-solr");
+    getIdentity(kerberosDescriptorUpdated,"RANGER", "RANGER_ADMIN", "/AMBARI_INFRA/INFRA_SOLR/infra-solr");
+    getIdentity(kerberosDescriptorUpdated,"STORM", "NIMBUS", "/STORM/storm_components");
+
+    Assert.assertFalse(kerberosDescriptorUpdated.getService("YARN").getConfigurations().get("yarn-site").getProperties().containsKey(propertyToRemove));
+
+    KerberosIdentityDescriptor rangerHbaseAuditIdentityDescriptor = getIdentity(kerberosDescriptorUpdated,"HBASE", "HBASE_MASTER", "ranger_hbase_audit");
+
+    KerberosPrincipalDescriptor rangerHbaseAuditPrincipalDescriptor = rangerHbaseAuditIdentityDescriptor.getPrincipalDescriptor();
+    Assert.assertNotNull(rangerHbaseAuditPrincipalDescriptor);
+    Assert.assertNull(rangerHbaseAuditPrincipalDescriptor.getValue());
+
+    KerberosKeytabDescriptor rangerHbaseAuditKeytabDescriptor = rangerHbaseAuditIdentityDescriptor.getKeytabDescriptor();
+    Assert.assertNotNull(rangerHbaseAuditKeytabDescriptor);
+    Assert.assertNull(rangerHbaseAuditKeytabDescriptor.getFile());
   }
 
   @Test
@@ -1936,4 +1941,28 @@ public class UpgradeCatalog250Test {
       }
     });
   }
+
+  private KerberosIdentityDescriptor getIdentity(KerberosDescriptor kerberosDescriptor, String serviceName, String componentName, String identityName) {
+    KerberosIdentityDescriptor identityDescriptor = null;
+    AbstractKerberosDescriptorContainer container = kerberosDescriptor;
+
+    if(serviceName != null) {
+      KerberosServiceDescriptor serviceDescriptor = kerberosDescriptor.getService(serviceName);
+      Assert.assertNotNull(serviceDescriptor);
+      container = serviceDescriptor;
+
+      if(componentName != null) {
+        KerberosComponentDescriptor componentDescriptor = serviceDescriptor.getComponent(componentName);
+        Assert.assertNotNull(componentDescriptor);
+        container = componentDescriptor;
+      }
+    }
+
+    if(identityName != null) {
+      identityDescriptor = container.getIdentity(identityName);
+      Assert.assertNotNull(identityDescriptor);
+    }
+
+    return identityDescriptor;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/225edb97/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_2_5_infra_solr.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_2_5_infra_solr.json b/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_2_5_infra_solr.json
index 0c2723e..de12baf 100644
--- a/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_2_5_infra_solr.json
+++ b/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_2_5_infra_solr.json
@@ -71,6 +71,153 @@
       ]
     },
     {
+      "components": [
+        {
+          "identities": [
+            {
+              "keytab": {
+                "configuration": "ranger-hbase-audit/xasecure.audit.jaas.Client.option.keyTab",
+                "file": "${keytab_dir}/ams-hbase.master.keytab"
+              },
+              "name": "/HBASE/HBASE_MASTER/hbase_master_hbase",
+              "principal": {
+                "configuration": "ranger-hbase-audit/xasecure.audit.jaas.Client.option.principal",
+                "local_username": null,
+                "type": null,
+                "value": "amshbase/_HOST@${realm}"
+              }
+            },
+            {
+              "name": "/HDFS/NAMENODE/hdfs"
+            },
+            {
+              "keytab": {
+                "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.keytab",
+                "file": "${keytab_dir}/spnego.service.keytab"
+              },
+              "name": "/spnego",
+              "principal": {
+                "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal",
+                "local_username": null,
+                "type": null,
+                "value": "HTTP/_HOST@${realm}"
+              }
+            },
+            {
+              "keytab": {
+                "configuration": "hbase-site/hbase.master.keytab.file",
+                "file": "${keytab_dir}/hbase.service.keytab",
+                "group": {
+                  "access": "",
+                  "name": "${cluster-env/user_group}"
+                },
+                "owner": {
+                  "access": "r",
+                  "name": "${hbase-env/hbase_user}"
+                }
+              },
+              "name": "hbase_master_hbase",
+              "principal": {
+                "configuration": "hbase-site/hbase.master.kerberos.principal",
+                "local_username": "${hbase-env/hbase_user}",
+                "type": "service",
+                "value": "hbase/_HOST@${realm}"
+              }
+            }
+          ],
+          "name": "HBASE_MASTER"
+        },
+        {
+          "identities": [
+            {
+              "keytab": {
+                "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.keytab",
+                "file": "${keytab_dir}/spnego.service.keytab"
+              },
+              "name": "/spnego",
+              "principal": {
+                "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal",
+                "local_username": null,
+                "type": null,
+                "value": "HTTP/_HOST@${realm}"
+              }
+            },
+            {
+              "keytab": {
+                "configuration": "hbase-site/hbase.regionserver.keytab.file",
+                "file": "${keytab_dir}/hbase.service.keytab",
+                "group": {
+                  "access": "",
+                  "name": "${cluster-env/user_group}"
+                },
+                "owner": {
+                  "access": "r",
+                  "name": "${hbase-env/hbase_user}"
+                }
+              },
+              "name": "hbase_regionserver_hbase",
+              "principal": {
+                "configuration": "hbase-site/hbase.regionserver.kerberos.principal",
+                "local_username": "${hbase-env/hbase_user}",
+                "type": "service",
+                "value": "hbase/_HOST@${realm}"
+              }
+            }
+          ],
+          "name": "HBASE_REGIONSERVER"
+        },
+        {
+          "identities": [
+            {
+              "keytab": {
+                "configuration": "hbase-site/phoenix.queryserver.keytab.file",
+                "file": null
+              },
+              "name": "phoenix_spnego",
+              "principal": {
+                "configuration": "hbase-site/phoenix.queryserver.kerberos.principal",
+                "local_username": null,
+                "type": null,
+                "value": null
+              },
+              "reference": "/spnego"
+            }
+          ],
+          "name": "PHOENIX_QUERY_SERVER"
+        }
+      ],
+      "identities": [
+        {
+          "name": "/smokeuser"
+        },
+        {
+          "name": "/spnego"
+        },
+        {
+          "keytab": {
+            "configuration": "hbase-env/hbase_user_keytab",
+            "file": "${keytab_dir}/hbase.headless.keytab",
+            "group": {
+              "access": "r",
+              "name": "${cluster-env/user_group}"
+            },
+            "owner": {
+              "access": "r",
+              "name": "${hbase-env/hbase_user}"
+            }
+          },
+          "name": "hbase",
+          "principal": {
+            "configuration": "hbase-env/hbase_principal_name",
+            "local_username": "${hbase-env/hbase_user}",
+            "type": "user",
+            "value": "${hbase-env/hbase_user}-${cluster_name|toLower()}@${realm}"
+          }
+        }
+      ],
+      "name": "HBASE"
+    },
+    {
       "name": "LOGSEARCH",
       "identities": [
         {
@@ -114,7 +261,6 @@
         }
       ]
     },
-    ,
     {
       "components": [
         {


[27/50] [abbrv] ambari git commit: AMBARI-20355 : WFM view : Import/Export asset label changes(Venkata Sairam via nitirajrathore)

Posted by ol...@apache.org.
AMBARI-20355 : WFM view : Import/Export asset label changes(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/f66a663a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f66a663a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f66a663a

Branch: refs/heads/branch-dev-logsearch
Commit: f66a663ad9722d808a1b656939fab9a7ae269d17
Parents: cb1ba69
Author: Nitiraj Singh Rathore <ni...@gmail.com>
Authored: Wed Mar 8 14:54:39 2017 +0530
Committer: Nitiraj Singh Rathore <ni...@gmail.com>
Committed: Wed Mar 8 14:56:09 2017 +0530

----------------------------------------------------------------------
 .../ui/app/templates/components/flow-designer.hbs       | 12 ++++++------
 .../ui/app/templates/components/workflow-actions.hbs    |  4 ++--
 2 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f66a663a/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 b5c3807..f4d3876 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
@@ -37,8 +37,8 @@
               <span class="caret"></span></button>
               <ul class="dropdown-menu">
                 <li>
-                  <a class="pointer" title="Import workflow from HDFS" {{action "showFileBrowser"}}>
-                      <i class="fa fa-download marginright5"></i>Import from HDFS
+                  <a class="pointer" title="Import Workflow from Shared File System" {{action "showFileBrowser"}}>
+                      <i class="fa fa-download marginright5"></i>Import from Shared File System
                   </a>
                   <a class="pointer" title="Import workflow from Local File System">
                     {{#file-picker fileLoaded="fileLoaded" preview=false}}
@@ -231,16 +231,16 @@
                 {{/file-picker}}
               </div>
             </span>
-            <span class="overlay-asset-import-icon" title="Import Asset" {{action "showAssetList" true}}>
+            <span class="overlay-asset-import-icon" title="Import Asset from Local Ambari Database" {{action "showAssetList" true}}>
                 <i class="fa fa-download"></i>
             </span>
-            <span class="overlay-hdfs-asset-import-icon" title="Import asset from HDFS" {{action "showActionSettingsFileBrowser"}}>
+            <span class="overlay-hdfs-asset-import-icon" title="Import Asset from Shared File System" {{action "showActionSettingsFileBrowser"}}>
               <i class="fa fa-cloud-download"></i>
             </span>
-            <span class="overlay-asset-export-icon" title="Publish Asset" {{action "showAssetConfig" true}}>
+            <span class="overlay-asset-export-icon" title="Save Asset to Local Ambari Database" {{action "showAssetConfig" true}}>
                 <i class="fa fa-upload"></i>
             </span>
-            <span class="overlay-hdfs-asset-export-icon" title="Publish Asset to HDFS" {{action "showExportActionNodeFileBrowser"}}>
+            <span class="overlay-hdfs-asset-export-icon" title="Save Asset to Shared File System" {{action "showExportActionNodeFileBrowser"}}>
               <i class="fa fa-cloud-upload"></i>
             </span>
           </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f66a663a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-actions.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-actions.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-actions.hbs
index 75ec872..8907fdd 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-actions.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/workflow-actions.hbs
@@ -35,8 +35,8 @@
            </span>
         </div>
       {{/if}}
-      <div {{action 'showAssetNodeList'}} class="btn asset-import-btn margin3"> <i class="fa fa-download"></i> <span class="font10px">Import asset</span></div>
-      <div {{action 'showImportActionNodeFileBrowser'}} class="btn asset-import-btn margin3"> <i class="fa fa-cloud-download"></i> <span class="font10px">Import asset from HDFS</span></div>
+      <div {{action 'showAssetNodeList'}} class="btn asset-import-btn margin3"> <i class="fa fa-download"></i> <span class="font10px">Import Asset from Local Ambari Database</span></div>
+      <div {{action 'showImportActionNodeFileBrowser'}} class="btn asset-import-btn margin3"> <i class="fa fa-cloud-download"></i> <span class="font10px">Import Asset from Shared File System</span></div>
       <div class="clearfix"></div>
       <ul class="actions_list_left actionNodes">
           <li {{action 'addAction' 'hive'}} class="dr_action enabled" data-name="Hive" data-type="hive"> <i class="fa fa-server"></i> Hive </li>


[10/50] [abbrv] ambari git commit: AMBARI-20308 - Atlas service check fails during EU on wire encrypted cluster (jonathanhurley)

Posted by ol...@apache.org.
AMBARI-20308 - Atlas service check fails during EU on wire encrypted cluster (jonathanhurley)


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

Branch: refs/heads/branch-dev-logsearch
Commit: d8901e26c3f5cf45011d700cb44d73ea67c86d20
Parents: e895659
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri Mar 3 13:00:58 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Mar 6 12:42:26 2017 -0500

----------------------------------------------------------------------
 .../configuration/application-properties.xml    | 42 ++++++++++++++++++++
 .../stacks/HDP/2.5/upgrades/config-upgrade.xml  | 12 ++++++
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml | 16 +++++---
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml |  6 +++
 .../stacks/HDP/2.5/upgrades/upgrade-2.5.xml     |  6 +++
 .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml     |  1 +
 .../configuration/application-properties.xml    |  3 +-
 7 files changed, 79 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
new file mode 100644
index 0000000..366ecf6
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ATLAS/configuration/application-properties.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+<!--
+/**
+ * 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="false">
+
+  <!-- Supported in HDP 2.5.4 -->
+  <property>
+    <name>atlas.ssl.exclude.protocols</name>
+    <display-name>Excluded Wire Encryption Protocols</display-name>
+    <value>TLSv1.2</value>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <description>A comma-separate list of the wire encryption protocols to exclude when TLS is enabled. Some versions of cURL do not work with TLSv1.2.</description>
+    <used-by>
+      <property>
+        <type>application-properties</type>
+        <name>atlas.enableTLS</name>
+      </property>
+    </used-by>
+    <on-ambari-upgrade add="false"/>
+  </property>
+
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
index 93e0149..37f2a82 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
@@ -136,6 +136,18 @@
         </changes>
       </component>
     </service>
+
+    <service name="ATLAS">
+      <component name="ATLAS_SERVER">
+        <changes>          
+          <definition xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol" summary="Excluding TLS v1.2 Protocol">
+            <type>application-properties</type>
+            <set key="atlas.ssl.exclude.protocols" value="TLSv1.2" if-type="application-properties" if-key="atlas.ssl.exclude.protocols" if-key-state="absent"/>
+          </definition>          
+        </changes>
+      </component>
+    </service>
+
    <service name="OOZIE">
     <component name="OOZIE_SERVER">
       <changes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
index 5b37375..e7ada04 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml
@@ -75,7 +75,7 @@
       <service name="FLUME">
         <component>FLUME_HANDLER</component>
       </service>
-      
+
       <service name="ACCUMULO">
         <component>ACCUMULO_TRACER</component>
         <component>ACCUMULO_GC</component>
@@ -300,6 +300,12 @@
       <execute-stage service="STORM" component="NIMBUS" title="Apply config changes for Nimbus">
         <task xsi:type="configure" id="increase_storm_zookeeper_timeouts"/>
       </execute-stage>
+      
+      <execute-stage service="ATLAS" component="ATLAS_SERVER" title="Updating Atlas TLS Exclude Protocols">
+        <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol">
+          <summary>Updating Atlas TLS Exclude Protocols to exclude TLS v1.2</summary>
+        </task>
+      </execute-stage>
     </group>
 
     <!--
@@ -329,7 +335,7 @@
         </task>
       </execute-stage>
     </group>
-    
+
     <!-- Now, restart all of the services. -->
     <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper">
       <service-check>false</service-check>
@@ -671,7 +677,7 @@
         <component>FLUME_HANDLER</component>
       </service>
     </group>
-    
+
     <group xsi:type="restart" name="ACCUMULO" title="Accumulo">
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -700,7 +706,7 @@
 
     <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
       <direction>UPGRADE</direction>
-      
+
       <execute-stage title="Check Component Versions">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
       </execute-stage>
@@ -770,7 +776,7 @@
             <function>setup_ranger_java_patches</function>
           </task>
         </pre-upgrade>
-        
+
         <pre-downgrade copy-upgrade="true" />
 
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
index 55e8924..fe297c3 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
@@ -431,6 +431,12 @@
           <summary>Updating the Atlas Log4J properties to include parameterizations</summary>
         </task>
       </execute-stage>
+      
+      <execute-stage service="ATLAS" component="ATLAS_SERVER" title="Updating Atlas TLS Exclude Protocols">
+        <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol">
+          <summary>Updating Atlas TLS Exclude Protocols to exclude TLS v1.2</summary>
+        </task>
+      </execute-stage>
 
       <!--KAFKA-->
       <execute-stage service="KAFKA" component="KAFKA_BROKER" title="Parameterizing Kafka Log4J Properties">

http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
index 15e5536..a030adb 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml
@@ -934,6 +934,12 @@
 
     <service name="ATLAS">
       <component name="ATLAS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol"/>
+        </pre-upgrade>
+        
+        <pre-downgrade/>
+
         <upgrade>
           <task xsi:type="restart-task"/>
         </upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
index 0c0b08e..97313b5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
@@ -1066,6 +1066,7 @@
       <component name="ATLAS_SERVER">
         <pre-upgrade>
           <task xsi:type="configure" id="atlas_log4j_parameterize" />
+          <task xsi:type="configure" id="hdp_2_5_4_0_atlas_exclude_tls_protocol"/>
         </pre-upgrade>
         <pre-downgrade />
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d8901e26/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
index 47e1fb5..91de1b0 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/configuration/application-properties.xml
@@ -60,7 +60,7 @@
     <on-ambari-upgrade add="true"/>
   </property>
 
-    <property>
+  <property>
     <name>atlas.sso.knox.browser.useragent</name>
     <value/>
     <description/>
@@ -92,5 +92,4 @@
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
-
 </configuration>


[07/50] [abbrv] ambari git commit: AMBARI-20304. Services shows as Restart required after upgrading from Ambari-2.4.x to 2.5.0. (dlysnichenko)

Posted by ol...@apache.org.
AMBARI-20304. Services shows as Restart required after upgrading from Ambari-2.4.x to 2.5.0. (dlysnichenko)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 84e767ba0064029ed323d193625b165e0cf621dd
Parents: b9d1996
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Mon Mar 6 18:58:35 2017 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Mon Mar 6 18:58:35 2017 +0200

----------------------------------------------------------------------
 .../common-services/FALCON/0.5.0.2.1/configuration/falcon-env.xml  | 2 +-
 .../common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml     | 2 +-
 .../common-services/SQOOP/1.4.4.2.0/configuration/sqoop-env.xml    | 2 +-
 .../common-services/STORM/0.10.0/configuration/storm-env.xml       | 2 +-
 .../common-services/YARN/2.1.0.2.0/configuration/yarn-site.xml     | 2 +-
 .../stacks/BIGTOP/0.8/services/YARN/configuration/yarn-site.xml    | 2 +-
 .../HDP/2.0.6.GlusterFS/services/YARN/configuration/yarn-site.xml  | 2 +-
 .../HDP/2.1.GlusterFS/services/YARN/configuration/yarn-site.xml    | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/configuration/falcon-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/configuration/falcon-env.xml b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/configuration/falcon-env.xml
index 5663f57..f45199f 100644
--- a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/configuration/falcon-env.xml
+++ b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/configuration/falcon-env.xml
@@ -29,7 +29,7 @@
       <type>boolean</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
     <depends-on>
       <property>
         <type>application-properties</type>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
index 1213580..be79331 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
@@ -29,7 +29,7 @@
       <type>boolean</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
     <depends-on>
       <property>
         <type>application-properties</type>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-env.xml b/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-env.xml
index 508cfab..d9d548d 100644
--- a/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-env.xml
+++ b/ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/configuration/sqoop-env.xml
@@ -30,7 +30,7 @@
       <type>boolean</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
     <depends-on>
       <property>
         <type>application-properties</type>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/common-services/STORM/0.10.0/configuration/storm-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.10.0/configuration/storm-env.xml b/ambari-server/src/main/resources/common-services/STORM/0.10.0/configuration/storm-env.xml
index 3b814a9..1145ec7 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.10.0/configuration/storm-env.xml
+++ b/ambari-server/src/main/resources/common-services/STORM/0.10.0/configuration/storm-env.xml
@@ -29,7 +29,7 @@
       <type>boolean</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
     <depends-on>
       <property>
         <type>application-properties</type>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/configuration/yarn-site.xml b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/configuration/yarn-site.xml
index 2810a23..d0d0ede 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/configuration/yarn-site.xml
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/configuration/yarn-site.xml
@@ -265,7 +265,7 @@
       Time in seconds to retain user logs. Only applicable if
       log aggregation is disabled.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.log-aggregation-enable</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/YARN/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/YARN/configuration/yarn-site.xml b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/YARN/configuration/yarn-site.xml
index 7053473..8e9b8b1 100644
--- a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/YARN/configuration/yarn-site.xml
+++ b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/YARN/configuration/yarn-site.xml
@@ -204,7 +204,7 @@
       Time in seconds to retain user logs. Only applicable if
       log aggregation is disabled.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.log-aggregation-enable</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/stacks/HDP/2.0.6.GlusterFS/services/YARN/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6.GlusterFS/services/YARN/configuration/yarn-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.6.GlusterFS/services/YARN/configuration/yarn-site.xml
index 26aac90..93a35cd 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6.GlusterFS/services/YARN/configuration/yarn-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6.GlusterFS/services/YARN/configuration/yarn-site.xml
@@ -204,7 +204,7 @@
       Time in seconds to retain user logs. Only applicable if
       log aggregation is disabled.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.log-aggregation-enable</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/84e767ba/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/YARN/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/YARN/configuration/yarn-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/YARN/configuration/yarn-site.xml
index 26aac90..93a35cd 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/YARN/configuration/yarn-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.GlusterFS/services/YARN/configuration/yarn-site.xml
@@ -204,7 +204,7 @@
       Time in seconds to retain user logs. Only applicable if
       log aggregation is disabled.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.log-aggregation-enable</name>


[45/50] [abbrv] ambari git commit: AMBARI-20367: Update Zeppelin version on Ambari-2.5 from 0.6.2 to 0.7.0 (Prabhjyot Singh via r-kamath)

Posted by ol...@apache.org.
AMBARI-20367: Update Zeppelin version on Ambari-2.5 from 0.6.2 to 0.7.0 (Prabhjyot Singh via r-kamath)


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

Branch: refs/heads/branch-dev-logsearch
Commit: e1cdfe4492c9bd8d9aa1a4151af5badfd93e6d95
Parents: 4534e0a
Author: Renjith Kamath <re...@gmail.com>
Authored: Thu Mar 9 19:57:06 2017 +0530
Committer: Renjith Kamath <re...@gmail.com>
Committed: Thu Mar 9 19:59:28 2017 +0530

----------------------------------------------------------------------
 .../main/resources/stacks/HDP/2.6/services/ZEPPELIN/metainfo.xml   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e1cdfe44/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/metainfo.xml
index 59a0ae8..2e2996b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/metainfo.xml
@@ -21,7 +21,7 @@
   <services>
     <service>
       <name>ZEPPELIN</name>
-      <version>0.6.2</version>
+      <version>0.7.0</version>
     </service>
   </services>
 </metainfo>


[16/50] [abbrv] ambari git commit: AMBARI-20303. HiveView2.0: Issues in worksheet (Venkata Sairam via pallavkul)

Posted by ol...@apache.org.
AMBARI-20303. HiveView2.0: Issues in worksheet (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/bf25d310
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/bf25d310
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/bf25d310

Branch: refs/heads/branch-dev-logsearch
Commit: bf25d310f6755c50b12a6fafa02fd097c02d9658
Parents: 7f9a512
Author: pallavkul <pa...@gmail.com>
Authored: Tue Mar 7 14:25:58 2017 +0530
Committer: pallavkul <pa...@gmail.com>
Committed: Tue Mar 7 14:27:29 2017 +0530

----------------------------------------------------------------------
 .../main/resources/ui/app/models/worksheet.js   |  1 +
 .../src/main/resources/ui/app/routes/queries.js |  5 +-
 .../main/resources/ui/app/routes/queries/new.js |  9 ++-
 .../resources/ui/app/routes/queries/query.js    | 85 +++++++++++++++++++-
 .../src/main/resources/ui/app/styles/app.scss   |  5 ++
 .../main/resources/ui/app/templates/queries.hbs | 11 ++-
 .../ui/app/templates/queries/query.hbs          | 35 +++++++-
 7 files changed, 140 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/models/worksheet.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/models/worksheet.js b/contrib/views/hive20/src/main/resources/ui/app/models/worksheet.js
index f820ea0..12a681c 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/models/worksheet.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/models/worksheet.js
@@ -38,6 +38,7 @@ export default DS.Model.extend({
   logFile: DS.attr('string', {defaultValue: ""}),
   logResults: DS.attr('string', {defaultValue: ""}),
   isQueryRunning: DS.attr('boolean', {defaultValue: false}),
+  isQueryDirty: DS.attr('boolean', {defaultValue: false}),
   isQueryResultContainer: DS.attr('boolean', {defaultValue: false}),
   visualExplainJson: DS.attr({defaultValue: null}),
   lastResultRoute: DS.attr({defaultValue: ""}),

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/routes/queries.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries.js
index 4ef3834..8c7c17c 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries.js
@@ -19,9 +19,12 @@
 import Ember from 'ember';
 
 export default Ember.Route.extend({
-
+  'worksheetCount': 1,
   actions: {
     createNewWorksheet(){
+      let id = this.get('worksheetCount');
+      this.get('controller').set('worksheetCount',parseInt(id)+1);
+      this.set('worksheetCount',parseInt(id)+1);
       this.transitionTo('queries.new');
     }
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
index 7bd2214..b48b8df 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
@@ -21,11 +21,18 @@ import Ember from 'ember';
 export default Ember.Route.extend({
   beforeModel() {
     let existingWorksheets = this.store.peekAll('worksheet');
-    let newWorksheetName = `worksheet${existingWorksheets.get('length') + 1}`;
+    let newWorksheetName = 'worksheet';
+    if(!this.controllerFor("queries").worksheetCount) {
+      newWorksheetName = newWorksheetName + 1;
+    } else {
+      let id = parseInt(this.controllerFor("queries").worksheetCount);
+      newWorksheetName = newWorksheetName + id;
+    }
     let newWorksheetTitle = newWorksheetName.capitalize();
     this.store.createRecord('worksheet', {
       id: newWorksheetName,
       title: newWorksheetTitle,
+      isQueryDirty: false,
       //query: 'select 1;',
       //owner: 'admin',
       selected: true

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index 062f93a..e1ab620 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -80,7 +80,6 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     this._super(...arguments);
     this.get("tezViewInfo").getTezViewInfo();
-
     let self = this, selectedDb;
     let alldatabases = this.store.peekAll('database');
     controller.set('alldatabases',alldatabases);
@@ -127,7 +126,6 @@ export default Ember.Route.extend(UILoggerMixin, {
 
 
     controller.set('worksheet', model);
-
     controller.set('selectedTablesModels',model.get('selectedTablesModels') || selectedTablesModels );
     controller.set('selectedMultiDb', model.get('selectedMultiDb') || selectedMultiDb);
 
@@ -175,6 +173,12 @@ export default Ember.Route.extend(UILoggerMixin, {
       this.get('controller.model').set('selectedDb', null);
     }
   },
+  closeWorksheetAfterSave(){
+    let tabDataToClose = this.get('controller.model').get('tabDataToClose');
+    if(tabDataToClose) {
+      this.send('closeWorksheet', tabDataToClose.index, tabDataToClose.id);
+    }
+  },
   actions: {
 
     resetDefaultWorksheet(){
@@ -230,8 +234,13 @@ export default Ember.Route.extend(UILoggerMixin, {
     },
 
     updateQuery(query){
-      this.get('controller').set('currentQuery', query);
       this.get('controller.model').set('query', query);
+      if(Ember.isBlank(query)){
+        this.get('controller.model').set('isQueryDirty', false);
+      } else if(this.get('controller').get('currentQuery').indexOf(query) !== 0){
+        this.get('controller.model').set('isQueryDirty', true);
+      }
+      this.get('controller').set('currentQuery', query);
     },
 
     executeQuery(isVisualExplainQuery){
@@ -492,8 +501,72 @@ export default Ember.Route.extend(UILoggerMixin, {
         this.transitionTo('queries.query.results', myWs);
       }, 1 * 100);
     },
+    confirmWorksheetClose(index, id) {
+      let existingWorksheets = this.store.peekAll('worksheet');
+      let selectedWorksheet = existingWorksheets.filterBy('id', id.toLowerCase()).get('firstObject');
+      if(selectedWorksheet.get("isQueryDirty")){
+        this.transitionTo('queries.query', id);
+      }
+      Ember.run.later(() => {
+
+      if(this.get('controller.model').get('isQueryDirty')) {
+        this.get('controller.model').set('tabDataToClose', {index:index, id:id})
+        this.send('openWorksheetModal');
+      } else {
+         this.send('closeWorksheet', index, id);
+      }
+      }, 1 * 100);
+    },
+    closeWorksheet(index, id) {
+      let existingWorksheets = this.store.peekAll('worksheet');
+      let selectedWorksheet = existingWorksheets.filterBy('id', id.toLowerCase()).get('firstObject');
+      this.store.unloadRecord(selectedWorksheet);
+      this.controllerFor('queries').set('worksheets', this.store.peekAll('worksheet'));
+      let idToTransition = 0;
+      if(selectedWorksheet.get('selected')) {
+        if(index){
+          idToTransition = existingWorksheets.get('content')[parseInt(index)-1].id;
+        } else {
+          idToTransition = existingWorksheets.get('content')[1].id;
+        }
+        this.transitionTo('queries.query', idToTransition);
+      } else {
+        idToTransition = existingWorksheets.get('content')[existingWorksheets.get('length')-1].id;
+      }
+    },
+    openWorksheetRenameModal(title){
+      let wf = this.store.peekAll('worksheet').filterBy('id', this.paramsFor('queries.query').worksheetId.toLowerCase()).get('firstObject');
+      this.get('controller').set('worksheetTitle', title);
+      this.get('controller').set('showWorksheetRenameModal', true);
+      this.get('controller').set('renameWorksheetModalSuccess', false);
+    },
+    closeRenameWorksheetModal() {
+      this.get('controller').set('showWorksheetRenameModal', false);
+    },
+    renameWorksheetModal(){
+      let wf = this.store.peekAll('worksheet').filterBy('id', this.paramsFor('queries.query').worksheetId.toLowerCase()).get('firstObject');
+      let newTitle = Ember.$('#worksheet-title').val();
+      if(wf) {
+        wf.set('title', newTitle);
+        this.get('controller').set('renameWorksheetModalSuccess', true);
+     } else {
+        this.get('controller').set('renameWorksheetModalFail', true);
+      }
+
+      Ember.run.later(() => {
+        this.get('controller').set('showWorksheetRenameModal', false);
+      }, 2 * 1000);
+    },
 
     openWorksheetModal(){
+      let originalQuery = this.get('controller').get('currentQuery');
+      if(Ember.isBlank(originalQuery)) {
+        this.get('logger').danger('Query cannot be empty.');
+        this.send('resetDefaultWorksheet');
+        return;
+      }
+      let wf = this.store.peekAll('worksheet').filterBy('id', this.paramsFor('queries.query').worksheetId.toLowerCase()).get('firstObject');
+      this.get('controller').set('worksheetTitle', wf.get('title'));
       this.get('controller').set('showWorksheetModal', true);
     },
 
@@ -527,10 +600,12 @@ export default Ember.Route.extend(UILoggerMixin, {
         console.log('saved query saved');
 
         this.get('controller.model').set('title', newTitle);
+        this.get('controller.model').set('isQueryDirty', false);
         this.get('controller').set('worksheetModalSuccess', true);
 
         Ember.run.later(() => {
           this.get('controller').set('showWorksheetModal', false);
+          this.closeWorksheetAfterSave();
         }, 2 * 1000);
 
       });
@@ -539,7 +614,9 @@ export default Ember.Route.extend(UILoggerMixin, {
 
     closeWorksheetModal(){
       this.get('controller').set('showWorksheetModal', false);
-    },
+      this.closeWorksheetAfterSave();
+      this.get('controller.model').set('tabDataToClose', null)
+  },
 
     expandQueryEdidorPanel(){
       if(!this.get('isQueryEdidorPaneExpanded')){

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
index 6b7fc6a..1b18955 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
@@ -953,3 +953,8 @@ rect.operator__box {
   margin-top: auto !important;
   top: 200px !important;
 }
+
+.closeTab {
+  cursor: pointer;
+  padding-left:10px;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
index b8e19da..17b7768 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
@@ -18,9 +18,14 @@
 
 <div class="worksheet-container">
   <ul class="worksheet-nav row nav nav-tabs inverse">
-    {{#each worksheets as |worksheet| }}
-      <li class="{{if worksheet.selected 'active'}}" style="">
-        {{#link-to 'queries.query' worksheet.id  classBinding='worksheet.selected:active'}}{{ worksheet.title }}{{/link-to}}
+    {{#each worksheets as |worksheet index| }}
+      <li class="{{if worksheet.selected 'active'}}" style="" {{action "openWorksheetRenameModal" wf.title on="doubleClick"}}>
+        {{#link-to 'queries.query' worksheet.id  classBinding='worksheet.selected:active' }}{{ worksheet.title }}
+          {{#if worksheet.isQueryDirty}}*{{/if}}
+          {{#if (gt worksheets.length 1)}}
+            <span class="closeTab" {{action "confirmWorksheetClose" index worksheet.id bubbles=false }}>{{fa-icon "times"}}</span>
+          {{/if}}
+        {{/link-to}}
       </li>
     {{/each}}
     <li>

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf25d310/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs
index 8a771eb..989cfc3 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs
@@ -116,7 +116,7 @@
           <div class="form-group">
             <label for="title" class="col-sm-2 control-label">Title</label>
             <div class="col-sm-10">
-              {{input type="text" class="form-control" id="worksheet-title" placeholder="Title" value=worksheet.title }}
+              {{input type="text" class="form-control" id="worksheet-title" placeholder="Title" value=worksheetTitle }}
             </div>
           </div>
           {{#if worksheetModalSuccess }}
@@ -129,7 +129,7 @@
       </div>
 
       <div class="modal-footer">
-        <button type="button" class="btn btn-default" {{action "saveWorksheetModal"}}>{{fa-icon "check"}} Save</button>
+        <button type="button" class="btn btn-default" disabled={{not worksheetTitle}} {{action "saveWorksheetModal"}}>{{fa-icon "check"}} Save</button>
         <button type="button" class="btn btn-default" {{action "closeWorksheetModal"}}>{{fa-icon "close"}}Cancel
         </button>
       </div>
@@ -137,3 +137,34 @@
   {{/modal-dialog}}
 {{/if}}
 
+{{#if showWorksheetRenameModal}}
+  {{#modal-dialog translucentOverlay=true clickOutsideToClose=true container-class="modal-dialog  modal-sm"}}
+    <div class="modal-content">
+      <div class="modal-header">
+        <h4 class="modal-title">Renaming worksheet</h4>
+      </div>
+      <div class="modal-body">
+        <div class="form-horizontal">
+          <div class="form-group">
+            <label for="title" class="col-sm-2 control-label">Title</label>
+            <div class="col-sm-10">
+              {{input type="text" class="form-control" id="worksheet-title" placeholder="Title" value=worksheetTitle }}
+            </div>
+          </div>
+          {{#if renameWorksheetModalSuccess }}
+            <div class="text-success">Renamed successfully.</div>
+          {{/if}}
+          {{#if renameWorksheetModalFail }}
+            <div class="text-danger">Error while renaming.</div>
+          {{/if}}
+        </div>
+      </div>
+
+      <div class="modal-footer">
+        <button type="button" class="btn btn-default" disabled={{not worksheetTitle}} {{action "renameWorksheetModal"}}>{{fa-icon "check"}} Save</button>
+        <button type="button" class="btn btn-default" {{action "closeRenameWorksheetModal"}}>{{fa-icon "close"}}Cancel
+        </button>
+      </div>
+    </div>
+  {{/modal-dialog}}
+{{/if}}


[49/50] [abbrv] ambari git commit: AMBARI-20376. While Moving Namenode via Move Master wizard, datanodes reported as down (alexantonenko)

Posted by ol...@apache.org.
AMBARI-20376. While Moving Namenode via Move Master wizard, datanodes reported as down (alexantonenko)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 221ad2830f1ce3f82508ac92a226f8d4b784fd5c
Parents: 47f9243
Author: Alex Antonenko <hi...@gmail.com>
Authored: Thu Mar 9 14:32:10 2017 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Thu Mar 9 17:12:07 2017 +0200

----------------------------------------------------------------------
 .../controllers/main/service/reassign/step6_controller.js   | 9 +++++++++
 ambari-web/app/messages.js                                  | 1 +
 .../app/mixins/wizard/wizardProgressPageController.js       | 6 +++---
 3 files changed, 13 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/221ad283/ambari-web/app/controllers/main/service/reassign/step6_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/reassign/step6_controller.js b/ambari-web/app/controllers/main/service/reassign/step6_controller.js
index 80f1bf6..05494d4 100644
--- a/ambari-web/app/controllers/main/service/reassign/step6_controller.js
+++ b/ambari-web/app/controllers/main/service/reassign/step6_controller.js
@@ -27,6 +27,7 @@ App.ReassignMasterWizardStep6Controller = App.HighAvailabilityProgressPageContro
     'putHostComponentsInMaintenanceMode',
     'stopHostComponentsInMaintenanceMode',
     'deleteHostComponents',
+    'startDatanodes',
     'startAllServices'
   ],
 
@@ -97,6 +98,9 @@ App.ReassignMasterWizardStep6Controller = App.HighAvailabilityProgressPageContro
     } else {
       this.removeTasks(['stopHostComponentsInMaintenanceMode']);
     }
+    if (!(this.get('content.reassign.component_name') === 'NAMENODE' && App.get('isHaEnabled'))) {
+      this.removeTasks(['startDatanodes']);
+    }
   },
 
   hideRollbackButton: function () {
@@ -200,5 +204,10 @@ App.ReassignMasterWizardStep6Controller = App.HighAvailabilityProgressPageContro
       success: 'startPolling',
       error: 'onTaskError'
     });
+  },
+
+  startDatanodes: function () {
+    this.updateComponent('DATANODE', null, 'HDFS', 'Start');
   }
+
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/221ad283/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 83cc85c..20f7757 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -2396,6 +2396,7 @@ Em.I18n.translations = {
   'services.reassign.step6.tasks.installPxf.title': 'Install PXF on NameNode',
   'services.reassign.step6.tasks.stopMysqlService.title': 'Stop Mysql Server',
   'services.reassign.step6.tasks.stopHostComponentsInMaintenanceMode.title': 'Stop {0}',
+  'services.reassign.step6.tasks.startDatanodes.title': 'Start DataNodes',
   'services.reassign.step6.status.success': 'Successfully moved <b>{0}</b> from <b>{1}</b> host to <b>{2}</b> host.',
   'services.reassign.step6.status.failed': 'Failed to move <b>{0}</b> from <b>{1}</b> host to <b>{2}</b> host.',
   'services.reassign.step6.status.info': 'Reassigning {0}. \nPlease wait for all tasks to be completed.',

http://git-wip-us.apache.org/repos/asf/ambari/blob/221ad283/ambari-web/app/mixins/wizard/wizardProgressPageController.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/wizard/wizardProgressPageController.js b/ambari-web/app/mixins/wizard/wizardProgressPageController.js
index ced5591..9d9d000 100644
--- a/ambari-web/app/mixins/wizard/wizardProgressPageController.js
+++ b/ambari-web/app/mixins/wizard/wizardProgressPageController.js
@@ -604,14 +604,14 @@ App.wizardProgressPageControllerMixin = Em.Mixin.create(App.InstallComponent, {
    * Update component status on selected hosts.
    *
    * @param {string} componentName
-   * @param {(string|string[])} hostName
+   * @param {(string|string[]|null)} hostName - use null to update components on all hosts
    * @param {string} serviceName
    * @param {string} context
    * @param {number} taskNum
    * @returns {$.ajax}
    */
   updateComponent: function (componentName, hostName, serviceName, context, taskNum) {
-    if (!(hostName instanceof Array)) {
+    if (hostName && !(hostName instanceof Array)) {
       hostName = [hostName];
     }
     var state = context.toLowerCase() == "start" ? "STARTED" : "INSTALLED";
@@ -622,7 +622,7 @@ App.wizardProgressPageControllerMixin = Em.Mixin.create(App.InstallComponent, {
         HostRoles: {
           state: state
         },
-        query: 'HostRoles/component_name=' + componentName + '&HostRoles/host_name.in(' + hostName.join(',') + ')&HostRoles/maintenance_state=OFF',
+        query: 'HostRoles/component_name=' + componentName + (hostName ? '&HostRoles/host_name.in(' + hostName.join(',') + ')' : '') + '&HostRoles/maintenance_state=OFF',
         context: context + " " + App.format.role(componentName, false),
         hostName: hostName,
         taskNum: taskNum || 1,


[46/50] [abbrv] ambari git commit: AMBARI-20332. Few ambari agent unit tests are failing (aonishuk)

Posted by ol...@apache.org.
AMBARI-20332. Few ambari agent unit tests are failing (aonishuk)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 95833865c3b2bb006ae44b355a3c597bd2cef3d7
Parents: e1cdfe4
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Thu Mar 9 16:31:01 2017 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Thu Mar 9 16:31:01 2017 +0200

----------------------------------------------------------------------
 .../resource_management/TestDatanodeHelper.py       | 16 ++++++++--------
 .../stacks/2.0.6/YARN/test_yarn_service_check.py    |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/95833865/ambari-agent/src/test/python/resource_management/TestDatanodeHelper.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestDatanodeHelper.py b/ambari-agent/src/test/python/resource_management/TestDatanodeHelper.py
index f22c8e9..071bd05 100644
--- a/ambari-agent/src/test/python/resource_management/TestDatanodeHelper.py
+++ b/ambari-agent/src/test/python/resource_management/TestDatanodeHelper.py
@@ -176,46 +176,46 @@ class TestDatanodeHelper(TestCase):
     # folder should be managed
     dirs_unmounted=set()
     self.assertEquals(True, mounted_dirs_helper._may_manage_folder(dir_='/grid/0/data', last_mount_point_for_dir=None, is_non_root_dir=False, dirs_unmounted=dirs_unmounted, error_messages = [], manage_dirs_on_root = True, curr_mount_point = '/'))
-    self.assertSetEqual(dirs_unmounted, set())
+    self.assertEquals(dirs_unmounted, set())
 
     # root, no history file, manage_dirs_on_root = False
     # folder should not be managed
     dirs_unmounted=set()
     self.assertEquals(False, mounted_dirs_helper._may_manage_folder(dir_='/grid/0/data', last_mount_point_for_dir=None, is_non_root_dir=False, dirs_unmounted=dirs_unmounted, error_messages = [], manage_dirs_on_root = False, curr_mount_point = '/'))
-    self.assertSetEqual(dirs_unmounted, set(['/grid/0/data']))
+    self.assertEquals(dirs_unmounted, set(['/grid/0/data']))
 
     # non root, no history file, manage_dirs_on_root = False
     # folder should be managed
     dirs_unmounted=set()
     self.assertEquals(True, mounted_dirs_helper._may_manage_folder(dir_='/grid/0/data', last_mount_point_for_dir=None, is_non_root_dir=True, dirs_unmounted=dirs_unmounted, error_messages = [], manage_dirs_on_root = False, curr_mount_point = '/'))
-    self.assertSetEqual(dirs_unmounted, set())
+    self.assertEquals(dirs_unmounted, set())
 
     # unmounted to root, manage_dirs_on_root = True
     # folder should not be managed
     dirs_unmounted=set()
     self.assertEquals(False, mounted_dirs_helper._may_manage_folder('/grid/0/data', '/grid/0', True, dirs_unmounted, [], False, '/'))
-    self.assertSetEqual(dirs_unmounted, set(['/grid/0/data']))
+    self.assertEquals(dirs_unmounted, set(['/grid/0/data']))
 
     # unmounted to root, manage_dirs_on_root = False
     # folder should not be managed
     dirs_unmounted=set()
     self.assertEquals(False, mounted_dirs_helper._may_manage_folder(dir_='/grid/0/data', last_mount_point_for_dir='/grid/0/data', is_non_root_dir=False, dirs_unmounted=dirs_unmounted, error_messages = [], manage_dirs_on_root = False, curr_mount_point = '/'))
-    self.assertSetEqual(dirs_unmounted, set(['/grid/0/data']))
+    self.assertEquals(dirs_unmounted, set(['/grid/0/data']))
 
     # same mount = root, manage_dirs_on_root = False
     # folder should not be managed
     dirs_unmounted=set()
     self.assertEquals(False, mounted_dirs_helper._may_manage_folder(dir_='/grid/0/data', last_mount_point_for_dir='/', is_non_root_dir=False, dirs_unmounted=dirs_unmounted, error_messages = [], manage_dirs_on_root = False, curr_mount_point = '/'))
-    self.assertSetEqual(dirs_unmounted, set())
+    self.assertEquals(dirs_unmounted, set())
 
     # same mount = root, manage_dirs_on_root = True
     # folder should be managed
     dirs_unmounted=set()
     self.assertEquals(True, mounted_dirs_helper._may_manage_folder(dir_='/grid/0/data', last_mount_point_for_dir='/', is_non_root_dir=False, dirs_unmounted=dirs_unmounted, error_messages = [], manage_dirs_on_root = True, curr_mount_point = '/'))
-    self.assertSetEqual(dirs_unmounted, set())
+    self.assertEquals(dirs_unmounted, set())
 
     # mount changed to non root, manage_dirs_on_root = False
     # folder should not be managed
     dirs_unmounted=set()
     self.assertEquals(False, mounted_dirs_helper._may_manage_folder('/grid/0/data', '/', True, dirs_unmounted, [], False, '/grid/0'))
-    self.assertSetEqual(dirs_unmounted, set(['/grid/0/data']))
+    self.assertEquals(dirs_unmounted, set(['/grid/0/data']))

http://git-wip-us.apache.org/repos/asf/ambari/blob/95833865/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_service_check.py b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_service_check.py
index fe7456d..fa40f60 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_service_check.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_service_check.py
@@ -99,4 +99,4 @@ class TestServiceCheck(RMFTestCase):
         self.assertNoMoreResources()
 
   def assertCurlCallForwardsCredentialsOnRedirect(self, mock_curl_call):
-    self.assertIn('--location-trusted', mock_curl_call.call_args[0][0])
+    self.assertTrue('--location-trusted' in mock_curl_call.call_args[0][0])


[26/50] [abbrv] ambari git commit: AMBARI-20180. HDFS SecurityLogger messages are logged twice (Arpit Agarwal via smohanty)

Posted by ol...@apache.org.
AMBARI-20180. HDFS SecurityLogger messages are logged twice (Arpit Agarwal via smohanty)


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

Branch: refs/heads/branch-dev-logsearch
Commit: cb1ba69e721326bfb4ef3531e8a9e509f36dbb4d
Parents: ee6c5d8
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Tue Mar 7 16:52:55 2017 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Tue Mar 7 16:53:57 2017 -0800

----------------------------------------------------------------------
 .../stacks/HDP/2.2/services/HDFS/configuration/hdfs-log4j.xml  | 1 +
 .../main/resources/stacks/HDP/2.3/upgrades/config-upgrade.xml  | 6 ++++++
 .../stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml         | 4 ++++
 .../src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml | 1 +
 .../main/resources/stacks/HDP/2.4/upgrades/config-upgrade.xml  | 5 +++++
 .../stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml         | 5 +++++
 .../src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml | 1 +
 .../main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml  | 5 +++++
 .../stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml         | 5 +++++
 .../src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml | 1 +
 .../HDPWIN/2.2/services/HDFS/configuration/hdfs-log4j.xml      | 1 +
 11 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/configuration/hdfs-log4j.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/configuration/hdfs-log4j.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/configuration/hdfs-log4j.xml
index 280c43a..9e48acc 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/configuration/hdfs-log4j.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HDFS/configuration/hdfs-log4j.xml
@@ -158,6 +158,7 @@ hadoop.security.log.maxfilesize={{hadoop_security_log_max_backup_size}}MB
 hadoop.security.log.maxbackupindex={{hadoop_security_log_number_of_backup_files}}
 log4j.category.SecurityLogger=${hadoop.security.logger}
 hadoop.security.log.file=SecurityAuth.audit
+log4j.additivity.SecurityLogger=false
 log4j.appender.DRFAS=org.apache.log4j.DailyRollingFileAppender
 log4j.appender.DRFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}
 log4j.appender.DRFAS.layout=org.apache.log4j.PatternLayout

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/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 96a95fb..eeb10fc 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
@@ -374,6 +374,12 @@
             <type>hadoop-env</type>
             <insert key="content" value="{% if hadoop_zkfc_opts is defined %} export HADOOP_ZKFC_OPTS=&quot;{{hadoop_zkfc_opts}} $HADOOP_ZKFC_OPTS&quot; {% endif %}" insert-type="append" newline-before="true" newline-after="true" />
           </definition>
+
+          <definition xsi:type="configure" id="hdfs_securitylogger_additivity" summary="Set additivity of SecurityLogger to false">
+            <type>hdfs-log4j</type>
+            <regex-replace  key="content" find="hadoop.security.log.file=SecurityAuth.audit" replace-with="hadoop.security.log.file=SecurityAuth.audit&#10;log4j.additivity.SecurityLogger=false"/>
+            <regex-replace  key="content" find="log4j.additivity.SecurityLogger=true" replace-with="log4j.additivity.SecurityLogger=false"/>
+          </definition>
         </changes>
       </component>
     </service>

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/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 40ef43d..c8f93e4 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
@@ -293,6 +293,10 @@
         </task>
       </execute-stage>
 
+      <execute-stage service="HDFS" component="NAMENODE" title="Apply config changes for Hdfs NameNode">
+        <task xsi:type="configure" id="hdfs_securitylogger_additivity"/>
+      </execute-stage>
+
       <!-- YARN -->
       <execute-stage service="YARN" component="RESOURCEMANAGER" title="Calculating Yarn Properties for Spark">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.SparkShufflePropertyConfig">

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/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 fb5e584..da5265d 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
@@ -672,6 +672,7 @@
           <task xsi:type="configure" id="hdp_2_5_0_0_remove_ranger_hdfs_audit_db" />
           <task xsi:type="configure" id="hdfs_log4j_parameterize" />
           <task xsi:type="configure" id="hadoop_env_zkfc_security_opts" />
+          <task xsi:type="configure" id="hdfs_securitylogger_additivity" />
         </pre-upgrade>
 
         <pre-downgrade /> <!--  no-op to prevent config changes on downgrade -->

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/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 8ab88b8..1b809c5 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
@@ -261,6 +261,11 @@
             <type>hadoop-env</type>
             <insert key="content" value="{% if hadoop_zkfc_opts is defined %} export HADOOP_ZKFC_OPTS=&quot;{{hadoop_zkfc_opts}} $HADOOP_ZKFC_OPTS&quot; {% endif %}" insert-type="append" newline-before="true" newline-after="true" />
           </definition>
+          <definition xsi:type="configure" id="hdfs_securitylogger_additivity" summary="Set additivity of SecurityLogger to false">
+            <type>hdfs-log4j</type>
+            <regex-replace  key="content" find="hadoop.security.log.file=SecurityAuth.audit" replace-with="hadoop.security.log.file=SecurityAuth.audit&#10;log4j.additivity.SecurityLogger=false"/>
+            <regex-replace  key="content" find="log4j.additivity.SecurityLogger=true" replace-with="log4j.additivity.SecurityLogger=false"/>
+          </definition>
         </changes>
       </component>
     </service>

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/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 d5a7c68..53caa52 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
@@ -265,6 +265,11 @@
       <direction>UPGRADE</direction>   <!--  prevent config changes on downgrade -->
       <skippable>true</skippable>  <!-- May fix configuration problems manually -->
 
+      <!--HDFS-->
+      <execute-stage service="HDFS" component="NAMENODE" title="Apply config changes for Hdfs NameNode">
+        <task xsi:type="configure" id="hdfs_securitylogger_additivity"/>
+      </execute-stage>
+
       <!--YARN-->
       <execute-stage service="MAPREDUCE2" component="MAPREDUCE2_CLIENT" title="Apply config changes for Mapreduce2 client">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FixLzoCodecPath">

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/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 e11ff02..2ee2094 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
@@ -677,6 +677,7 @@
           <task xsi:type="configure" id="hdp_2_5_0_0_remove_ranger_hdfs_audit_db" />
           <task xsi:type="configure" id="hdfs_log4j_parameterize" />
           <task xsi:type="configure" id="hadoop_env_zkfc_security_opts" />
+          <task xsi:type="configure" id="hdfs_securitylogger_additivity" />
         </pre-upgrade>
 
         <pre-downgrade /> <!--  no-op to prevent config changes on downgrade -->

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
index 6f3fe42..febd8e2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/config-upgrade.xml
@@ -224,6 +224,11 @@
           <type>hadoop-env</type>
           <insert key="content" value="{% if hadoop_zkfc_opts is defined %} export HADOOP_ZKFC_OPTS=&quot;{{hadoop_zkfc_opts}} $HADOOP_ZKFC_OPTS&quot; {% endif %}" insert-type="append" newline-before="true" newline-after="true" />
         </definition>
+        <definition xsi:type="configure" id="hdfs_securitylogger_additivity" summary="Set additivity of SecurityLogger to false">
+          <type>hdfs-log4j</type>
+          <regex-replace  key="content" find="hadoop.security.log.file=SecurityAuth.audit" replace-with="hadoop.security.log.file=SecurityAuth.audit&#10;log4j.additivity.SecurityLogger=false"/>
+          <regex-replace  key="content" find="log4j.additivity.SecurityLogger=true" replace-with="log4j.additivity.SecurityLogger=false"/>
+        </definition>
       </changes>
     </component>
   </service>

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
index fe297c3..0d6f51b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml
@@ -276,6 +276,11 @@
       <direction>UPGRADE</direction>   <!--  prevent config changes on downgrade -->
       <skippable>true</skippable>  <!-- May fix configuration problems manually -->
 
+      <!--HDFS-->
+      <execute-stage service="HDFS" component="NAMENODE" title="Apply config changes for Hdfs NameNode">
+        <task xsi:type="configure" id="hdfs_securitylogger_additivity"/>
+      </execute-stage>
+
       <!--YARN-->
       <execute-stage service="MAPREDUCE2" component="MAPREDUCE2_CLIENT" title="Apply config changes for Mapreduce2 client">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FixLzoCodecPath">

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
index 97313b5..ab6b239 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml
@@ -605,6 +605,7 @@
         <pre-upgrade>
           <task xsi:type="configure" id="hdfs_log4j_parameterize" />
           <task xsi:type="configure" id="hadoop_env_zkfc_security_opts" />
+          <task xsi:type="configure" id="hdfs_securitylogger_additivity" />
         </pre-upgrade>
         <pre-downgrade />
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1ba69e/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/HDFS/configuration/hdfs-log4j.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/HDFS/configuration/hdfs-log4j.xml b/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/HDFS/configuration/hdfs-log4j.xml
index 777c846..4d0cd73 100644
--- a/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/HDFS/configuration/hdfs-log4j.xml
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.2/services/HDFS/configuration/hdfs-log4j.xml
@@ -115,6 +115,7 @@ hadoop.security.log.maxfilesize=256MB
 hadoop.security.log.maxbackupindex=20
 log4j.category.SecurityLogger=${hadoop.security.logger}
 hadoop.security.log.file=SecurityAuth.audit
+log4j.additivity.SecurityLogger=false
 log4j.appender.DRFAS=org.apache.log4j.DailyRollingFileAppender
 log4j.appender.DRFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}
 log4j.appender.DRFAS.layout=org.apache.log4j.PatternLayout


[17/50] [abbrv] ambari git commit: AMBARI-20338. Alert Definition Name with brackets marked as invalid (onechiporenko)

Posted by ol...@apache.org.
AMBARI-20338. Alert Definition Name with brackets marked as invalid (onechiporenko)


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

Branch: refs/heads/branch-dev-logsearch
Commit: b9451a4b87ab680219d1790d7b2a091e9c330da0
Parents: bf25d31
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Tue Mar 7 12:24:31 2017 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Tue Mar 7 13:13:06 2017 +0200

----------------------------------------------------------------------
 ambari-web/app/messages.js              |  2 +-
 ambari-web/app/utils/validator.js       |  2 +-
 ambari-web/test/utils/validator_test.js | 22 ++++++++++++++++++++++
 3 files changed, 24 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b9451a4b/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 6684f32..83cc85c 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1123,7 +1123,7 @@ Em.I18n.translations = {
   'alerts.definition.name': 'Alert Definition Name',
   'alerts.saveChanges': 'You have unsaved changes',
 
-  'alert.definition.name.invalid': 'Invalid input. Only alphanumerics, underscores, hyphens, percentage and spaces are allowed.',
+  'alert.definition.name.invalid': 'Invalid input. Only alphanumerics, underscores, hyphens, percentage, brackets and spaces are allowed. Value should be less than 255 symbols.',
   'alerts.definition.details.enable': 'Enable',
   'alerts.definition.details.disable': 'Disable',
   'alerts.definition.details.enableDisable': 'Enable / Disable',

http://git-wip-us.apache.org/repos/asf/ambari/blob/b9451a4b/ambari-web/app/utils/validator.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/validator.js b/ambari-web/app/utils/validator.js
index 774215b..dd3d6c0 100644
--- a/ambari-web/app/utils/validator.js
+++ b/ambari-web/app/utils/validator.js
@@ -322,7 +322,7 @@ module.exports = {
    * @returns {boolean}
    */
   isValidAlertName: function(value) {
-    var alertNameRegex = /^[\s0-9a-z_\-%]+$/i;
+    var alertNameRegex = /^[\s0-9a-z_\-%\(\)]+$/i;
     return alertNameRegex.test(value);
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b9451a4b/ambari-web/test/utils/validator_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/validator_test.js b/ambari-web/test/utils/validator_test.js
index f0167da..2cb7750 100644
--- a/ambari-web/test/utils/validator_test.js
+++ b/ambari-web/test/utils/validator_test.js
@@ -500,4 +500,26 @@ describe('validator', function () {
       })
     });
   });
+
+  describe('#isValidAlertName', function () {
+
+    [
+      {v: '', e: false},
+      {v: 'a', e: true},
+      {v: 'a b', e: true},
+      {v: '/', e: false},
+      {v: '/>1', e: false},
+      {v: 'a 1%', e: true},
+      {v: 'a (b)', e: true}
+    ].forEach(function (test) {
+
+      it(test.m || test.v, function () {
+        expect(validator.isValidAlertName(test.v)).to.be.equal(test.e);
+      })
+
+    });
+
+
+  });
+
 });


[35/50] [abbrv] ambari git commit: AMBARI-20346 Log Search Upgrade should modify keystore / truststore path if it wasn't used (mgergely)

Posted by ol...@apache.org.
AMBARI-20346 Log Search Upgrade should modify keystore / truststore path if it wasn't used (mgergely)

Change-Id: Ib5614acea9667205b2eaecbd57e3d4ec3c560f5f


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

Branch: refs/heads/branch-dev-logsearch
Commit: 546225f326323a5d6e6013c8413a36180e0b0d32
Parents: 63dad09
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Wed Mar 8 16:32:28 2017 +0100
Committer: Miklos Gergely <mg...@hortonworks.com>
Committed: Wed Mar 8 16:33:58 2017 +0100

----------------------------------------------------------------------
 .../ambari/server/upgrade/UpgradeCatalog250.java    |  7 +++++++
 .../LOGSEARCH/0.5.0/package/scripts/params.py       |  2 +-
 .../server/upgrade/UpgradeCatalog250Test.java       | 16 +++++++++++-----
 3 files changed, 19 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/546225f3/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 36160ca..00d1c31 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
@@ -1006,6 +1006,13 @@ public class UpgradeCatalog250 extends AbstractUpgradeCatalog {
               newProperties.put("content", content);
             }
             
+            if ("http".equals(logsearchEnvProperties.getProperties().get("logsearch_ui_protocol")) &&
+                "/etc/security/serverKeys/logsearch.trustStore.jks".equals(logsearchEnvProperties.getProperties().get("logsearch_truststore_location")) &&
+                "/etc/security/serverKeys/logsearch.keyStore.jks".equals(logsearchEnvProperties.getProperties().get("logsearch_keystore_location"))) {
+              newProperties.put("logsearch_truststore_location", "/etc/ambari-logsearch-portal/conf/keys/logsearch.jks");
+              newProperties.put("logsearch_keystore_location", "/etc/ambari-logsearch-portal/conf/keys/logsearch.jks");
+            }
+            
             Set<String> removeProperties = new HashSet<>();
             removeProperties.add("logsearch_solr_audit_logs_use_ranger");
             removeProperties.add("logsearch_solr_audit_logs_zk_node");

http://git-wip-us.apache.org/repos/asf/ambari/blob/546225f3/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
index 17c536e..8dac69a 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
@@ -336,7 +336,7 @@ logfeeder_custom_config_file_names = ['input.config-%s.json' % (tag.replace('-lo
                                       for tag, content in logfeeder_metadata.iteritems() if any(logfeeder_metadata)]
 
 if logfeeder_system_log_enabled:
-  default_config_files = ','.join(['output.json','input.config-ambari.json'] + logfeeder_default_config_file_names + logfeeder_custom_config_file_names
+  default_config_files = ','.join(['output.config.json','input.config-ambari.json'] + logfeeder_default_config_file_names + logfeeder_custom_config_file_names
                                   + ['input.config-system_messages.json', 'input.config-secure_log.json'])
 else:
   default_config_files = ','.join(['output.config.json','input.config-ambari.json'] + logfeeder_default_config_file_names + logfeeder_custom_config_file_names)

http://git-wip-us.apache.org/repos/asf/ambari/blob/546225f3/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 cb2e5f6..1a87433 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
@@ -1235,13 +1235,19 @@ public class UpgradeCatalog250Test {
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logFeederEnvCapture), anyString(),
         EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
 
-    Map<String, String> oldLogSearchEnv = ImmutableMap.of(
-        "logsearch_solr_audit_logs_use_ranger", "false",
-        "logsearch_solr_audit_logs_zk_node", "zk_node",
-        "logsearch_solr_audit_logs_zk_quorum", "zk_quorum",
-        "content", "infra_solr_ssl_enabled or logsearch_ui_protocol == 'https'");
+    Map<String, String> oldLogSearchEnv = new HashMap<>();
+    oldLogSearchEnv.put("logsearch_solr_audit_logs_use_ranger", "false");
+    oldLogSearchEnv.put("logsearch_solr_audit_logs_zk_node", "zk_node");
+    oldLogSearchEnv.put("logsearch_solr_audit_logs_zk_quorum", "zk_quorum");
+    oldLogSearchEnv.put("logsearch_ui_protocol", "http");
+    oldLogSearchEnv.put("logsearch_truststore_location", "/etc/security/serverKeys/logsearch.trustStore.jks");
+    oldLogSearchEnv.put("logsearch_keystore_location", "/etc/security/serverKeys/logsearch.keyStore.jks");
+    oldLogSearchEnv.put("content", "infra_solr_ssl_enabled or logsearch_ui_protocol == 'https'");
 
     Map<String, String> expectedLogSearchEnv = ImmutableMap.of(
+        "logsearch_ui_protocol", "http",
+        "logsearch_truststore_location", "/etc/ambari-logsearch-portal/conf/keys/logsearch.jks",
+        "logsearch_keystore_location", "/etc/ambari-logsearch-portal/conf/keys/logsearch.jks",
         "content", "logsearch_use_ssl");
 
     Config mockLogSearchEnv = easyMockSupport.createNiceMock(Config.class);


[08/50] [abbrv] ambari git commit: AMBARI-20309. HBase Master CPU Utilization Alert is in unknown state due to kinit error (rlevas)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/e8956590/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 529ac5c..ad01e07 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
@@ -21,12 +21,16 @@ package org.apache.ambari.server.upgrade;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
 import com.google.inject.AbstractModule;
 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.Assert;
 import junit.framework.AssertionFailedError;
 
@@ -69,6 +73,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import javax.persistence.EntityManager;
+
 import java.io.File;
 import java.lang.reflect.Method;
 import java.net.URL;
@@ -76,6 +81,7 @@ import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -144,7 +150,7 @@ public class UpgradeCatalog250Test {
   private Clusters clusters;
 
   @Mock(type = MockType.NICE)
-  private  Cluster cluster;
+  private Cluster cluster;
 
   @Mock(type = MockType.NICE)
   private Injector injector;
@@ -181,16 +187,16 @@ public class UpgradeCatalog250Test {
     Capture<List<DBAccessor.DBColumnInfo>> capturedComponentVersionColumns = newCapture();
 
     dbAccessor.createTable(eq(UpgradeCatalog250.COMPONENT_VERSION_TABLE), capture(capturedComponentVersionColumns),
-      eq((String[]) null));
+        eq((String[]) null));
 
     dbAccessor.addPKConstraint(eq(UpgradeCatalog250.COMPONENT_VERSION_TABLE),
-      eq(UpgradeCatalog250.COMPONENT_VERSION_PK), eq("id"));
+        eq(UpgradeCatalog250.COMPONENT_VERSION_PK), eq("id"));
     dbAccessor.addFKConstraint(eq(UpgradeCatalog250.COMPONENT_VERSION_TABLE),
-      eq(UpgradeCatalog250.COMPONENT_VERSION_FK_COMPONENT), eq("component_id"),
-      eq(UpgradeCatalog250.COMPONENT_TABLE), eq("id"), eq(false));
+        eq(UpgradeCatalog250.COMPONENT_VERSION_FK_COMPONENT), eq("component_id"),
+        eq(UpgradeCatalog250.COMPONENT_TABLE), eq("id"), eq(false));
     dbAccessor.addFKConstraint(eq(UpgradeCatalog250.COMPONENT_VERSION_TABLE),
-      eq(UpgradeCatalog250.COMPONENT_VERSION_FK_REPO_VERSION), eq("repo_version_id"),
-      eq("repo_version"), eq("repo_version_id"), eq(false));
+        eq(UpgradeCatalog250.COMPONENT_VERSION_FK_REPO_VERSION), eq("repo_version_id"),
+        eq("repo_version"), eq("repo_version_id"), eq(false));
 
     // servicedesiredstate table
     Capture<DBAccessor.DBColumnInfo> capturedCredentialStoreEnabledCol = newCapture();
@@ -288,27 +294,29 @@ public class UpgradeCatalog250Test {
     Method updateAlerts = UpgradeCatalog250.class.getDeclaredMethod("updateStormAlerts");
     Method removeAlertDuplicates = UpgradeCatalog250.class.getDeclaredMethod("removeAlertDuplicates");
     Method updateKerberosDescriptorArtifacts = AbstractUpgradeCatalog.class.getDeclaredMethod("updateKerberosDescriptorArtifacts");
+    Method fixHBaseMasterCPUUtilizationAlertDefinition = UpgradeCatalog250.class.getDeclaredMethod("fixHBaseMasterCPUUtilizationAlertDefinition");
 
     UpgradeCatalog250 upgradeCatalog250 = createMockBuilder(UpgradeCatalog250.class)
-      .addMockedMethod(updateAmsConfigs)
-      .addMockedMethod(updateHadoopEnvConfigs)
-      .addMockedMethod(updateKafkaConfigs)
-      .addMockedMethod(updateHIVEInteractiveConfigs)
-      .addMockedMethod(updateHiveLlapConfigs)
-      .addMockedMethod(updateTablesForZeppelinViewRemoval)
-      .addMockedMethod(updateZeppelinConfigs)
-      .addMockedMethod(updateAtlasConfigs)
-      .addMockedMethod(updateLogSearchConfigs)
-      .addMockedMethod(updateAmbariInfraConfigs)
-      .addMockedMethod(addNewConfigurationsFromXml)
-      .addMockedMethod(updateRangerUrlConfigs)
-      .addMockedMethod(addManageServiceAutoStartPermissions)
-      .addMockedMethod(addManageAlertNotificationsPermissions)
-      .addMockedMethod(updateYarnSite)
-      .addMockedMethod(updateAlerts)
-      .addMockedMethod(removeAlertDuplicates)
-      .addMockedMethod(updateKerberosDescriptorArtifacts)
-      .createMock();
+        .addMockedMethod(updateAmsConfigs)
+        .addMockedMethod(updateHadoopEnvConfigs)
+        .addMockedMethod(updateKafkaConfigs)
+        .addMockedMethod(updateHIVEInteractiveConfigs)
+        .addMockedMethod(updateHiveLlapConfigs)
+        .addMockedMethod(updateTablesForZeppelinViewRemoval)
+        .addMockedMethod(updateZeppelinConfigs)
+        .addMockedMethod(updateAtlasConfigs)
+        .addMockedMethod(updateLogSearchConfigs)
+        .addMockedMethod(updateAmbariInfraConfigs)
+        .addMockedMethod(addNewConfigurationsFromXml)
+        .addMockedMethod(updateRangerUrlConfigs)
+        .addMockedMethod(addManageServiceAutoStartPermissions)
+        .addMockedMethod(addManageAlertNotificationsPermissions)
+        .addMockedMethod(updateYarnSite)
+        .addMockedMethod(updateAlerts)
+        .addMockedMethod(removeAlertDuplicates)
+        .addMockedMethod(updateKerberosDescriptorArtifacts)
+        .addMockedMethod(fixHBaseMasterCPUUtilizationAlertDefinition)
+        .createMock();
 
 
     upgradeCatalog250.updateAMSConfigs();
@@ -354,10 +362,10 @@ public class UpgradeCatalog250Test {
     expectLastCall().once();
 
     upgradeCatalog250.updateYarnSite();
-      expectLastCall().once();
+    expectLastCall().once();
 
     upgradeCatalog250.updateStormAlerts();
-      expectLastCall().once();
+    expectLastCall().once();
 
     upgradeCatalog250.removeAlertDuplicates();
     expectLastCall().once();
@@ -365,6 +373,9 @@ public class UpgradeCatalog250Test {
     upgradeCatalog250.updateKerberosDescriptorArtifacts();
     expectLastCall().once();
 
+    upgradeCatalog250.fixHBaseMasterCPUUtilizationAlertDefinition();
+    expectLastCall().once();
+
     replay(upgradeCatalog250);
 
     upgradeCatalog250.executeDMLUpdates();
@@ -381,18 +392,7 @@ public class UpgradeCatalog250Test {
     final AlertDefinitionDAO mockAlertDefinitionDAO = easyMockSupport.createNiceMock(AlertDefinitionDAO.class);
     final AlertDefinitionEntity stormWebUIAlertMock = easyMockSupport.createNiceMock(AlertDefinitionEntity.class);
 
-    final Injector mockInjector = Guice.createInjector(new AbstractModule() {
-      @Override
-      protected void configure() {
-        bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
-        bind(Clusters.class).toInstance(mockClusters);
-        bind(EntityManager.class).toInstance(entityManager);
-        bind(AlertDefinitionDAO.class).toInstance(mockAlertDefinitionDAO);
-        bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
-        bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
-      }
-    });
-
+    final Injector mockInjector = createInjector(mockAmbariManagementController, mockClusters, mockAlertDefinitionDAO);
     long clusterId = 1;
 
     expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
@@ -401,13 +401,13 @@ public class UpgradeCatalog250Test {
     }}).atLeastOnce();
     expect(mockClusterExpected.getClusterId()).andReturn(clusterId).anyTimes();
     expect(mockAlertDefinitionDAO.findByName(eq(clusterId), eq("storm_webui")))
-            .andReturn(stormWebUIAlertMock).atLeastOnce();
+        .andReturn(stormWebUIAlertMock).atLeastOnce();
     expect(stormWebUIAlertMock.getSource()).andReturn("{\"uri\": {\n" +
-            "            \"http\": \"{{storm-site/ui.port}}\",\n" +
-            "            \"kerberos_keytab\": \"{{storm-env/storm_ui_keytab}}\",\n" +
-            "            \"kerberos_principal\": \"{{storm-env/storm_ui_principal_name}}\",\n" +
-            "            \"connection_timeout\": 5.0\n" +
-            "          } }");
+        "            \"http\": \"{{storm-site/ui.port}}\",\n" +
+        "            \"kerberos_keytab\": \"{{storm-env/storm_ui_keytab}}\",\n" +
+        "            \"kerberos_principal\": \"{{storm-env/storm_ui_principal_name}}\",\n" +
+        "            \"connection_timeout\": 5.0\n" +
+        "          } }");
 
     stormWebUIAlertMock.setSource("{\"uri\":{\"http\":\"{{storm-site/ui.port}}\",\"kerberos_keytab\":\"{{storm-env/storm_ui_keytab}}\",\"kerberos_principal\":\"{{storm-env/storm_ui_principal_name}}\",\"connection_timeout\":5.0,\"https\":\"{{storm-site/ui.https.port}}\",\"https_property\":\"{{storm-site/ui.https.keystore.type}}\",\"https_property_value\":\"jks\"}}");
 
@@ -427,18 +427,7 @@ public class UpgradeCatalog250Test {
     final AlertDefinitionDAO mockAlertDefinitionDAO = easyMockSupport.createNiceMock(AlertDefinitionDAO.class);
     final AlertDefinitionEntity stormUIPortAlertMock = easyMockSupport.createNiceMock(AlertDefinitionEntity.class);
 
-    final Injector mockInjector = Guice.createInjector(new AbstractModule() {
-      @Override
-      protected void configure() {
-        bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
-        bind(Clusters.class).toInstance(mockClusters);
-        bind(EntityManager.class).toInstance(entityManager);
-        bind(AlertDefinitionDAO.class).toInstance(mockAlertDefinitionDAO);
-        bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
-        bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
-      }
-    });
-
+    final Injector mockInjector = createInjector(mockAmbariManagementController, mockClusters, mockAlertDefinitionDAO);
     long clusterId = 1;
 
     expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
@@ -447,7 +436,7 @@ public class UpgradeCatalog250Test {
     }}).atLeastOnce();
     expect(mockClusterExpected.getClusterId()).andReturn(clusterId).anyTimes();
     expect(mockAlertDefinitionDAO.findByName(eq(clusterId), eq("storm_server_process")))
-            .andReturn(stormUIPortAlertMock).atLeastOnce();
+        .andReturn(stormUIPortAlertMock).atLeastOnce();
 
     mockAlertDefinitionDAO.remove(stormUIPortAlertMock);
     expectLastCall().once();
@@ -459,7 +448,62 @@ public class UpgradeCatalog250Test {
   }
 
   @Test
-  public void testUpdateYarnSite() throws Exception{
+  public void testFixHBaseMasterCPUUtilizationAlertDefinition() {
+    EasyMockSupport easyMockSupport = new EasyMockSupport();
+    final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
+    final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
+    final Cluster mockClusterExpected = easyMockSupport.createNiceMock(Cluster.class);
+    final AlertDefinitionDAO mockAlertDefinitionDAO = easyMockSupport.createNiceMock(AlertDefinitionDAO.class);
+    final AlertDefinitionEntity hbaseMasterCPUAlertMock = easyMockSupport.createNiceMock(AlertDefinitionEntity.class);
+
+    String brokenSource = "{\"uri\":{\"http\":\"{{hbase-site/hbase.master.info.port}}\",\"kerberos_keytab\":\"{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}\",\"kerberos_principal\":\"{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}\",\"default_port\":60010,\"connection_timeout\":5.0},\"jmx\":{\"property_list\":[\"java.lang:type\\u003dOperatingSystem/SystemCpuLoad\",\"java.lang:type\\u003dOperatingSystem/AvailableProcessors\"],\"value\":\"{0} * 100\"},\"type\":\"METRIC\",\"reporting\":{\"ok\":{\"text\":\"{1} CPU, load {0:.1%}\"},\"warning\":{\"text\":\"{1} CPU, load {0:.1%}\",\"value\":200.0},\"critical\":{\"text\":\"{1} CPU, load {0:.1%}\",\"value\":250.0},\"units\":\"%\",\"type\":\"PERCENT\"}}";
+
+    Capture<String> capturedFixedSource = newCapture();
+
+    final Injector mockInjector = createInjector(mockAmbariManagementController, mockClusters, mockAlertDefinitionDAO);
+    long clusterId = 1;
+
+    expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).once();
+    expect(mockClusters.getClusters()).andReturn(Collections.singletonMap("normal", mockClusterExpected)).atLeastOnce();
+    expect(mockClusterExpected.getClusterId()).andReturn(clusterId).anyTimes();
+    expect(mockAlertDefinitionDAO.findByName(eq(clusterId), eq("hbase_master_cpu"))).andReturn(hbaseMasterCPUAlertMock).atLeastOnce();
+    expect(hbaseMasterCPUAlertMock.getDefinitionName()).andReturn("hbase_master_cpu").once();
+    expect(hbaseMasterCPUAlertMock.getSource()).andReturn(brokenSource).once();
+
+    hbaseMasterCPUAlertMock.setSource(capture(capturedFixedSource));
+    expectLastCall().once();
+
+    hbaseMasterCPUAlertMock.setHash(anyString());
+    expectLastCall().once();
+
+    expect(mockAlertDefinitionDAO.merge(hbaseMasterCPUAlertMock)).andReturn(hbaseMasterCPUAlertMock).once();
+
+    easyMockSupport.replayAll();
+
+    mockInjector.getInstance(UpgradeCatalog250.class).fixHBaseMasterCPUUtilizationAlertDefinition();
+    easyMockSupport.verifyAll();
+
+    String fixedSource = capturedFixedSource.getValue();
+    Assert.assertNotNull(fixedSource);
+
+    JsonObject sourceJson = new JsonParser().parse(fixedSource).getAsJsonObject();
+    Assert.assertNotNull(sourceJson);
+
+    JsonObject uriJson = sourceJson.get("uri").getAsJsonObject();
+    Assert.assertNotNull(uriJson);
+
+    JsonPrimitive primitive;
+    primitive = uriJson.getAsJsonPrimitive("kerberos_keytab");
+    Assert.assertTrue(primitive.isString());
+    Assert.assertEquals("{{hbase-site/hbase.security.authentication.spnego.kerberos.keytab}}", primitive.getAsString());
+
+    primitive = uriJson.getAsJsonPrimitive("kerberos_principal");
+    Assert.assertTrue(primitive.isString());
+    Assert.assertEquals("{{hbase-site/hbase.security.authentication.spnego.kerberos.principal}}", primitive.getAsString());
+  }
+
+  @Test
+  public void testUpdateYarnSite() throws Exception {
     EasyMockSupport easyMockSupport = new EasyMockSupport();
 
     final String propertyToRemove = "yarn.nodemanager.linux-container-executor.cgroups.mount-path";
@@ -467,7 +511,7 @@ public class UpgradeCatalog250Test {
     Config mockYarnEnv = easyMockSupport.createNiceMock(Config.class);
     Config mockYarnSite = easyMockSupport.createNiceMock(Config.class);
 
-    HashMap<String, String> yarnEnv = new HashMap<String, String>(){{
+    HashMap<String, String> yarnEnv = new HashMap<String, String>() {{
       put("yarn_cgroups_enabled", "false");
     }};
 
@@ -490,9 +534,9 @@ public class UpgradeCatalog250Test {
     replay(clusters, cluster, injector, ambariManagementController, mockYarnEnv, mockYarnSite);
 
     UpgradeCatalog250 upgradeCatalog250 = createMockBuilder(UpgradeCatalog250.class)
-      .addMockedMethod("removeConfigurationPropertiesFromCluster")
-      .withConstructor(injector)
-      .createNiceMock();
+        .addMockedMethod("removeConfigurationPropertiesFromCluster")
+        .withConstructor(injector)
+        .createNiceMock();
 
     Capture<HashSet<String>> removeConfigName = EasyMock.newCapture();
 
@@ -512,7 +556,7 @@ public class UpgradeCatalog250Test {
   }
 
   @Test
-  public void testUpdateYarnSiteWithEnabledCGroups() throws Exception{
+  public void testUpdateYarnSiteWithEnabledCGroups() throws Exception {
     EasyMockSupport easyMockSupport = new EasyMockSupport();
 
     final String propertyToRemove = "yarn.nodemanager.linux-container-executor.cgroups.mount-path";
@@ -520,7 +564,7 @@ public class UpgradeCatalog250Test {
     Config mockYarnEnv = easyMockSupport.createNiceMock(Config.class);
     Config mockYarnSite = easyMockSupport.createNiceMock(Config.class);
 
-    HashMap<String, String> yarnEnv = new HashMap<String, String>(){{
+    HashMap<String, String> yarnEnv = new HashMap<String, String>() {{
       put("yarn_cgroups_enabled", "true");
     }};
 
@@ -543,9 +587,9 @@ public class UpgradeCatalog250Test {
     replay(clusters, cluster, injector, ambariManagementController, mockYarnEnv, mockYarnSite);
 
     UpgradeCatalog250 upgradeCatalog250 = createMockBuilder(UpgradeCatalog250.class)
-      .addMockedMethod("removeConfigurationPropertiesFromCluster")
-      .withConstructor(injector)
-      .createNiceMock();
+        .addMockedMethod("removeConfigurationPropertiesFromCluster")
+        .withConstructor(injector)
+        .createNiceMock();
 
     Capture<HashSet<String>> removeConfigName = EasyMock.newCapture();
 
@@ -565,27 +609,27 @@ public class UpgradeCatalog250Test {
     Map<String, String> oldPropertiesAmsEnv = new HashMap<String, String>() {
       {
         put("content", "\n" +
-          "# AMS Collector heapsize\n" +
-          "export AMS_COLLECTOR_HEAPSIZE={{metrics_collector_heapsize}}\n" +
-          "\n" +
-          "# HBase normalizer enabled\n" +
-          "export AMS_HBASE_NORMALIZER_ENABLED={{ams_hbase_normalizer_enabled}}\n" +
-          "\n" +
-          "# HBase compaction policy enabled\n" +
-          "export HBASE_FIFO_COMPACTION_POLICY_ENABLED={{ams_hbase_fifo_compaction_policy_enabled}}\n" +
-          "\n" +
-          "# HBase Tables Initialization check enabled\n" +
-          "export AMS_HBASE_INIT_CHECK_ENABLED={{ams_hbase_init_check_enabled}}\n");
+            "# AMS Collector heapsize\n" +
+            "export AMS_COLLECTOR_HEAPSIZE={{metrics_collector_heapsize}}\n" +
+            "\n" +
+            "# HBase normalizer enabled\n" +
+            "export AMS_HBASE_NORMALIZER_ENABLED={{ams_hbase_normalizer_enabled}}\n" +
+            "\n" +
+            "# HBase compaction policy enabled\n" +
+            "export HBASE_FIFO_COMPACTION_POLICY_ENABLED={{ams_hbase_fifo_compaction_policy_enabled}}\n" +
+            "\n" +
+            "# HBase Tables Initialization check enabled\n" +
+            "export AMS_HBASE_INIT_CHECK_ENABLED={{ams_hbase_init_check_enabled}}\n");
       }
     };
     Map<String, String> newPropertiesAmsEnv = new HashMap<String, String>() {
       {
         put("content", "\n" +
-          "# AMS Collector heapsize\n" +
-          "export AMS_COLLECTOR_HEAPSIZE={{metrics_collector_heapsize}}\n" +
-          "\n" +
-          "# HBase Tables Initialization check enabled\n" +
-          "export AMS_HBASE_INIT_CHECK_ENABLED={{ams_hbase_init_check_enabled}}\n");
+            "# AMS Collector heapsize\n" +
+            "export AMS_COLLECTOR_HEAPSIZE={{metrics_collector_heapsize}}\n" +
+            "\n" +
+            "# HBase Tables Initialization check enabled\n" +
+            "export AMS_HBASE_INIT_CHECK_ENABLED={{ams_hbase_init_check_enabled}}\n");
       }
     };
     EasyMockSupport easyMockSupport = new EasyMockSupport();
@@ -602,11 +646,11 @@ public class UpgradeCatalog250Test {
     replay(clusters, mockAmsEnv, cluster);
 
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
-      .addMockedMethod("createConfiguration")
-      .addMockedMethod("getClusters", new Class[] { })
-      .addMockedMethod("createConfig")
-      .withConstructor(actionManager, clusters, injector)
-      .createNiceMock();
+        .addMockedMethod("createConfiguration")
+        .addMockedMethod("getClusters", new Class[]{})
+        .addMockedMethod("createConfig")
+        .withConstructor(actionManager, clusters, injector)
+        .createNiceMock();
 
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     Capture<Map<String, String>> propertiesCapture = EasyMock.newCapture();
@@ -683,11 +727,11 @@ public class UpgradeCatalog250Test {
     replay(clusters, mockAmsHbaseSite, mockAmsSite, cluster);
 
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
-      .addMockedMethod("createConfiguration")
-      .addMockedMethod("getClusters", new Class[] { })
-      .addMockedMethod("createConfig")
-      .withConstructor(actionManager, clusters, injector)
-      .createNiceMock();
+        .addMockedMethod("createConfiguration")
+        .addMockedMethod("getClusters", new Class[]{})
+        .addMockedMethod("createConfig")
+        .withConstructor(actionManager, clusters, injector)
+        .createNiceMock();
 
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     Capture<Map<String, String>> propertiesCapture = EasyMock.newCapture(CaptureType.ALL);
@@ -711,7 +755,7 @@ public class UpgradeCatalog250Test {
   }
 
   @Test
-  public void testKafkaUpdateConfigs() throws Exception{
+  public void testKafkaUpdateConfigs() throws Exception {
 
     Map<String, String> oldProperties = new HashMap<String, String>() {
       {
@@ -737,11 +781,11 @@ public class UpgradeCatalog250Test {
     replay(clusters, mockKafkaBroker, cluster);
 
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
-      .addMockedMethod("createConfiguration")
-      .addMockedMethod("getClusters", new Class[] { })
-      .addMockedMethod("createConfig")
-      .withConstructor(actionManager, clusters, injector)
-      .createNiceMock();
+        .addMockedMethod("createConfiguration")
+        .addMockedMethod("getClusters", new Class[]{})
+        .addMockedMethod("createConfig")
+        .withConstructor(actionManager, clusters, injector)
+        .createNiceMock();
 
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     Capture<Map<String, String>> propertiesCapture = EasyMock.newCapture();
@@ -768,85 +812,85 @@ public class UpgradeCatalog250Test {
 
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
-            .addMockedMethod("createConfiguration")
-            .addMockedMethod("getClusters", new Class[] {})
-            .addMockedMethod("createConfig")
-            .withConstructor(actionManager, clusters, injector)
-            .createNiceMock();
+        .addMockedMethod("createConfiguration")
+        .addMockedMethod("getClusters", new Class[]{})
+        .addMockedMethod("createConfig")
+        .withConstructor(actionManager, clusters, injector)
+        .createNiceMock();
 
     expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
     expect(controller.getClusters()).andReturn(clusters).anyTimes();
 
     Map<String, String> oldAmsLog4j = ImmutableMap.of(
-            "content",
+        "content",
+        "#\n" +
+            "# Licensed to the Apache Software Foundation (ASF) under one\n" +
+            "# or more contributor license agreements.  See the NOTICE file\n" +
+            "# distributed with this work for additional information\n" +
+            "# regarding copyright ownership.  The ASF licenses this file\n" +
+            "# to you under the Apache License, Version 2.0 (the\n" +
+            "# \"License\"); you may not use this file except in compliance\n" +
+            "# with the License.  You may obtain a copy of the License at\n" +
+            "#\n" +
+            "#     http://www.apache.org/licenses/LICENSE-2.0\n" +
+            "#\n" +
+            "# Unless required by applicable law or agreed to in writing, software\n" +
+            "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+            "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+            "# See the License for the specific language governing permissions and\n" +
+            "# limitations under the License.\n" +
             "#\n" +
-                    "# Licensed to the Apache Software Foundation (ASF) under one\n" +
-                    "# or more contributor license agreements.  See the NOTICE file\n" +
-                    "# distributed with this work for additional information\n" +
-                    "# regarding copyright ownership.  The ASF licenses this file\n" +
-                    "# to you under the Apache License, Version 2.0 (the\n" +
-                    "# \"License\"); you may not use this file except in compliance\n" +
-                    "# with the License.  You may obtain a copy of the License at\n" +
-                    "#\n" +
-                    "#     http://www.apache.org/licenses/LICENSE-2.0\n" +
-                    "#\n" +
-                    "# Unless required by applicable law or agreed to in writing, software\n" +
-                    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
-                    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
-                    "# See the License for the specific language governing permissions and\n" +
-                    "# limitations under the License.\n" +
-                    "#\n" +
-                    "\n" +
-                    "# Define some default values that can be overridden by system properties\n" +
-                    "ams.log.dir=.\n" +
-                    "ams.log.file=ambari-metrics-collector.log\n" +
-                    "\n" +
-                    "# Root logger option\n" +
-                    "log4j.rootLogger=INFO,file\n" +
-                    "\n" +
-                    "# Direct log messages to a log file\n" +
-                    "log4j.appender.file=org.apache.log4j.RollingFileAppender\n" +
-                    "log4j.appender.file.File=${ams.log.dir}/${ams.log.file}\n" +
-                    "log4j.appender.file.MaxFileSize=10MB\n" +
-                    "log4j.appender.file.MaxBackupIndex=12\n" +
-                    "log4j.appender.file.layout=org.apache.log4j.PatternLayout\n" +
-                    "log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n");
+            "\n" +
+            "# Define some default values that can be overridden by system properties\n" +
+            "ams.log.dir=.\n" +
+            "ams.log.file=ambari-metrics-collector.log\n" +
+            "\n" +
+            "# Root logger option\n" +
+            "log4j.rootLogger=INFO,file\n" +
+            "\n" +
+            "# Direct log messages to a log file\n" +
+            "log4j.appender.file=org.apache.log4j.RollingFileAppender\n" +
+            "log4j.appender.file.File=${ams.log.dir}/${ams.log.file}\n" +
+            "log4j.appender.file.MaxFileSize=10MB\n" +
+            "log4j.appender.file.MaxBackupIndex=12\n" +
+            "log4j.appender.file.layout=org.apache.log4j.PatternLayout\n" +
+            "log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n");
 
     Map<String, String> expectedAmsLog4j = new HashMap<>();
-    expectedAmsLog4j.put("content","#\n" +
-                    "# Licensed to the Apache Software Foundation (ASF) under one\n" +
-                    "# or more contributor license agreements.  See the NOTICE file\n" +
-                    "# distributed with this work for additional information\n" +
-                    "# regarding copyright ownership.  The ASF licenses this file\n" +
-                    "# to you under the Apache License, Version 2.0 (the\n" +
-                    "# \"License\"); you may not use this file except in compliance\n" +
-                    "# with the License.  You may obtain a copy of the License at\n" +
-                    "#\n" +
-                    "#     http://www.apache.org/licenses/LICENSE-2.0\n" +
-                    "#\n" +
-                    "# Unless required by applicable law or agreed to in writing, software\n" +
-                    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
-                    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
-                    "# See the License for the specific language governing permissions and\n" +
-                    "# limitations under the License.\n" +
-                    "#\n" +
-                    "\n" +
-                    "# Define some default values that can be overridden by system properties\n" +
-                    "ams.log.dir=.\n" +
-                    "ams.log.file=ambari-metrics-collector.log\n" +
-                    "\n" +
-                    "# Root logger option\n" +
-                    "log4j.rootLogger=INFO,file\n" +
-                    "\n" +
-                    "# Direct log messages to a log file\n" +
-                    "log4j.appender.file=org.apache.log4j.RollingFileAppender\n" +
-                    "log4j.appender.file.File=${ams.log.dir}/${ams.log.file}\n" +
-                    "log4j.appender.file.MaxFileSize={{ams_log_max_backup_size}}MB\n" +
-                    "log4j.appender.file.MaxBackupIndex={{ams_log_number_of_backup_files}}\n" +
-                    "log4j.appender.file.layout=org.apache.log4j.PatternLayout\n" +
-                    "log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n");
-    expectedAmsLog4j.put("ams_log_max_backup_size","10");
-    expectedAmsLog4j.put("ams_log_number_of_backup_files","12");
+    expectedAmsLog4j.put("content", "#\n" +
+        "# Licensed to the Apache Software Foundation (ASF) under one\n" +
+        "# or more contributor license agreements.  See the NOTICE file\n" +
+        "# distributed with this work for additional information\n" +
+        "# regarding copyright ownership.  The ASF licenses this file\n" +
+        "# to you under the Apache License, Version 2.0 (the\n" +
+        "# \"License\"); you may not use this file except in compliance\n" +
+        "# with the License.  You may obtain a copy of the License at\n" +
+        "#\n" +
+        "#     http://www.apache.org/licenses/LICENSE-2.0\n" +
+        "#\n" +
+        "# Unless required by applicable law or agreed to in writing, software\n" +
+        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+        "# See the License for the specific language governing permissions and\n" +
+        "# limitations under the License.\n" +
+        "#\n" +
+        "\n" +
+        "# Define some default values that can be overridden by system properties\n" +
+        "ams.log.dir=.\n" +
+        "ams.log.file=ambari-metrics-collector.log\n" +
+        "\n" +
+        "# Root logger option\n" +
+        "log4j.rootLogger=INFO,file\n" +
+        "\n" +
+        "# Direct log messages to a log file\n" +
+        "log4j.appender.file=org.apache.log4j.RollingFileAppender\n" +
+        "log4j.appender.file.File=${ams.log.dir}/${ams.log.file}\n" +
+        "log4j.appender.file.MaxFileSize={{ams_log_max_backup_size}}MB\n" +
+        "log4j.appender.file.MaxBackupIndex={{ams_log_number_of_backup_files}}\n" +
+        "log4j.appender.file.layout=org.apache.log4j.PatternLayout\n" +
+        "log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n");
+    expectedAmsLog4j.put("ams_log_max_backup_size", "10");
+    expectedAmsLog4j.put("ams_log_number_of_backup_files", "12");
 
 
     Config mockAmsLog4j = easyMockSupport.createNiceMock(Config.class);
@@ -854,122 +898,10 @@ public class UpgradeCatalog250Test {
     expect(mockAmsLog4j.getProperties()).andReturn(oldAmsLog4j).anyTimes();
     Capture<Map<String, String>> AmsLog4jCapture = EasyMock.newCapture();
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(AmsLog4jCapture), anyString(),
-            anyObject(Map.class))).andReturn(config).once();
+        anyObject(Map.class))).andReturn(config).once();
 
     Map<String, String> oldAmsHbaseLog4j = ImmutableMap.of(
-            "content","# Licensed to the Apache Software Foundation (ASF) under one\n" +
-                    "# or more contributor license agreements.  See the NOTICE file\n" +
-                    "# distributed with this work for additional information\n" +
-                    "# regarding copyright ownership.  The ASF licenses this file\n" +
-                    "# to you under the Apache License, Version 2.0 (the\n" +
-                    "# \"License\"); you may not use this file except in compliance\n" +
-                    "# with the License.  You may obtain a copy of the License at\n" +
-                    "#\n" +
-                    "#     http://www.apache.org/licenses/LICENSE-2.0\n" +
-                    "#\n" +
-                    "# Unless required by applicable law or agreed to in writing, software\n" +
-                    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
-                    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
-                    "# See the License for the specific language governing permissions and\n" +
-                    "# limitations under the License.\n" +
-                    "\n" +
-                    "\n" +
-                    "# Define some default values that can be overridden by system properties\n" +
-                    "hbase.root.logger=INFO,console\n" +
-                    "hbase.security.logger=INFO,console\n" +
-                    "hbase.log.dir=.\n" +
-                    "hbase.log.file=hbase.log\n" +
-                    "\n" +
-                    "# Define the root logger to the system property \"hbase.root.logger\".\n" +
-                    "log4j.rootLogger=${hbase.root.logger}\n" +
-                    "\n" +
-                    "# Logging Threshold\n" +
-                    "log4j.threshold=ALL\n" +
-                    "\n" +
-                    "#\n" +
-                    "# Daily Rolling File Appender\n" +
-                    "#\n" +
-                    "log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender\n" +
-                    "log4j.appender.DRFA.File=${hbase.log.dir}/${hbase.log.file}\n" +
-                    "\n" +
-                    "# Rollver at midnight\n" +
-                    "log4j.appender.DRFA.DatePattern=.yyyy-MM-dd\n" +
-                    "\n" +
-                    "# 30-day backup\n" +
-                    "#log4j.appender.DRFA.MaxBackupIndex=30\n" +
-                    "log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout\n" +
-                    "\n" +
-                    "# Pattern format: Date LogLevel LoggerName LogMessage\n" +
-                    "log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
-                    "\n" +
-                    "# Rolling File Appender properties\n" +
-                    "hbase.log.maxfilesize=256MB\n" +
-                    "hbase.log.maxbackupindex=20\n" +
-                    "\n" +
-                    "# Rolling File Appender\n" +
-                    "log4j.appender.RFA=org.apache.log4j.RollingFileAppender\n" +
-                    "log4j.appender.RFA.File=${hbase.log.dir}/${hbase.log.file}\n" +
-                    "\n" +
-                    "log4j.appender.RFA.MaxFileSize=${hbase.log.maxfilesize}\n" +
-                    "log4j.appender.RFA.MaxBackupIndex=${hbase.log.maxbackupindex}\n" +
-                    "\n" +
-                    "log4j.appender.RFA.layout=org.apache.log4j.PatternLayout\n" +
-                    "log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
-                    "\n" +
-                    "#\n" +
-                    "# Security audit appender\n" +
-                    "#\n" +
-                    "hbase.security.log.file=SecurityAuth.audit\n" +
-                    "hbase.security.log.maxfilesize=256MB\n" +
-                    "hbase.security.log.maxbackupindex=20\n" +
-                    "log4j.appender.RFAS=org.apache.log4j.RollingFileAppender\n" +
-                    "log4j.appender.RFAS.File=${hbase.log.dir}/${hbase.security.log.file}\n" +
-                    "log4j.appender.RFAS.MaxFileSize=${hbase.security.log.maxfilesize}\n" +
-                    "log4j.appender.RFAS.MaxBackupIndex=${hbase.security.log.maxbackupindex}\n" +
-                    "log4j.appender.RFAS.layout=org.apache.log4j.PatternLayout\n" +
-                    "log4j.appender.RFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\n" +
-                    "log4j.category.SecurityLogger=${hbase.security.logger}\n" +
-                    "log4j.additivity.SecurityLogger=false\n" +
-                    "#log4j.logger.SecurityLogger.org.apache.hadoop.hbase.security.access.AccessController=TRACE\n" +
-                    "\n" +
-                    "#\n" +
-                    "# Null Appender\n" +
-                    "#\n" +
-                    "log4j.appender.NullAppender=org.apache.log4j.varia.NullAppender\n" +
-                    "\n" +
-                    "#\n" +
-                    "# console\n" +
-                    "# Add \"console\" to rootlogger above if you want to use this\n" +
-                    "#\n" +
-                    "log4j.appender.console=org.apache.log4j.ConsoleAppender\n" +
-                    "log4j.appender.console.target=System.err\n" +
-                    "log4j.appender.console.layout=org.apache.log4j.PatternLayout\n" +
-                    "log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
-                    "\n" +
-                    "# Custom Logging levels\n" +
-                    "\n" +
-                    "log4j.logger.org.apache.zookeeper=INFO\n" +
-                    "#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG\n" +
-                    "log4j.logger.org.apache.hadoop.hbase=INFO\n" +
-                    "# Make these two classes INFO-level. Make them DEBUG to see more zk debug.\n" +
-                    "log4j.logger.org.apache.hadoop.hbase.zookeeper.ZKUtil=INFO\n" +
-                    "log4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO\n" +
-                    "#log4j.logger.org.apache.hadoop.dfs=DEBUG\n" +
-                    "# Set this class to log INFO only otherwise its OTT\n" +
-                    "# Enable this to get detailed connection error/retry logging.\n" +
-                    "# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=TRACE\n" +
-                    "\n" +
-                    "\n" +
-                    "# Uncomment this line to enable tracing on _every_ RPC call (this can be a lot of output)\n" +
-                    "#log4j.logger.org.apache.hadoop.ipc.HBaseServer.trace=DEBUG\n" +
-                    "\n" +
-                    "# Uncomment the below if you want to remove logging of client region caching'\n" +
-                    "# and scan of .META. messages\n" +
-                    "# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=INFO\n" +
-                    "# log4j.logger.org.apache.hadoop.hbase.client.MetaScanner=INFO\n");
-
-    Map<String, String> expectedAmsHbaseLog4j = new HashMap<String,String>();
-    expectedAmsHbaseLog4j.put("content","# Licensed to the Apache Software Foundation (ASF) under one\n" +
+        "content", "# Licensed to the Apache Software Foundation (ASF) under one\n" +
             "# or more contributor license agreements.  See the NOTICE file\n" +
             "# distributed with this work for additional information\n" +
             "# regarding copyright ownership.  The ASF licenses this file\n" +
@@ -1015,8 +947,8 @@ public class UpgradeCatalog250Test {
             "log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
             "\n" +
             "# Rolling File Appender properties\n" +
-            "hbase.log.maxfilesize={{ams_hbase_log_maxfilesize}}MB\n" +
-            "hbase.log.maxbackupindex={{ams_hbase_log_maxbackupindex}}\n" +
+            "hbase.log.maxfilesize=256MB\n" +
+            "hbase.log.maxbackupindex=20\n" +
             "\n" +
             "# Rolling File Appender\n" +
             "log4j.appender.RFA=org.apache.log4j.RollingFileAppender\n" +
@@ -1032,8 +964,8 @@ public class UpgradeCatalog250Test {
             "# Security audit appender\n" +
             "#\n" +
             "hbase.security.log.file=SecurityAuth.audit\n" +
-            "hbase.security.log.maxfilesize={{ams_hbase_security_log_maxfilesize}}MB\n" +
-            "hbase.security.log.maxbackupindex={{ams_hbase_security_log_maxbackupindex}}\n" +
+            "hbase.security.log.maxfilesize=256MB\n" +
+            "hbase.security.log.maxbackupindex=20\n" +
             "log4j.appender.RFAS=org.apache.log4j.RollingFileAppender\n" +
             "log4j.appender.RFAS.File=${hbase.log.dir}/${hbase.security.log.file}\n" +
             "log4j.appender.RFAS.MaxFileSize=${hbase.security.log.maxfilesize}\n" +
@@ -1079,21 +1011,133 @@ public class UpgradeCatalog250Test {
             "# and scan of .META. messages\n" +
             "# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=INFO\n" +
             "# log4j.logger.org.apache.hadoop.hbase.client.MetaScanner=INFO\n");
-    expectedAmsHbaseLog4j.put("ams_hbase_log_maxfilesize","256");
-    expectedAmsHbaseLog4j.put("ams_hbase_log_maxbackupindex","20");
-    expectedAmsHbaseLog4j.put("ams_hbase_security_log_maxfilesize","256");
-    expectedAmsHbaseLog4j.put("ams_hbase_security_log_maxbackupindex","20");
+
+    Map<String, String> expectedAmsHbaseLog4j = new HashMap<String, String>();
+    expectedAmsHbaseLog4j.put("content", "# Licensed to the Apache Software Foundation (ASF) under one\n" +
+        "# or more contributor license agreements.  See the NOTICE file\n" +
+        "# distributed with this work for additional information\n" +
+        "# regarding copyright ownership.  The ASF licenses this file\n" +
+        "# to you under the Apache License, Version 2.0 (the\n" +
+        "# \"License\"); you may not use this file except in compliance\n" +
+        "# with the License.  You may obtain a copy of the License at\n" +
+        "#\n" +
+        "#     http://www.apache.org/licenses/LICENSE-2.0\n" +
+        "#\n" +
+        "# Unless required by applicable law or agreed to in writing, software\n" +
+        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+        "# See the License for the specific language governing permissions and\n" +
+        "# limitations under the License.\n" +
+        "\n" +
+        "\n" +
+        "# Define some default values that can be overridden by system properties\n" +
+        "hbase.root.logger=INFO,console\n" +
+        "hbase.security.logger=INFO,console\n" +
+        "hbase.log.dir=.\n" +
+        "hbase.log.file=hbase.log\n" +
+        "\n" +
+        "# Define the root logger to the system property \"hbase.root.logger\".\n" +
+        "log4j.rootLogger=${hbase.root.logger}\n" +
+        "\n" +
+        "# Logging Threshold\n" +
+        "log4j.threshold=ALL\n" +
+        "\n" +
+        "#\n" +
+        "# Daily Rolling File Appender\n" +
+        "#\n" +
+        "log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender\n" +
+        "log4j.appender.DRFA.File=${hbase.log.dir}/${hbase.log.file}\n" +
+        "\n" +
+        "# Rollver at midnight\n" +
+        "log4j.appender.DRFA.DatePattern=.yyyy-MM-dd\n" +
+        "\n" +
+        "# 30-day backup\n" +
+        "#log4j.appender.DRFA.MaxBackupIndex=30\n" +
+        "log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout\n" +
+        "\n" +
+        "# Pattern format: Date LogLevel LoggerName LogMessage\n" +
+        "log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
+        "\n" +
+        "# Rolling File Appender properties\n" +
+        "hbase.log.maxfilesize={{ams_hbase_log_maxfilesize}}MB\n" +
+        "hbase.log.maxbackupindex={{ams_hbase_log_maxbackupindex}}\n" +
+        "\n" +
+        "# Rolling File Appender\n" +
+        "log4j.appender.RFA=org.apache.log4j.RollingFileAppender\n" +
+        "log4j.appender.RFA.File=${hbase.log.dir}/${hbase.log.file}\n" +
+        "\n" +
+        "log4j.appender.RFA.MaxFileSize=${hbase.log.maxfilesize}\n" +
+        "log4j.appender.RFA.MaxBackupIndex=${hbase.log.maxbackupindex}\n" +
+        "\n" +
+        "log4j.appender.RFA.layout=org.apache.log4j.PatternLayout\n" +
+        "log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
+        "\n" +
+        "#\n" +
+        "# Security audit appender\n" +
+        "#\n" +
+        "hbase.security.log.file=SecurityAuth.audit\n" +
+        "hbase.security.log.maxfilesize={{ams_hbase_security_log_maxfilesize}}MB\n" +
+        "hbase.security.log.maxbackupindex={{ams_hbase_security_log_maxbackupindex}}\n" +
+        "log4j.appender.RFAS=org.apache.log4j.RollingFileAppender\n" +
+        "log4j.appender.RFAS.File=${hbase.log.dir}/${hbase.security.log.file}\n" +
+        "log4j.appender.RFAS.MaxFileSize=${hbase.security.log.maxfilesize}\n" +
+        "log4j.appender.RFAS.MaxBackupIndex=${hbase.security.log.maxbackupindex}\n" +
+        "log4j.appender.RFAS.layout=org.apache.log4j.PatternLayout\n" +
+        "log4j.appender.RFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n\n" +
+        "log4j.category.SecurityLogger=${hbase.security.logger}\n" +
+        "log4j.additivity.SecurityLogger=false\n" +
+        "#log4j.logger.SecurityLogger.org.apache.hadoop.hbase.security.access.AccessController=TRACE\n" +
+        "\n" +
+        "#\n" +
+        "# Null Appender\n" +
+        "#\n" +
+        "log4j.appender.NullAppender=org.apache.log4j.varia.NullAppender\n" +
+        "\n" +
+        "#\n" +
+        "# console\n" +
+        "# Add \"console\" to rootlogger above if you want to use this\n" +
+        "#\n" +
+        "log4j.appender.console=org.apache.log4j.ConsoleAppender\n" +
+        "log4j.appender.console.target=System.err\n" +
+        "log4j.appender.console.layout=org.apache.log4j.PatternLayout\n" +
+        "log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n\n" +
+        "\n" +
+        "# Custom Logging levels\n" +
+        "\n" +
+        "log4j.logger.org.apache.zookeeper=INFO\n" +
+        "#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG\n" +
+        "log4j.logger.org.apache.hadoop.hbase=INFO\n" +
+        "# Make these two classes INFO-level. Make them DEBUG to see more zk debug.\n" +
+        "log4j.logger.org.apache.hadoop.hbase.zookeeper.ZKUtil=INFO\n" +
+        "log4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO\n" +
+        "#log4j.logger.org.apache.hadoop.dfs=DEBUG\n" +
+        "# Set this class to log INFO only otherwise its OTT\n" +
+        "# Enable this to get detailed connection error/retry logging.\n" +
+        "# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=TRACE\n" +
+        "\n" +
+        "\n" +
+        "# Uncomment this line to enable tracing on _every_ RPC call (this can be a lot of output)\n" +
+        "#log4j.logger.org.apache.hadoop.ipc.HBaseServer.trace=DEBUG\n" +
+        "\n" +
+        "# Uncomment the below if you want to remove logging of client region caching'\n" +
+        "# and scan of .META. messages\n" +
+        "# log4j.logger.org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation=INFO\n" +
+        "# log4j.logger.org.apache.hadoop.hbase.client.MetaScanner=INFO\n");
+    expectedAmsHbaseLog4j.put("ams_hbase_log_maxfilesize", "256");
+    expectedAmsHbaseLog4j.put("ams_hbase_log_maxbackupindex", "20");
+    expectedAmsHbaseLog4j.put("ams_hbase_security_log_maxfilesize", "256");
+    expectedAmsHbaseLog4j.put("ams_hbase_security_log_maxbackupindex", "20");
 
     Config mockAmsHbaseLog4j = easyMockSupport.createNiceMock(Config.class);
     expect(cluster.getDesiredConfigByType("ams-hbase-log4j")).andReturn(mockAmsHbaseLog4j).atLeastOnce();
     expect(mockAmsHbaseLog4j.getProperties()).andReturn(oldAmsHbaseLog4j).anyTimes();
     Capture<Map<String, String>> AmsHbaseLog4jCapture = EasyMock.newCapture();
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(AmsHbaseLog4jCapture), anyString(),
-            anyObject(Map.class))).andReturn(config).once();
+        anyObject(Map.class))).andReturn(config).once();
 
     replay(clusters, cluster);
     replay(controller, injector2);
-    replay(mockAmsLog4j,mockAmsHbaseLog4j);
+    replay(mockAmsLog4j, mockAmsHbaseLog4j);
     new UpgradeCatalog250(injector2).updateAMSConfigs();
     easyMockSupport.verifyAll();
 
@@ -1115,7 +1159,7 @@ public class UpgradeCatalog250Test {
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
         .addMockedMethod("createConfiguration")
-        .addMockedMethod("getClusters", new Class[] {})
+        .addMockedMethod("getClusters", new Class[]{})
         .addMockedMethod("createConfig")
         .withConstructor(actionManager, clusters, injector)
         .createNiceMock();
@@ -1138,7 +1182,7 @@ public class UpgradeCatalog250Test {
     expect(mockLogSearchProperties.getProperties()).andReturn(oldLogSearchProperties).anyTimes();
     Capture<Map<String, String>> logSearchPropertiesCapture = EasyMock.newCapture();
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(logSearchPropertiesCapture), anyString(),
-      EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+        EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
 
     Map<String, String> oldLogFeederEnv = ImmutableMap.of(
         "content", "infra_solr_ssl_enabled");
@@ -1172,44 +1216,44 @@ public class UpgradeCatalog250Test {
     Map<String, String> oldLogFeederLog4j = ImmutableMap.of(
         "content",
         "    <appender name=\"rolling_file\" class=\"org.apache.log4j.RollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logfeeder.log\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"11MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"12\"/>\n" +
-        "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
-        "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\"/>\n" +
-        "    </layout>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"rolling_file_json\"\n" +
-        "    class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logsearch-logfeeder.json\" />\n" +
-        "    <param name=\"append\" value=\"true\" />\n" +
-        "    <param name=\"maxFileSize\" value=\"13MB\" />\n" +
-        "    <param name=\"maxBackupIndex\" value=\"14\" />\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\" />\n" +
-        "  </appender>");
+            "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logfeeder.log\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"11MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"12\"/>\n" +
+            "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
+            "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\"/>\n" +
+            "    </layout>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"rolling_file_json\"\n" +
+            "    class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logsearch-logfeeder.json\" />\n" +
+            "    <param name=\"append\" value=\"true\" />\n" +
+            "    <param name=\"maxFileSize\" value=\"13MB\" />\n" +
+            "    <param name=\"maxBackupIndex\" value=\"14\" />\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\" />\n" +
+            "  </appender>");
 
     Map<String, String> expectedLogFeederLog4j = ImmutableMap.of(
         "content",
         "    <appender name=\"rolling_file\" class=\"org.apache.log4j.RollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logfeeder.log\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"{{logfeeder_log_maxfilesize}}MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"{{logfeeder_log_maxbackupindex}}\"/>\n" +
-        "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
-        "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\"/>\n" +
-        "    </layout>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"rolling_file_json\"\n" +
-        "    class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logsearch-logfeeder.json\" />\n" +
-        "    <param name=\"append\" value=\"true\" />\n" +
-        "    <param name=\"maxFileSize\" value=\"{{logfeeder_json_log_maxfilesize}}MB\" />\n" +
-        "    <param name=\"maxBackupIndex\" value=\"{{logfeeder_json_log_maxbackupindex}}\" />\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\" />\n" +
-        "  </appender>",
+            "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logfeeder.log\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"{{logfeeder_log_maxfilesize}}MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"{{logfeeder_log_maxbackupindex}}\"/>\n" +
+            "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
+            "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\"/>\n" +
+            "    </layout>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"rolling_file_json\"\n" +
+            "    class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logfeeder_log_dir}}/logsearch-logfeeder.json\" />\n" +
+            "    <param name=\"append\" value=\"true\" />\n" +
+            "    <param name=\"maxFileSize\" value=\"{{logfeeder_json_log_maxfilesize}}MB\" />\n" +
+            "    <param name=\"maxBackupIndex\" value=\"{{logfeeder_json_log_maxbackupindex}}\" />\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\" />\n" +
+            "  </appender>",
         "logfeeder_log_maxfilesize", "11",
         "logfeeder_log_maxbackupindex", "12",
         "logfeeder_json_log_maxfilesize", "13",
@@ -1225,113 +1269,113 @@ public class UpgradeCatalog250Test {
     Map<String, String> oldLogSearchLog4j = ImmutableMap.of(
         "content",
         "  <appender name=\"rolling_file\" class=\"org.apache.log4j.RollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.err\" />\n" +
-        "    <param name=\"Threshold\" value=\"info\" />\n" +
-        "    <param name=\"append\" value=\"true\" />\n" +
-        "    <param name=\"maxFileSize\" value=\"11MB\" />\n" +
-        "    <param name=\"maxBackupIndex\" value=\"12\" />\n" +
-        "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
-        "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\" />\n" +
-        "    </layout>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.json\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"13MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"14\"/>\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"audit_rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-audit.json\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"15MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"16\"/>\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"performance_analyzer_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-performance.json\"/>\n" +
-        "    <param name=\"Threshold\" value=\"info\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"17MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"18\"/>\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <logger name=\"org.apache.ambari.logsearch.audit\" additivity=\"true\">\n" +
-        "     <appender-ref ref=\"audit_rolling_file_json\"/>\n" +
-        "  </logger>\n" +
-        "\n" +
-        "  <logger name=\"org.apache.ambari.logsearch.performance\" additivity=\"false\">\n" +
-        "    <appender-ref ref=\"performance_analyzer_json\"/>\n" +
-        "  </logger>\n" +
-        "\n" +
-        "  <category name=\"org.apache.ambari.logsearch\" additivity=\"false\">\n" +
-        "    <priority value=\"warn\"/>\n" +
-        "    <appender-ref ref=\"rolling_file_json\"/>\n" +
-        "  </category>");
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.err\" />\n" +
+            "    <param name=\"Threshold\" value=\"info\" />\n" +
+            "    <param name=\"append\" value=\"true\" />\n" +
+            "    <param name=\"maxFileSize\" value=\"11MB\" />\n" +
+            "    <param name=\"maxBackupIndex\" value=\"12\" />\n" +
+            "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
+            "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\" />\n" +
+            "    </layout>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.json\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"13MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"14\"/>\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"audit_rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-audit.json\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"15MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"16\"/>\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"performance_analyzer_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-performance.json\"/>\n" +
+            "    <param name=\"Threshold\" value=\"info\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"17MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"18\"/>\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <logger name=\"org.apache.ambari.logsearch.audit\" additivity=\"true\">\n" +
+            "     <appender-ref ref=\"audit_rolling_file_json\"/>\n" +
+            "  </logger>\n" +
+            "\n" +
+            "  <logger name=\"org.apache.ambari.logsearch.performance\" additivity=\"false\">\n" +
+            "    <appender-ref ref=\"performance_analyzer_json\"/>\n" +
+            "  </logger>\n" +
+            "\n" +
+            "  <category name=\"org.apache.ambari.logsearch\" additivity=\"false\">\n" +
+            "    <priority value=\"warn\"/>\n" +
+            "    <appender-ref ref=\"rolling_file_json\"/>\n" +
+            "  </category>");
 
     Map<String, String> expectedLogSearchLog4j = new HashMap<>();
-      expectedLogSearchLog4j.put("content",
+    expectedLogSearchLog4j.put("content",
         "  <appender name=\"rolling_file\" class=\"org.apache.log4j.RollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.log\" />\n" +
-        "    <param name=\"Threshold\" value=\"info\" />\n" +
-        "    <param name=\"append\" value=\"true\" />\n" +
-        "    <param name=\"maxFileSize\" value=\"{{logsearch_log_maxfilesize}}MB\" />\n" +
-        "    <param name=\"maxBackupIndex\" value=\"{{logsearch_log_maxbackupindex}}\" />\n" +
-        "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
-        "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\" />\n" +
-        "    </layout>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.json\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"{{logsearch_json_log_maxfilesize}}MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"{{logsearch_json_log_maxbackupindex}}\"/>\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"audit_rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-audit.json\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"{{logsearch_audit_log_maxfilesize}}MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"{{logsearch_audit_log_maxbackupindex}}\"/>\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <appender name=\"performance_analyzer_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
-        "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-performance.json\"/>\n" +
-        "    <param name=\"Threshold\" value=\"info\"/>\n" +
-        "    <param name=\"append\" value=\"true\"/>\n" +
-        "    <param name=\"maxFileSize\" value=\"{{logsearch_perf_log_maxfilesize}}MB\"/>\n" +
-        "    <param name=\"maxBackupIndex\" value=\"{{logsearch_perf_log_maxbackupindex}}\"/>\n" +
-        "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
-        "  </appender>\n" +
-        "\n" +
-        "  <logger name=\"org.apache.ambari.logsearch.audit\" additivity=\"true\">\n" +
-        "     <appender-ref ref=\"audit_rolling_file_json\"/>\n" +
-        "  </logger>\n" +
-        "\n" +
-        "  <logger name=\"org.apache.ambari.logsearch.performance\" additivity=\"false\">\n" +
-        "    <appender-ref ref=\"performance_analyzer_json\"/>\n" +
-        "  </logger>\n" +
-        "\n" +
-        "  <category name=\"org.apache.ambari.logsearch\" additivity=\"false\">\n" +
-        "    <priority value=\"info\"/>\n" +
-        "    <appender-ref ref=\"rolling_file_json\"/>\n" +
-        "  </category>");
-
-      expectedLogSearchLog4j.put("logsearch_log_maxfilesize", "11");
-      expectedLogSearchLog4j.put("logsearch_log_maxbackupindex", "12");
-      expectedLogSearchLog4j.put("logsearch_json_log_maxfilesize", "13");
-      expectedLogSearchLog4j.put("logsearch_json_log_maxbackupindex", "14");
-      expectedLogSearchLog4j.put("logsearch_audit_log_maxfilesize", "15");
-      expectedLogSearchLog4j.put("logsearch_audit_log_maxbackupindex", "16");
-      expectedLogSearchLog4j.put("logsearch_perf_log_maxfilesize", "17");
-      expectedLogSearchLog4j.put("logsearch_perf_log_maxbackupindex", "18");
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.log\" />\n" +
+            "    <param name=\"Threshold\" value=\"info\" />\n" +
+            "    <param name=\"append\" value=\"true\" />\n" +
+            "    <param name=\"maxFileSize\" value=\"{{logsearch_log_maxfilesize}}MB\" />\n" +
+            "    <param name=\"maxBackupIndex\" value=\"{{logsearch_log_maxbackupindex}}\" />\n" +
+            "    <layout class=\"org.apache.log4j.PatternLayout\">\n" +
+            "      <param name=\"ConversionPattern\" value=\"%d [%t] %-5p %C{6} (%F:%L) - %m%n\" />\n" +
+            "    </layout>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch.json\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"{{logsearch_json_log_maxfilesize}}MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"{{logsearch_json_log_maxbackupindex}}\"/>\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"audit_rolling_file_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-audit.json\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"{{logsearch_audit_log_maxfilesize}}MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"{{logsearch_audit_log_maxbackupindex}}\"/>\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <appender name=\"performance_analyzer_json\" class=\"org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender\">\n" +
+            "    <param name=\"file\" value=\"{{logsearch_log_dir}}/logsearch-performance.json\"/>\n" +
+            "    <param name=\"Threshold\" value=\"info\"/>\n" +
+            "    <param name=\"append\" value=\"true\"/>\n" +
+            "    <param name=\"maxFileSize\" value=\"{{logsearch_perf_log_maxfilesize}}MB\"/>\n" +
+            "    <param name=\"maxBackupIndex\" value=\"{{logsearch_perf_log_maxbackupindex}}\"/>\n" +
+            "    <layout class=\"org.apache.ambari.logsearch.appender.LogsearchConversion\"/>\n" +
+            "  </appender>\n" +
+            "\n" +
+            "  <logger name=\"org.apache.ambari.logsearch.audit\" additivity=\"true\">\n" +
+            "     <appender-ref ref=\"audit_rolling_file_json\"/>\n" +
+            "  </logger>\n" +
+            "\n" +
+            "  <logger name=\"org.apache.ambari.logsearch.performance\" additivity=\"false\">\n" +
+            "    <appender-ref ref=\"performance_analyzer_json\"/>\n" +
+            "  </logger>\n" +
+            "\n" +
+            "  <category name=\"org.apache.ambari.logsearch\" additivity=\"false\">\n" +
+            "    <priority value=\"info\"/>\n" +
+            "    <appender-ref ref=\"rolling_file_json\"/>\n" +
+            "  </category>");
+
+    expectedLogSearchLog4j.put("logsearch_log_maxfilesize", "11");
+    expectedLogSearchLog4j.put("logsearch_log_maxbackupindex", "12");
+    expectedLogSearchLog4j.put("logsearch_json_log_maxfilesize", "13");
+    expectedLogSearchLog4j.put("logsearch_json_log_maxbackupindex", "14");
+    expectedLogSearchLog4j.put("logsearch_audit_log_maxfilesize", "15");
+    expectedLogSearchLog4j.put("logsearch_audit_log_maxbackupindex", "16");
+    expectedLogSearchLog4j.put("logsearch_perf_log_maxfilesize", "17");
+    expectedLogSearchLog4j.put("logsearch_perf_log_maxbackupindex", "18");
 
     Config mockLogSearchLog4j = easyMockSupport.createNiceMock(Config.class);
     expect(cluster.getDesiredConfigByType("logsearch-log4j")).andReturn(mockLogSearchLog4j).atLeastOnce();
@@ -1348,16 +1392,16 @@ public class UpgradeCatalog250Test {
 
     Map<String, String> updatedLogSearchProperties = logSearchPropertiesCapture.getValue();
     assertTrue(Maps.difference(expectedLogSearchProperties, updatedLogSearchProperties).areEqual());
-    
+
     Map<String, String> updatedLogFeederEnv = logFeederEnvCapture.getValue();
     assertTrue(Maps.difference(expectedLogFeederEnv, updatedLogFeederEnv).areEqual());
-    
+
     Map<String, String> updatedLogSearchEnv = logSearchEnvCapture.getValue();
     assertTrue(Maps.difference(expectedLogSearchEnv, updatedLogSearchEnv).areEqual());
-    
+
     Map<String, String> updatedLogFeederLog4j = logFeederLog4jCapture.getValue();
     assertTrue(Maps.difference(expectedLogFeederLog4j, updatedLogFeederLog4j).areEqual());
-    
+
     Map<String, String> updatedLogSearchLog4j = logSearchLog4jCapture.getValue();
     assertTrue(Maps.difference(expectedLogSearchLog4j, updatedLogSearchLog4j).areEqual());
   }
@@ -1372,7 +1416,7 @@ public class UpgradeCatalog250Test {
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
         .addMockedMethod("createConfiguration")
-        .addMockedMethod("getClusters", new Class[] {})
+        .addMockedMethod("getClusters", new Class[]{})
         .addMockedMethod("createConfig")
         .withConstructor(actionManager, clusters, injector)
         .createNiceMock();
@@ -1382,15 +1426,15 @@ public class UpgradeCatalog250Test {
 
     Map<String, String> oldInfraSolrEnv = ImmutableMap.of(
         "content", "SOLR_SSL_TRUST_STORE={{infra_solr_keystore_location}}\n" +
-                   "SOLR_SSL_TRUST_STORE_PASSWORD={{infra_solr_keystore_password}}\n" +
-                   "SOLR_KERB_NAME_RULES={{infra_solr_kerberos_name_rules}}\n" +
-                   "SOLR_AUTHENTICATION_OPTS=\" -DauthenticationPlugin=org.apache.solr.security.KerberosPlugin -Djava.security.auth.login.config=$SOLR_JAAS_FILE -Dsolr.kerberos.principal=${SOLR_KERB_PRINCIPAL} -Dsolr.kerberos.keytab=${SOLR_KERB_KEYTAB} -Dsolr.kerberos.cookie.domain=${SOLR_HOST} -Dsolr.kerberos.name.rules=${SOLR_KERB_NAME_RULES}\"");
+            "SOLR_SSL_TRUST_STORE_PASSWORD={{infra_solr_keystore_password}}\n" +
+            "SOLR_KERB_NAME_RULES={{infra_solr_kerberos_name_rules}}\n" +
+            "SOLR_AUTHENTICATION_OPTS=\" -DauthenticationPlugin=org.apache.solr.security.KerberosPlugin -Djava.security.auth.login.config=$SOLR_JAAS_FILE -Dsolr.kerberos.principal=${SOLR_KERB_PRINCIPAL} -Dsolr.kerberos.keytab=${SOLR_KERB_KEYTAB} -Dsolr.kerberos.cookie.domain=${SOLR_HOST} -Dsolr.kerberos.name.rules=${SOLR_KERB_NAME_RULES}\"");
 
     Map<String, String> expectedInfraSolrEnv = ImmutableMap.of(
         "content", "SOLR_SSL_TRUST_STORE={{infra_solr_truststore_location}}\n" +
-                   "SOLR_SSL_TRUST_STORE_PASSWORD={{infra_solr_truststore_password}}\n" +
-                   "SOLR_KERB_NAME_RULES=\"{{infra_solr_kerberos_name_rules}}\"\n" +
-                   "SOLR_AUTHENTICATION_OPTS=\" -DauthenticationPlugin=org.apache.solr.security.KerberosPlugin -Djava.security.auth.login.config=$SOLR_JAAS_FILE -Dsolr.kerberos.principal=${SOLR_KERB_PRINCIPAL} -Dsolr.kerberos.keytab=${SOLR_KERB_KEYTAB} -Dsolr.kerberos.cookie.domain=${SOLR_HOST}\"");
+            "SOLR_SSL_TRUST_STORE_PASSWORD={{infra_solr_truststore_password}}\n" +
+            "SOLR_KERB_NAME_RULES=\"{{infra_solr_kerberos_name_rules}}\"\n" +
+            "SOLR_AUTHENTICATION_OPTS=\" -DauthenticationPlugin=org.apache.solr.security.KerberosPlugin -Djava.security.auth.login.config=$SOLR_JAAS_FILE -Dsolr.kerberos.principal=${SOLR_KERB_PRINCIPAL} -Dsolr.kerberos.keytab=${SOLR_KERB_KEYTAB} -Dsolr.kerberos.cookie.domain=${SOLR_HOST}\"");
 
     Config mockInfraSolrEnv = easyMockSupport.createNiceMock(Config.class);
     expect(cluster.getDesiredConfigByType("infra-solr-env")).andReturn(mockInfraSolrEnv).atLeastOnce();
@@ -1401,11 +1445,11 @@ public class UpgradeCatalog250Test {
 
     Map<String, String> oldInfraSolrLog4j = ImmutableMap.of(
         "content", "log4j.appender.file.MaxFileSize=15MB\n" +
-                   "log4j.appender.file.MaxBackupIndex=5\n");
+            "log4j.appender.file.MaxBackupIndex=5\n");
 
     Map<String, String> expectedInfraSolrLog4j = ImmutableMap.of(
         "content", "log4j.appender.file.MaxFileSize={{infra_log_maxfilesize}}MB\n" +
-                   "log4j.appender.file.MaxBackupIndex={{infra_log_maxbackupindex}}\n",
+            "log4j.appender.file.MaxBackupIndex={{infra_log_maxbackupindex}}\n",
         "infra_log_maxfilesize", "15",
         "infra_log_maxbackupindex", "5");
 
@@ -1418,13 +1462,13 @@ public class UpgradeCatalog250Test {
 
     Map<String, String> oldInfraSolrClientLog4j = ImmutableMap.of(
         "content", "log4j.appender.file.File\u003d{{infra_client_log|default(\u0027/var/log/ambari-infra-solr-client/solr-client.log\u0027)}}\n" +
-                   "log4j.appender.file.MaxFileSize=55MB\n" +
-                   "log4j.appender.file.MaxBackupIndex=10\n");
+            "log4j.appender.file.MaxFileSize=55MB\n" +
+            "log4j.appender.file.MaxBackupIndex=10\n");
 
     Map<String, String> expectedInfraSolrClientLog4j = ImmutableMap.of(
         "content", "log4j.appender.file.File\u003d{{solr_client_log|default(\u0027/var/log/ambari-infra-solr-client/solr-client.log\u0027)}}\n" +
-                   "log4j.appender.file.MaxFileSize={{solr_client_log_maxfilesize}}MB\n" +
-                   "log4j.appender.file.MaxBackupIndex={{solr_client_log_maxbackupindex}}\n",
+            "log4j.appender.file.MaxFileSize={{solr_client_log_maxfilesize}}MB\n" +
+            "log4j.appender.file.MaxBackupIndex={{solr_client_log_maxbackupindex}}\n",
         "infra_client_log_maxfilesize", "55",
         "infra_client_log_maxbackupindex", "10");
 
@@ -1461,7 +1505,7 @@ public class UpgradeCatalog250Test {
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
         .addMockedMethod("createConfiguration")
-        .addMockedMethod("getClusters", new Class[] {})
+        .addMockedMethod("getClusters", new Class[]{})
         .addMockedMethod("createConfig")
         .withConstructor(actionManager, clusters, injector)
         .createNiceMock();
@@ -1483,10 +1527,10 @@ public class UpgradeCatalog250Test {
         "hive_ambari_database", "MySQL");
 
     Map<String, String> oldHiveIntSite = ImmutableMap.of(
-        "hive.llap.daemon.rpc.port","15001");
+        "hive.llap.daemon.rpc.port", "15001");
 
     Map<String, String> expectedHiveIntSite = ImmutableMap.of(
-        "hive.llap.daemon.rpc.port","0",
+        "hive.llap.daemon.rpc.port", "0",
         "hive.auto.convert.join.noconditionaltask.size", "1000000000");
 
     Config mockHsiSite = easyMockSupport.createNiceMock(Config.class);
@@ -1494,7 +1538,7 @@ public class UpgradeCatalog250Test {
     expect(mockHsiSite.getProperties()).andReturn(oldHiveIntSite).anyTimes();
     Capture<Map<String, String>> hsiSiteCapture = EasyMock.newCapture();
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(hsiSiteCapture), anyString(),
-                                   EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+        EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
 
     Config mockHiveEnv = easyMockSupport.createNiceMock(Config.class);
     expect(cluster.getDesiredConfigByType("hive-env")).andReturn(mockHiveEnv).atLeastOnce();
@@ -1505,7 +1549,7 @@ public class UpgradeCatalog250Test {
     expect(mockHsiEnv.getProperties()).andReturn(oldHsiEnv).anyTimes();
     Capture<Map<String, String>> hsiEnvCapture = EasyMock.newCapture();
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(hsiEnvCapture), anyString(),
-                                   EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+        EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
 
     replay(clusters, cluster);
     replay(controller, injector2);
@@ -1577,11 +1621,11 @@ public class UpgradeCatalog250Test {
     replay(clusters, mockAtlasConfig, cluster);
 
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
-      .addMockedMethod("createConfiguration")
-      .addMockedMethod("getClusters", new Class[] { })
-      .addMockedMethod("createConfig")
-      .withConstructor(actionManager, clusters, injector)
-      .createNiceMock();
+        .addMockedMethod("createConfiguration")
+        .addMockedMethod("getClusters", new Class[]{})
+        .addMockedMethod("createConfig")
+        .withConstructor(actionManager, clusters, injector)
+        .createNiceMock();
 
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     Capture<Map<String, String>> propertiesCapture = EasyMock.newCapture();
@@ -1633,8 +1677,8 @@ public class UpgradeCatalog250Test {
 
     ArtifactEntity artifactEntity = createNiceMock(ArtifactEntity.class);
     expect(artifactEntity.getArtifactData())
-      .andReturn(kerberosDescriptorOrig.toMap())
-      .once();
+        .andReturn(kerberosDescriptorOrig.toMap())
+        .once();
 
     Capture<Map<String, Object>> updateData = Capture.newInstance(CaptureType.ALL);
     artifactEntity.setArtifactData(capture(updateData));
@@ -1684,13 +1728,13 @@ public class UpgradeCatalog250Test {
 
     PermissionDAO permissionDAO = easyMockSupport.createMock(PermissionDAO.class);
     expect(permissionDAO.findPermissionByNameAndType("AMBARI.ADMINISTRATOR", ambariResourceTypeEntity))
-      .andReturn(ambariAdministratorPermissionEntity).atLeastOnce();
+        .andReturn(ambariAdministratorPermissionEntity).atLeastOnce();
     expect(permissionDAO.findPermissionByNameAndType("CLUSTER.ADMINISTRATOR", clusterResourceTypeEntity))
-      .andReturn(clusterAdministratorPermissionEntity).atLeastOnce();
+        .andReturn(clusterAdministratorPermissionEntity).atLeastOnce();
     expect(permissionDAO.merge(ambariAdministratorPermissionEntity))
-      .andReturn(ambariAdministratorPermissionEntity).atLeastOnce();
+        .andReturn(ambariAdministratorPermissionEntity).atLeastOnce();
     expect(permissionDAO.merge(clusterAdministratorPermissionEntity))
-      .andReturn(clusterAdministratorPermissionEntity).atLeastOnce();
+        .andReturn(clusterAdministratorPermissionEntity).atLeastOnce();
 
     ResourceTypeDAO resourceTypeDAO = easyMockSupport.createMock(ResourceTypeDAO.class);
     expect(resourceTypeDAO.findByName("AMBARI")).andReturn(ambariResourceTypeEntity).atLeastOnce();
@@ -1743,8 +1787,8 @@ public class UpgradeCatalog250Test {
 
     final PermissionDAO permissionDAO = easyMockSupport.createNiceMock(PermissionDAO.class);
     expect(permissionDAO.findPermissionByNameAndType("AMBARI.ADMINISTRATOR", ambariResourceTypeEntity))
-      .andReturn(ambariAdministratorPermissionEntity)
-      .anyTimes();
+        .andReturn(ambariAdministratorPermissionEntity)
+        .anyTimes();
 
     final ResourceTypeDAO resourceTypeDAO = easyMockSupport.createNiceMock(ResourceTypeDAO.class);
     expect(resourceTypeDAO.findByName("AMBARI")).andReturn(ambariResourceTypeEntity).anyTimes();
@@ -1855,11 +1899,11 @@ public class UpgradeCatalog250Test {
     replay(clusters, mockRangerPluginConfig, mockRangerAdminProperties, cluster);
 
     AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class)
-    .addMockedMethod("createConfiguration")
-    .addMockedMethod("getClusters", new Class[] { })
-    .addMockedMethod("createConfig")
-    .withConstructor(actionManager, clusters, injector)
-    .createNiceMock();
+        .addMockedMethod("createConfiguration")
+        .addMockedMethod("getClusters", new Class[]{})
+        .addMockedMethod("createConfig")
+        .withConstructor(actionManager, clusters, injector)
+        .createNiceMock();
 
     Injector injector2 = easyMockSupport.createNiceMock(Injector.class);
     Capture<Map<String, String>> propertiesCapture = EasyMock.newCapture();
@@ -1867,7 +1911,7 @@ public class UpgradeCatalog250Test {
     expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
     expect(controller.getClusters()).andReturn(clusters).anyTimes();
     expect(controller.createConfig(anyObject(Cluster.class), anyString(), capture(propertiesCapture), anyString(),
-      EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
+        EasyMock.<Map<String, Map<String, String>>>anyObject())).andReturn(config).once();
 
     replay(controller, injector2);
     new UpgradeCatalog250(injector2).updateRangerUrlConfigs();
@@ -1876,4 +1920,20 @@ public class UpgradeCatalog250Test {
     Map<String, String> updatedProperties = propertiesCapture.getValue();
     assertTrue(Maps.difference(newProperties, updatedProperties).areEqual());
   }
+
+  private Injector createInjector(final AmbariManagementController mockAmbariManagementController,
+                                  final Clusters mockClusters,
+                                  final AlertDefinitionDAO mockAlertDefinitionDAO) {
+    return Guice.createInjector(new AbstractModule() {
+      @Override
+      protected void configure() {
+        bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
+        bind(Clusters.class).toInstance(mockClusters);
+        bind(EntityManager.class).toInstance(entityManager);
+        bind(AlertDefinitionDAO.class).toInstance(mockAlertDefinitionDAO);
+        bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
+        bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
+      }
+    });
+  }
 }


[39/50] [abbrv] ambari git commit: AMBARI-20254. Service Alert Popup - Unexpected User Experience. (Vivek Subramanian via yusaku)

Posted by ol...@apache.org.
AMBARI-20254. Service Alert Popup - Unexpected User Experience. (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/69102638
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/69102638
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/69102638

Branch: refs/heads/branch-dev-logsearch
Commit: 6910263850c504195477a1d67adaa1820646975c
Parents: c5d2d5b
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Wed Mar 8 11:30:36 2017 -0800
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Wed Mar 8 11:30:36 2017 -0800

----------------------------------------------------------------------
 .../controllers/main/service/info/summary.js    | 43 ++++++++------------
 .../app/models/alerts/alert_definition.js       | 10 +++++
 ambari-web/app/styles/alerts.less               | 10 ++++-
 .../main/service/info/service_alert_popup.hbs   | 19 ++++-----
 4 files changed, 44 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/controllers/main/service/info/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/summary.js b/ambari-web/app/controllers/main/service/info/summary.js
index b3d7b35..7327255 100644
--- a/ambari-web/app/controllers/main/service/info/summary.js
+++ b/ambari-web/app/controllers/main/service/info/summary.js
@@ -369,7 +369,7 @@ App.MainServiceInfoSummaryController = Em.Controller.extend(App.WidgetSectionMix
     return App.ModalPopup.show({
       header: Em.I18n.t('services.service.summary.alerts.popup.header').format(context.get('displayName')),
       autoHeight: false,
-      classNames: ['forty-percent-width-modal'],
+      classNames: ['sixty-percent-width-modal'],
       bodyClass: Em.View.extend({
         templateName: require('templates/main/service/info/service_alert_popup'),
         classNames: ['service-alerts'],
@@ -377,43 +377,36 @@ App.MainServiceInfoSummaryController = Em.Controller.extend(App.WidgetSectionMix
         didInsertElement: function () {
           Em.run.next(this, function () {
             App.tooltip(this.$(".timeago"));
+            App.tooltip(this.$(".definition-latest-text"), {placement: 'bottom'});
           });
         },
         willDestroyElement:function () {
           this.$(".timeago").tooltip('destroy');
+          this.$(".definition-latest-text").tooltip('destroy');
         },
         alerts: function () {
           var property = context.get('componentName') ? 'componentName' : 'serviceName';
           var serviceDefinitions = this.get('controller.content').filterProperty(property, context.get(property));
           // definitions should be sorted in order: critical, warning, ok, unknown, other
-          var definitionTypes = {
-            "isCritical": [],
-            "isWarning": [],
-            "isOK": [],
-            "isUnknown": []
-          };
-          var others = [];
+          var criticalDefinitions = [], warningDefinitions = [], okDefinitions = [], unknownDefinitions = [];
           serviceDefinitions.forEach(function (definition) {
-            definition.set('isCollapsed', true);
-            var pushed = false; // make sure each definition gets pushed only one time
-            Object.keys(definitionTypes).forEach(function (type) {
-              if (!pushed && definition.get(type)) {
-                definitionTypes[type].push(definition);
-                pushed = true;
-              }
-            });
-            if (!pushed) {
-              others.push(definition);
+            if (definition.get('isCritical')) {
+              criticalDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
+            } else if (definition.get('isWarning')) {
+              warningDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
+            } else if (definition.get('isOK')) {
+              okDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
+            } else if (definition.get('isUnknown')) {
+              unknownDefinitions.push(definition);
+              serviceDefinitions = serviceDefinitions.without(definition);
             }
           });
-          serviceDefinitions = definitionTypes.isCritical.concat(definitionTypes.isWarning, definitionTypes.isOK, definitionTypes.isUnknown, others);
-
+          serviceDefinitions = criticalDefinitions.concat(warningDefinitions, okDefinitions, unknownDefinitions, serviceDefinitions);
           return serviceDefinitions;
         }.property('controller.content'),
-        onToggleBlock: function (alert) {
-          this.$('#' + alert.context.clientId).toggle('blind', 500);
-          alert.context.toggleProperty('isCollapsed');
-        },
         gotoAlertDetails: function (e) {
           if (e && e.context) {
             this.get('parentView').hide();
@@ -865,4 +858,4 @@ App.MainServiceInfoSummaryController = Em.Controller.extend(App.WidgetSectionMix
     App.router.route('main' + event.context.href);
   }
 
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/models/alerts/alert_definition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/alerts/alert_definition.js b/ambari-web/app/models/alerts/alert_definition.js
index 4da7199..d8a6a3f 100644
--- a/ambari-web/app/models/alerts/alert_definition.js
+++ b/ambari-web/app/models/alerts/alert_definition.js
@@ -160,6 +160,16 @@ App.AlertDefinition = DS.Model.extend({
     return text;
   }.property('summary'),
 
+  latestTextSummary: function () {
+    var latestText = this.get('latestText');
+    var ellipsis = '...';
+    var summaryLength = 400;
+    if(latestText.length > summaryLength) {
+      latestText = latestText.substring(0, summaryLength - ellipsis.length) + ellipsis;
+    }
+    return latestText;
+  }.property('latestText'),
+
   isAmbariService: Em.computed.equal('service._id', 'AMBARI'),
 
   isAmbariAgentComponent: Em.computed.equal('componentName', 'AMBARI_AGENT'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/styles/alerts.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/alerts.less b/ambari-web/app/styles/alerts.less
index e31ea30..d31ba47 100644
--- a/ambari-web/app/styles/alerts.less
+++ b/ambari-web/app/styles/alerts.less
@@ -551,6 +551,14 @@
   }
 }
 
+.sixty-percent-width-modal {
+  .definition-latest-text {
+    overflow-x: auto;
+    text-overflow: inherit;
+    white-space: normal;
+  }
+}
+
 /*****end styles for manage alerts popup*****/
 
 /*****start styles for alerts popup*****/
@@ -566,7 +574,7 @@
 }
 
 .service-alerts {
-  max-height: 246px;
+  max-height: 400px;
 }
 
 .instance-text {

http://git-wip-us.apache.org/repos/asf/ambari/blob/69102638/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/service_alert_popup.hbs b/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
index 6ab6b3f..253c624 100644
--- a/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
+++ b/ambari-web/app/templates/main/service/info/service_alert_popup.hbs
@@ -21,20 +21,15 @@
     {{#each alert in view.alerts}}
       <li class="alert-list-wrap">
         <div class="row-fluid">
-          <div class="span8 name-text">
-            <div class="accordion-group block">
-              <div class="accordion-heading" {{action "onToggleBlock" alert target="view"}}>
-                <i {{bindAttr class=":pull-left :accordion-toggle alert.isCollapsed:icon-caret-right:icon-caret-down"}}></i>
-                <a class="accordion-toggle" href="#" {{action "gotoAlertDetails" alert target="view"}}>{{alert.label}}</a>
-              </div>
-              <div id="{{unbound alert.clientId}}" class="accordion-body collapse in" style="display: none">
-                <div class="accordion-inner definition-latest-text">
-                  {{alert.latestText}}
-                </div>
-              </div>
+          <div class="span9 name-text">
+            <div>
+              <a href="#" {{action "gotoAlertDetails" alert target="view"}}>{{alert.label}}</a>
+            </div>
+            <div class="definition-latest-text" {{bindAttr data-original-title="alert.latestText"}}>
+              {{alert.latestTextSummary}}
             </div>
           </div>
-          <div class="span4 status-col" rel="alert-status-tooltip" >
+          <div class="span3 status-col" rel="alert-status-tooltip" >
             {{view App.AlertDefinitionSummary contentBinding="alert"}}
             <span class="timeago" {{bindAttr data-original-title="alert.lastTriggeredVerboseDisplay"}}>
               <span class="status-icon">{{{alert.status}}}</span>


[22/50] [abbrv] ambari git commit: AMBARI-20256. Auto Hive 2.0 instance is missing permission for default Ambari roles. (dipayanb)

Posted by ol...@apache.org.
AMBARI-20256. Auto Hive 2.0 instance is missing permission for default Ambari roles. (dipayanb)


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

Branch: refs/heads/branch-dev-logsearch
Commit: a92b7c80210ab180c6782600c38c0566e8d9acb6
Parents: 7e8a815
Author: Dipayan Bhowmick <di...@gmail.com>
Authored: Wed Mar 8 00:59:27 2017 +0530
Committer: Dipayan Bhowmick <di...@gmail.com>
Committed: Wed Mar 8 00:59:27 2017 +0530

----------------------------------------------------------------------
 contrib/views/hive20/src/main/resources/view.xml | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a92b7c80/contrib/views/hive20/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/view.xml b/contrib/views/hive20/src/main/resources/view.xml
index 37ddf56..f0e9e34 100644
--- a/contrib/views/hive20/src/main/resources/view.xml
+++ b/contrib/views/hive20/src/main/resources/view.xml
@@ -395,5 +395,12 @@
         <services>
             <service>HIVE</service>
         </services>
+        <roles>
+            <role>CLUSTER.ADMINISTRATOR</role>
+            <role>CLUSTER.OPERATOR</role>
+            <role>SERVICE.ADMINISTRATOR</role>
+            <role>SERVICE.OPERATOR</role>
+            <role>CLUSTER.USER</role>
+        </roles>
     </auto-instance>
 </view>


[33/50] [abbrv] ambari git commit: AMBARI-20345 - Alert Event Publisher Executor Doesn't Scale Threads (part2) (jonathanhurley)

Posted by ol...@apache.org.
AMBARI-20345 - Alert Event Publisher Executor Doesn't Scale Threads (part2) (jonathanhurley)


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

Branch: refs/heads/branch-dev-logsearch
Commit: 60095bc29b21ca92a4dfb6c3ce60f398896a0e43
Parents: 8eaaf80
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Mar 8 07:52:38 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Mar 8 07:53:44 2017 -0500

----------------------------------------------------------------------
 .../java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/60095bc2/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
index f47a997..cb5f143 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOCachedTest.java
@@ -17,8 +17,6 @@
  */
 package org.apache.ambari.server.orm.dao;
 
-import static org.easymock.EasyMock.expect;
-
 import java.util.List;
 
 import javax.persistence.EntityManager;