azkaban-memoizeit
Changes
azkaban-soloserver/.gitignore 2(+1 -1)
Details
diff --git a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
index 98456c1..4af1c9e 100644
--- a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
+++ b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
@@ -80,6 +80,8 @@ public class ProjectManager {
// initialize itself.
Props prop = new Props(props);
prop.put(ValidatorConfigs.PROJECT_ARCHIVE_FILE_PATH, "initialize");
+ // By instantiating an object of XmlValidatorManager, this will verify the
+ // config files for the validators.
new XmlValidatorManager(prop);
loadAllProjects();
}
@@ -361,7 +363,7 @@ public class ProjectManager {
* caller of this method should call method
* {@ProjectFileHandler.deleteLocalFile}
* to delete the temporary file.
- *
+ *
* @param project
* @param version - latest version is used if value is -1
* @return ProjectFileHandler - null if can't find project zip file based on
azkaban-soloserver/.gitignore 2(+1 -1)
diff --git a/azkaban-soloserver/.gitignore b/azkaban-soloserver/.gitignore
index 5ab4d17..eb3d928 100644
--- a/azkaban-soloserver/.gitignore
+++ b/azkaban-soloserver/.gitignore
@@ -4,5 +4,5 @@ executions/
plugins/
projects/
temp/
-validators/
+validator_jars/
*.log
diff --git a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 5b54af4..12c5993 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -52,6 +52,8 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
.forPattern("z");
private static final String AZKABAN_SUCCESS_MESSAGE =
"azkaban.success.message";
+ private static final String AZKABAN_WARN_MESSAGE =
+ "azkaban.warn.message";
private static final String AZKABAN_FAILURE_MESSAGE =
"azkaban.failure.message";
@@ -222,6 +224,20 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
}
/**
+ * Sets a warning message in azkaban.warn.message in the cookie. This will
+ * be used by the web client javascript to somehow display the message
+ *
+ * @param response
+ * @param warnMsg
+ */
+ protected void setWarnMessageInCookie(HttpServletResponse response,
+ String errorMsg) {
+ Cookie cookie = new Cookie(AZKABAN_WARN_MESSAGE, errorMsg);
+ cookie.setPath("/");
+ response.addCookie(cookie);
+ }
+
+ /**
* Sets a message in azkaban.success.message in the cookie. This will be used
* by the web client javascript to somehow display the message
*
@@ -251,6 +267,21 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
}
/**
+ * Retrieves a warn message from a cookie. azkaban.warn.message
+ *
+ * @param request
+ * @return
+ */
+ protected String getWarnMessageFromCookie(HttpServletRequest request) {
+ Cookie cookie = getCookieByName(request, AZKABAN_WARN_MESSAGE);
+
+ if (cookie == null) {
+ return null;
+ }
+ return cookie.getValue();
+ }
+
+ /**
* Retrieves a success message from a cookie. azkaban.failure.message
*
* @param request
@@ -312,6 +343,11 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
: errorMsg);
setErrorMessageInCookie(resp, null);
+ String warnMsg = getWarnMessageFromCookie(req);
+ page.add("warn_message", warnMsg == null || warnMsg.isEmpty() ? "null"
+ : warnMsg);
+ setWarnMessageInCookie(resp, null);
+
String successMsg = getSuccessMessageFromCookie(req);
page.add("success_message",
successMsg == null || successMsg.isEmpty() ? "null" : successMsg);
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 e7d5883..0997597 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -426,9 +426,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
/**
* Download project zip file from DB and send it back client.
- *
+ *
* This method requires a project name and an optional project version.
- *
+ *
* @param req
* @param resp
* @param session
@@ -1582,34 +1582,45 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
Map<String, ValidationReport> reports =
projectManager.uploadProject(project, archiveFile, type, user,
props);
- StringBuffer message = new StringBuffer();
+ StringBuffer errorMsgs = new StringBuffer();
+ StringBuffer warnMsgs = new StringBuffer();
for (Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
ValidationReport report = reportEntry.getValue();
if (!report.getPassMsgs().isEmpty()) {
for (String msg : report.getPassMsgs()) {
- message.append(msg + "<br/>");
+ if (msg.startsWith("ERROR")) {
+ errorMsgs.append(msg.replaceFirst("ERROR", "") + "<br/>");
+ } else if (msg.startsWith("WARN")) {
+ warnMsgs.append(msg.replaceFirst("WARN", "") + "<br/>");
+ }
}
- message.append("<br/>");
}
if (!report.getErrorMsgs().isEmpty()) {
- message.append("Validator " + reportEntry.getKey()
+ errorMsgs.append("Validator " + reportEntry.getKey()
+ " reports errors:<ul>");
for (String msg : report.getErrorMsgs()) {
- message.append("<li>" + msg + "</li>");
+ errorMsgs.append("<li>" + msg + "</li>");
}
- message.append("</ul>");
+ errorMsgs.append("</ul>");
}
if (!report.getWarningMsgs().isEmpty()) {
- message.append("Validator " + reportEntry.getKey()
+ warnMsgs.append("Validator " + reportEntry.getKey()
+ " reports warnings:<ul>");
for (String msg : report.getWarningMsgs()) {
- message.append("<li>" + msg + "</li>");
+ warnMsgs.append("<li>" + msg + "</li>");
}
- message.append("</ul>");
+ warnMsgs.append("</ul>");
}
}
- if (message.length() > 0) {
- ret.put("error", message.toString());
+ if (errorMsgs.length() > 0) {
+ // If putting more than 4000 characters in the cookie, the entire message
+ // will somehow get discarded.
+ ret.put("error", errorMsgs.length() > 4000 ?
+ errorMsgs.substring(0, 4000) : errorMsgs.toString());
+ }
+ if (warnMsgs.length() > 0) {
+ ret.put("warn", warnMsgs.length() > 4000 ?
+ warnMsgs.substring(0, 4000) : warnMsgs.toString());
}
} catch (Exception e) {
logger.info("Installation Failed.", e);
@@ -1643,6 +1654,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
setErrorMessageInCookie(resp, ret.get("error"));
}
+ if (ret.containsKey("warn")) {
+ setWarnMessageInCookie(resp, ret.get("warn"));
+ }
+
resp.sendRedirect(req.getRequestURI() + "?project=" + projectName);
}
diff --git a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm
index 10831fb..1516519 100644
--- a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm
+++ b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm
@@ -21,6 +21,11 @@
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
$error_message
</div>
+#elseif ($warn_message != "null")
+ <div class="alert alert-warning alert-dismissable">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ $warn_message
+ </div>
#elseif ($success_message != "null")
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>