azkaban-aplcache

Details

diff --git a/azkaban-common/src/main/java/azkaban/jobtype/JobTypeManager.java b/azkaban-common/src/main/java/azkaban/jobtype/JobTypeManager.java
index f1cf351..34dfa6a 100644
--- a/azkaban-common/src/main/java/azkaban/jobtype/JobTypeManager.java
+++ b/azkaban-common/src/main/java/azkaban/jobtype/JobTypeManager.java
@@ -200,6 +200,7 @@ public class JobTypeManager {
       }
 
       pluginLoadProps = new Props(commonPluginLoadProps, pluginLoadPropsFile);
+      pluginLoadProps.put("plugin.dir", pluginDir.getAbsolutePath());
       pluginLoadProps = PropsUtils.resolveProps(pluginLoadProps);
     } catch (Exception e) {
       logger.error("pluginLoadProps to help with debugging: " + pluginLoadProps);
@@ -207,7 +208,6 @@ public class JobTypeManager {
           + e.getMessage(), e);
     }
     // Add properties into the plugin set
-    pluginLoadProps.put("plugin.dir", pluginDir.getAbsolutePath());
     plugins.addPluginLoadProps(jobTypeName, pluginLoadProps);
     if (pluginJobProps != null) {
       plugins.addPluginJobProps(jobTypeName, pluginJobProps);
@@ -358,8 +358,8 @@ public class JobTypeManager {
         // pluginSet.getCommonPluginLoadProps() will return null if there is no plugins directory.
         // hence assigning default Props() if that's the case
         pluginLoadProps = pluginSet.getCommonPluginLoadProps();
-        if(pluginJobProps == null)
-          pluginJobProps = new Props();
+        if(pluginLoadProps == null)
+        	pluginLoadProps = new Props();
       }
 
       job =
diff --git a/azkaban-soloserver/src/package/bin/azkaban-solo-start.sh b/azkaban-soloserver/src/package/bin/azkaban-solo-start.sh
index e45c907..7c64a4e 100755
--- a/azkaban-soloserver/src/package/bin/azkaban-solo-start.sh
+++ b/azkaban-soloserver/src/package/bin/azkaban-solo-start.sh
@@ -43,7 +43,7 @@ serverpath=`pwd`
 if [ -z $AZKABAN_OPTS ]; then
   AZKABAN_OPTS=-Xmx3G
 fi
-AZKABAN_OPTS="$AZKABAN_OPTS -server -Dcom.sun.management.jmxremote -Djava.io.tmpdir=$tmpdir -Dexecutorport=$executorport -Dserverpath=$serverpath"
+AZKABAN_OPTS="$AZKABAN_OPTS -server -Dcom.sun.management.jmxremote -Djava.io.tmpdir=$tmpdir -Dexecutorport=$executorport -Dserverpath=$serverpath -Dlog4j.log.dir=$azkaban_dir/logs"
 
 java $AZKABAN_OPTS -cp $CLASSPATH azkaban.soloserver.AzkabanSingleServer -conf $azkaban_dir/conf $@ &
 
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 dc0ef87..4c8f025 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -43,6 +43,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 
 import azkaban.executor.ExecutableFlow;
@@ -520,56 +521,57 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
   }
 
-    /**
-     * validate readiness of a project and user permission and use
-     * projectManager to purge the project if things looks good
-     **/
-    private void handlePurgeProject(HttpServletRequest req,
-        HttpServletResponse resp, Session session) throws ServletException,
-        IOException {
-        User user = session.getUser();
-        String projectName = getParam(req, "project");
-        HashMap<String, Object> ret = new HashMap<String, Object>();
-        boolean isOperationSuccessful = true;
-
-        if (projectManager.isActiveProject(projectName)) {
-            ret.put("error", "Project " + projectName
-                + " should be deleted before purging");
-            isOperationSuccessful = false;
-        }
+  /**
+   * validate readiness of a project and user permission and use projectManager to purge the project
+   * if things looks good
+   **/
+  private void handlePurgeProject(HttpServletRequest req, HttpServletResponse resp, Session session)
+          throws ServletException, IOException {
+    User user = session.getUser();
+    HashMap<String, Object> ret = new HashMap<String, Object>();
+    boolean isOperationSuccessful = true;
 
-        try {
-            Project project = null;
+    try {
+      Project project = null;
+      String projectParam = getParam(req, "project");
 
-            // project is already deleted
-            if (isOperationSuccessful) {
-                project = projectManager.getProject(projectName);
-                if (project == null) {
-                    ret.put("error", "no project with name : " + projectName);
-                    isOperationSuccessful = false;
-                }
-            }
+      if (StringUtils.isNumeric(projectParam)) {
+        project = projectManager.getProject(Integer.parseInt(projectParam)); // get project by Id
+      } else {
+        project = projectManager.getProject(projectParam); // get project by name (name cannot start
+                                                           // from ints)
+      }
 
-            // only eligible users can purge a project
-            if (isOperationSuccessful
-                && !hasPermission(project, user, Type.ADMIN)) {
-                ret.put("error", "Cannot purge. User '" + user.getUserId()
-                    + "' is not an ADMIN.");
-                isOperationSuccessful = false;
-            }
+      // invalid project
+      if (project == null) {
+        ret.put("error", "invalid project");
+        isOperationSuccessful = false;
+      }
 
-            if (isOperationSuccessful) {
-                projectManager.purgeProject(project, user);
-            }
-        } catch (Exception e) {
-            ret.put("error", e.getMessage());
-            isOperationSuccessful = false;
-        }
+      // project is already deleted
+      if (isOperationSuccessful && projectManager.isActiveProject(project.getId())) {
+        ret.put("error", "Project " + project.getName() + " should be deleted before purging");
+        isOperationSuccessful = false;
+      }
+
+      // only eligible users can purge a project
+      if (isOperationSuccessful && !hasPermission(project, user, Type.ADMIN)) {
+        ret.put("error", "Cannot purge. User '" + user.getUserId() + "' is not an ADMIN.");
+        isOperationSuccessful = false;
+      }
 
-        ret.put("success", isOperationSuccessful);
-        this.writeJSON(resp, ret);
+      if (isOperationSuccessful) {
+        projectManager.purgeProject(project, user);
+      }
+    } catch (Exception e) {
+      ret.put("error", e.getMessage());
+      isOperationSuccessful = false;
     }
 
+    ret.put("success", isOperationSuccessful);
+    this.writeJSON(resp, ret);
+  }
+
   private void handleRemoveProject(HttpServletRequest req,
       HttpServletResponse resp, Session session) throws ServletException,
       IOException {
diff --git a/gradle.properties b/gradle.properties
index ef3a7de..a9b4824 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,3 +1,3 @@
 org.gradle.daemon=true
 group=com.linkedin
-version=2.7.0
+version=3.0.0