azkaban-developers

Merge pull request #341 from Victsm/validator-plugin Use

10/22/2014 3:58:49 PM

Details

diff --git a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
index 64c450d..bd5b5a6 100644
--- a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
+++ b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
@@ -76,7 +76,12 @@ public class ProjectManager {
       tempDir.mkdirs();
     }
 
-    validatorManager = new XmlValidatorManager(props);
+    // The prop passed to XmlValidatorManager is used to initialize all the validators
+    // Each validator will take certain key/value pairs from the prop to initialize
+    // itself.
+    Props prop = new Props(props);
+    prop.put(PROJECT_ARCHIVE_FILE_PATH, "initialize");
+    validatorManager = new XmlValidatorManager(prop);
     loadAllProjects();
   }
 
@@ -366,8 +371,13 @@ public class ProjectManager {
       throw new ProjectManagerException("Error unzipping file.", e);
     }
 
-    props.put(PROJECT_ARCHIVE_FILE_PATH, archive.getAbsolutePath());
-    validatorManager.loadValidators(props, logger);
+    // Since props is an instance variable of ProjectManager, and each invocation to the
+    // uploadProject manager needs to pass a different value for the PROJECT_ARCHIVE_FILE_PATH
+    // key, it is necessary to create a new instance of Props to make sure these different
+    // values are isolated from each other.
+    Props prop = new Props(props);
+    prop.put(PROJECT_ARCHIVE_FILE_PATH, archive.getAbsolutePath());
+    validatorManager.loadValidators(prop, logger);
     logger.info("Validating project " + archive.getName() + " using the registered validators "
         + validatorManager.getValidatorsInfo().toString());
     Map<String, ValidationReport> reports = validatorManager.validate(file);
diff --git a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index f8215aa..45e52f1 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -1458,16 +1458,18 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         for (Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
           ValidationReport report = reportEntry.getValue();
           if (!report.getErrorMsgs().isEmpty()) {
-            message.append("Validator " + reportEntry.getKey() + " reports errors:\n");
+            message.append("Validator " + reportEntry.getKey() + " reports errors:<ul>");
             for (String msg : report.getErrorMsgs()) {
-              message.append(msg + "\n");
+              message.append("<li>" + msg + "</li>");
             }
+            message.append("</ul>");
           }
           if (!report.getWarningMsgs().isEmpty()) {
-            message.append("Validator " + reportEntry.getKey() + " reports warnings:\n");
+            message.append("Validator " + reportEntry.getKey() + " reports warnings:<ul>");
             for (String msg : report.getWarningMsgs()) {
-              message.append(msg + "\n");
+              message.append("<li>" + msg + "</li>");
             }
+            message.append("</ul>");
           }
         }
         if (message.length() > 0) {
@@ -1477,9 +1479,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         logger.info("Installation Failed.", e);
         String error = e.getMessage();
         if (error.length() > 512) {
-          error = error.substring(0, 512) + "\nToo many errors to display.\n";
+          error = error.substring(0, 512) + "<br>Too many errors to display.<br>";
         }
-        ret.put("error", "Installation Failed.\n" + error);
+        ret.put("error", "Installation Failed.<br>" + error);
       } finally {
         if (tempDir.exists()) {
           FileUtils.deleteDirectory(tempDir);