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);