AMBARI-20529. Make home directory check as optional in wfmanager view (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/52bc319d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/52bc319d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/52bc319d

Branch: refs/heads/branch-2.5
Commit: 52bc319d368cb337078161e7b2fdc4961c253415
Parents: c8e937a
Author: pallavkul <pallav....@gmail.com>
Authored: Fri Mar 24 14:05:06 2017 +0530
Committer: Nitiraj Singh Rathore <nitiraj.rath...@gmail.com>
Committed: Tue Apr 4 13:03:12 2017 +0530

----------------------------------------------------------------------
 .../apache/oozie/ambari/view/HDFSFileUtils.java | 41 +++++++++++-
 .../ambari/view/OozieProxyImpersonator.java     | 16 +++--
 .../main/resources/ui/app/controllers/index.js  |  5 +-
 .../src/main/resources/ui/app/routes/index.js   | 66 ++++++++++++++++----
 4 files changed, 107 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/52bc319d/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/HDFSFileUtils.java
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/HDFSFileUtils.java
 
b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/HDFSFileUtils.java
index d06eb07..09c63e3 100644
--- 
a/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/HDFSFileUtils.java
+++ 
b/contrib/views/wfmanager/src/main/java/org/apache/oozie/ambari/view/HDFSFileUtils.java
@@ -21,8 +21,11 @@ import com.google.common.base.Optional;
 import org.apache.ambari.view.ViewContext;
 import org.apache.ambari.view.commons.hdfs.UserService;
 import org.apache.ambari.view.commons.hdfs.ViewPropertyHelper;
+import org.apache.ambari.view.utils.hdfs.ConfigurationBuilder;
 import org.apache.ambari.view.utils.hdfs.HdfsApi;
+import org.apache.ambari.view.utils.hdfs.HdfsApiException;
 import org.apache.ambari.view.utils.hdfs.HdfsUtil;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataInputStream;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.FileStatus;
@@ -31,12 +34,18 @@ import org.slf4j.LoggerFactory;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Arrays;
+import java.util.List;
+import java.util.LinkedList;
 
 public class HDFSFileUtils {
        public static final String VIEW_CONF_KEYVALUES = "view.conf.keyvalues";
-
+       private static final String DEFAULT_FS = "fs.defaultFS";
+       private static final String 
AMBARI_SKIP_HOME_DIRECTORY_CHECK_PROTOCOL_LIST = 
"views.skip.home-directory-check.file-system.list";
        private final static Logger LOGGER = LoggerFactory
                        .getLogger(HDFSFileUtils.class);
        private ViewContext viewContext;
@@ -108,6 +117,36 @@ public class HDFSFileUtils {
                }
        }
 
+       public Boolean shouldCheckForHomeDir(){
+               Optional<Map<String, String>> viewConfigs = 
ViewPropertyHelper.getViewConfigs(viewContext, VIEW_CONF_KEYVALUES);
+               ConfigurationBuilder configBuilder;
+               if(viewConfigs.isPresent()) {
+                       configBuilder = new 
ConfigurationBuilder(this.viewContext, viewConfigs.get());
+               }else{
+                       configBuilder = new 
ConfigurationBuilder(this.viewContext);
+               }
+               Configuration configurations = null;
+               try {
+                       configurations = configBuilder.buildConfig();
+               } catch (HdfsApiException e) {
+                       throw    new RuntimeException(e);
+               }
+               String defaultFS = configurations.get(DEFAULT_FS);
+               try {
+                       URI fsUri = new URI(defaultFS);
+                       String protocol = fsUri.getScheme();
+                       String ambariSkipCheckValues = 
viewContext.getAmbariProperty(AMBARI_SKIP_HOME_DIRECTORY_CHECK_PROTOCOL_LIST);
+                       List<String> protocolSkipList = (ambariSkipCheckValues 
== null? new LinkedList<String>() : 
Arrays.asList(ambariSkipCheckValues.split(",")));
+                       if(null != protocol && 
protocolSkipList.contains(protocol)){
+                               return Boolean.FALSE;
+                       }
+               } catch (URISyntaxException e) {
+                       LOGGER.error("Error occurred while parsing the 
defaultFS URI.", e);
+                       return Boolean.TRUE;
+               }
+               return Boolean.TRUE;
+       }
+
        public FileStatus getFileStatus(String filePath) {
                try {
                        return getHdfsgetApi().getFileStatus(filePath);

http://git-wip-us.apache.org/repos/asf/ambari/blob/52bc319d/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 d82f928..8d2b5a5 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
@@ -160,11 +160,17 @@ public class OozieProxyImpersonator {
   @GET
   @Path("/getWorkflowManagerConfigs")
   public Response getWorkflowConfigs() {
-    HashMap<String, String> workflowConfigs = new HashMap<String, String>();
-    workflowConfigs.put("nameNode", 
viewContext.getProperties().get("webhdfs.url"));
-    workflowConfigs.put("resourceManager", 
viewContext.getProperties().get("yarn.resourcemanager.address"));
-    workflowConfigs.put("userName", viewContext.getUsername());
-    return Response.ok(workflowConfigs).build();
+    try {
+      HashMap<String, String> workflowConfigs = new HashMap<String, String>();
+      workflowConfigs.put("nameNode", 
viewContext.getProperties().get("webhdfs.url"));
+      workflowConfigs.put("resourceManager", 
viewContext.getProperties().get("yarn.resourcemanager.address"));
+      workflowConfigs.put("userName", viewContext.getUsername());
+      
workflowConfigs.put("checkHomeDir",hdfsFileUtils.shouldCheckForHomeDir().toString());
+      return Response.ok(workflowConfigs).build();
+    } catch (Exception e) {
+      LOGGER.error(e.getMessage(), e);
+      throw new WfmWebException(e);
+    }
   }
 
   @POST

http://git-wip-us.apache.org/repos/asf/ambari/blob/52bc319d/contrib/views/wfmanager/src/main/resources/ui/app/controllers/index.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/controllers/index.js 
b/contrib/views/wfmanager/src/main/resources/ui/app/controllers/index.js
index f4d93ea..25fdb6d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/controllers/index.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/controllers/index.js
@@ -23,14 +23,13 @@ export default Ember.Controller.extend({
   issues : Ember.A([]),
   serviceChecks : Ember.A([
     {'name':'oozie', 'checkCompleted':false, isAvailable : true, 'displayName' 
: 'Oozie Test', 'errorMessage' : 'Oozie service check failed'},
-    {'name':'hdfs', 'checkCompleted':false, isAvailable : true, 'displayName' 
: 'HDFS Test', 'errorMessage' : 'HDFS service check failed'},
-    {'name':'homeDir', 'checkCompleted':false, isAvailable : true, 
'displayName' : 'User Home Directory Test', 'errorMessage' : 'User home 
directory not found'}
+    {'name':'hdfs', 'checkCompleted':false, isAvailable : true, 'displayName' 
: 'HDFS Test', 'errorMessage' : 'HDFS service check failed'}
   ]),
   width : 
Ember.computed('serviceChecks.@each.checkCompleted','serviceChecks.@each.isAvailable',
 function(){
     let width = 10;
     this.get('serviceChecks').forEach((check)=>{
       if(check.checkCompleted && check.isAvailable){
-        width += 30;
+        width += (90/this.get('serviceChecks').length);
       }
     });
     return Ember.String.htmlSafe(`${width}%`);

http://git-wip-us.apache.org/repos/asf/ambari/blob/52bc319d/contrib/views/wfmanager/src/main/resources/ui/app/routes/index.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/routes/index.js 
b/contrib/views/wfmanager/src/main/resources/ui/app/routes/index.js
index 316ec0e..6d94dfe 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/routes/index.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/routes/index.js
@@ -19,23 +19,45 @@ import Ember from 'ember';
 
 export default Ember.Route.extend({
     afterModel(){
+      let workflowManagerConfigsPromise = this.getWorkflowManagerConfigs();
+      workflowManagerConfigsPromise.then(function(data){
+        this.invokeServiceChecksPromises(JSON.parse(data));
+      }.bind(this)).catch(function(errors){
+        this.controllerFor('index').set('errors', errors);
+      }.bind(this));
+    },
+    invokeServiceChecksPromises(workflowManagerConfigs) {
       let ooziePromise = this.checkOozie();
       let hdfsPromise = this.checkHdfs();
-      let homeDirPromise = this.checkUserHome();
-      let serviceChecks = this.controllerFor('index').get('serviceChecks');
       this.controllerFor('index').get('issues').clear();
+      let serviceChecks = this.controllerFor('index').get('serviceChecks');
       this.processServiceCheckPromise(ooziePromise, 
serviceChecks.findBy('name', 'oozie'));
       this.processServiceCheckPromise(hdfsPromise, 
serviceChecks.findBy('name', 'hdfs'));
-      this.processServiceCheckPromise(homeDirPromise, 
serviceChecks.findBy('name', 'homeDir'));
-      Ember.RSVP.Promise.all([ooziePromise, hdfsPromise, 
homeDirPromise]).then(()=>{
-        this.controllerFor('index').set('serviceChecksComplete', true);
-        Ember.run.later(()=>{
-          this.transitionTo('design');
-      }, 2000);
-      }).catch((errors)=>{
-        this.controllerFor('index').set('serviceChecksComplete', true);
-        this.controllerFor('index').set('errors', errors);
-      });
+
+      if (workflowManagerConfigs.checkHomeDir === 'true') {
+        serviceChecks.pushObject({'name':'homeDir', 'checkCompleted':false, 
isAvailable : true, 'displayName' : 'User Home Directory Test', 'errorMessage' 
: 'User home directory not found'})
+        let homeDirPromise = this.checkUserHome();
+        this.processServiceCheckPromise(homeDirPromise, 
serviceChecks.findBy('name', 'homeDir'));
+        Ember.RSVP.Promise.all([ooziePromise, hdfsPromise, 
homeDirPromise]).then(()=>{
+          this.controllerFor('index').set('serviceChecksComplete', true);
+          Ember.run.later(()=>{
+            this.transitionTo('design');
+        }, 2000);
+        }).catch((errors)=>{
+          this.controllerFor('index').set('serviceChecksComplete', true);
+          this.controllerFor('index').set('errors', errors);
+        });
+      } else {
+        Ember.RSVP.Promise.all([ooziePromise, hdfsPromise]).then(()=>{
+          this.controllerFor('index').set('serviceChecksComplete', true);
+          Ember.run.later(()=>{
+            this.transitionTo('design');
+        }, 2000);
+        }).catch((errors)=>{
+          this.controllerFor('index').set('serviceChecksComplete', true);
+          this.controllerFor('index').set('errors', errors);
+        });
+      }
     },
     processServiceCheckPromise(promise, serviceCheck){
       promise.then(()=>{
@@ -109,6 +131,26 @@ export default Ember.Route.extend({
         });
       });
     },
+    getWorkflowManagerConfigs(){
+      return new Ember.RSVP.Promise((resolve, reject) => {
+        var url = Ember.ENV.API_URL + "/getWorkflowManagerConfigs";
+          Ember.$.ajax({
+          url: url,
+          method: "GET",
+          dataType: "text",
+          contentType: "text/plain;charset=utf-8",
+          beforeSend: function(request) {
+            request.setRequestHeader("X-Requested-By", "workflow-designer");
+          },
+          success : function(response){
+            resolve(response);
+          },
+          error : function(response){
+            reject(response);
+          }
+        });
+      });
+    },
     actions : {
       showDetails (check){
         Ember.set(check, 'showingDetails', !check.showingDetails);

Reply via email to