azkaban-developers

Add more error logging to the code that fetches project properties

11/28/2016 2:48:12 PM

Details

diff --git a/azkaban-common/src/main/java/azkaban/project/JdbcProjectLoader.java b/azkaban-common/src/main/java/azkaban/project/JdbcProjectLoader.java
index 7a74326..2e2a0d7 100644
--- a/azkaban-common/src/main/java/azkaban/project/JdbcProjectLoader.java
+++ b/azkaban-common/src/main/java/azkaban/project/JdbcProjectLoader.java
@@ -1112,6 +1112,8 @@ public class JdbcProjectLoader extends AbstractJdbcLoader implements
 
       return properties.get(0).getSecond();
     } catch (SQLException e) {
+      logger.error("Error fetching property " + propsName
+          + " Project " + projectId + " version " + projectVer, e);
       throw new ProjectManagerException("Error fetching property " + propsName,
           e);
     }
@@ -1120,6 +1122,7 @@ public class JdbcProjectLoader extends AbstractJdbcLoader implements
   @Override
   public Props fetchProjectProperty(Project project, String propsName)
       throws ProjectManagerException {
+    // TODO: 11/23/16 call the other overloaded method fetchProjectProperty internally.
     QueryRunner runner = createQueryRunner();
 
     ProjectPropertiesResultsHandler handler =
@@ -1130,13 +1133,17 @@ public class JdbcProjectLoader extends AbstractJdbcLoader implements
               handler, project.getId(), project.getVersion(), propsName);
 
       if (properties == null || properties.isEmpty()) {
+        logger.warn("Project " + project.getId() + " version " + project.getVersion()
+          + " property " + propsName + " is empty.");
         return null;
       }
 
       return properties.get(0).getSecond();
     } catch (SQLException e) {
-      throw new ProjectManagerException("Error fetching property " + propsName,
-          e);
+      logger.error("Error fetching property " + propsName
+          + "Project " + project.getId() + " version " + project.getVersion(), e);
+      throw new ProjectManagerException("Error fetching property " + propsName
+          + "Project " + project.getId() + " version " + project.getVersion(), e);
     }
   }
 
@@ -1236,6 +1243,7 @@ public class JdbcProjectLoader extends AbstractJdbcLoader implements
       }
       return props;
     } catch (SQLException e) {
+      logger.error("Error fetching properties, project id" + projectId + " version " + version, e);
       throw new ProjectManagerException("Error fetching properties", e);
     }
   }
diff --git a/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java b/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java
index e159335..c013c4b 100644
--- a/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java
+++ b/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java
@@ -330,17 +330,10 @@ public class PropsUtils {
     return map;
   }
 
-  @SuppressWarnings("unchecked")
-  public static Props fromJSONString(String json) {
-    try {
-      Map<String, String> obj =
-          (Map<String, String>) JSONUtils.parseJSONFromString(json);
-      Props props = new Props(null, obj);
-      return props;
-    } catch (IOException e) {
-      logger.error("Encountered error during parsing project properties json. ", e);
-      return null;
-    }
+  public static Props fromJSONString(String json) throws IOException {
+    Map<String, String> obj = (Map<String, String>) JSONUtils.parseJSONFromString(json);
+    Props props = new Props(null, obj);
+    return props;
   }
 
   @SuppressWarnings("unchecked")
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index ba65d79..685cc80 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -1425,6 +1425,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       project = projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " not found.");
+        logger.info("Display project property. Project " + projectName + " not found.");
         page.render();
         return;
       }
@@ -1438,6 +1439,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       flow = project.getFlow(flowName);
       if (flow == null) {
         page.add("errorMsg", "Flow " + flowName + " not found.");
+        logger.info("Display project property. Project " + projectName +
+            " Flow " + flowName + " not found.");
         page.render();
         return;
       }
@@ -1446,11 +1449,22 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       Node node = flow.getNode(jobName);
       if (node == null) {
         page.add("errorMsg", "Job " + jobName + " not found.");
+        logger.info("Display project property. Project " + projectName +
+            " Flow " + flowName + " Job " + jobName + " not found.");
         page.render();
         return;
       }
 
       Props prop = projectManager.getProperties(project, propSource);
+      if (prop == null) {
+        page.add("errorMsg", "Property " + propSource + " not found.");
+        logger.info("Display project property. Project " + projectName +
+            " Flow " + flowName + " Job " + jobName +
+            " Property " + propSource + " not found.");
+        page.render();
+        return;
+
+      }
       page.add("property", propSource);
       page.add("jobid", node.getId());