azkaban-developers

Details

diff --git a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
index 450e76d..f2647ce 100644
--- a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
+++ b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
@@ -196,40 +196,66 @@ public class ProjectManager {
     return allProjects;
   }
 
-  public Project getProject(String name) {
-    return projectsByName.get(name);
-  }
+    /**
+     * Checks if a project is active using project_name
+     *
+     * @param name
+     */
+    public Boolean isActiveProject(String name) {
+        return projectsByName.containsKey(name);
+    }
 
-  public Project getProject(int id) {
-    return projectsById.get(id);
-  }
+    /**
+     * Checks if a project is active using project_id
+     *
+     * @param name
+     */
+    public Boolean isActiveProject(int id) {
+        return projectsById.containsKey(id);
+    }
 
     /**
-     * fetch inactive project from db by project_id
+     * fetch active project from cache and inactive projects from db by
+     * project_name
      *
      * @param name
      * @return
      */
-    public Project getInactiveProject(String name) {
-        try {
-            return projectLoader.fetchProjectByName(name);
-        } catch (ProjectManagerException e) {
-            throw new RuntimeException("Could not load project from store.", e);
+    public Project getProject(String name) {
+        Project fetchedProject = null;
+        if (isActiveProject(name)) {
+            fetchedProject = projectsByName.get(name);
+        } else {
+            try {
+                fetchedProject = projectLoader.fetchProjectByName(name);
+            } catch (ProjectManagerException e) {
+                throw new RuntimeException(
+                    "Could not load project from store.", e);
+            }
         }
+        return fetchedProject;
     }
 
     /**
-     * fetch inactive project from db by project_name
+     * fetch active project from cache and inactive projects from db by
+     * project_id
      *
-     * @param name
+     * @param id
      * @return
      */
-    public Project getInactiveProject(int id) {
-        try {
-            return projectLoader.fetchProjectById(id);
-        } catch (ProjectManagerException e) {
-            throw new RuntimeException("Could not load project from store.", e);
+    public Project getProject(int id) {
+        Project fetchedProject = null;
+        if (isActiveProject(id)) {
+            fetchedProject = projectsById.get(id);
+        } else {
+            try {
+                fetchedProject = projectLoader.fetchProjectById(id);
+            } catch (ProjectManagerException e) {
+                throw new RuntimeException(
+                    "Could not load project from store.", e);
+            }
         }
+        return fetchedProject;
     }
 
   public Project createProject(String projectName, String description,
diff --git a/azkaban-common/src/test/java/azkaban/project/JdbcProjectLoaderTest.java b/azkaban-common/src/test/java/azkaban/project/JdbcProjectLoaderTest.java
index d9b673d..67efed9 100644
--- a/azkaban-common/src/test/java/azkaban/project/JdbcProjectLoaderTest.java
+++ b/azkaban-common/src/test/java/azkaban/project/JdbcProjectLoaderTest.java
@@ -244,7 +244,7 @@ public class JdbcProjectLoaderTest {
 
     /** Default Test case for fetchProjectByName **/
     @Test
-    public void testProjectRetrivalByFetchProjectByName()
+    public void testProjectRetrievalByFetchProjectByName()
         throws ProjectManagerException {
         if (!isTestSetup()) {
             return;
@@ -300,7 +300,7 @@ public class JdbcProjectLoaderTest {
         } catch (ProjectManagerException ex) {
             System.out.println("Test true");
         }
-        Assert.fail("No exception");
+        Assert.fail("Expecting exception, but didn't get one");
     }
 
   @Test
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 33295a8..991f94a 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -532,32 +532,33 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         HashMap<String, Object> ret = new HashMap<String, Object>();
         boolean valid = true;
 
-        Project project = projectManager.getProject(projectName);
-        if (project != null) {
+        if (projectManager.isActiveProject(projectName)) {
             ret.put("error", "Project " + projectName
                 + " should be deleted before purging");
             valid = false;
         }
 
-        // project is already deleted
-        if (valid) {
-            project = projectManager.getInactiveProject(projectName);
-            // only eligible users can purge a project
-            if (!hasPermission(project, user, Type.ADMIN)) {
-                ret.put("error", "Cannot purge. User '" + user.getUserId()
-                    + "' is not an ADMIN.");
-                valid = false;
-                ;
+        try {
+            Project project = null;
+
+            // project is already deleted
+            if (valid) {
+                project = projectManager.getProject(projectName);
+                // only eligible users can purge a project
+                if (project == null
+                    || !hasPermission(project, user, Type.ADMIN)) {
+                    ret.put("error", "Cannot purge. User '" + user.getUserId()
+                        + "' is not an ADMIN.");
+                    valid = false;
+                }
             }
-        }
 
-        if (valid) {
-            try {
+            if (valid) {
                 projectManager.purgeProject(project, user);
-            } catch (ProjectManagerException e) {
-                ret.put("error", e.getMessage());
-                valid = false;
             }
+        } catch (Exception e) {
+            ret.put("error", e.getMessage());
+            valid = false;
         }
 
         ret.put("success", valid);