azkaban-uncached

Details

diff --git a/src/java/azkaban/execapp/FlowRunnerManager.java b/src/java/azkaban/execapp/FlowRunnerManager.java
index 6360197..c45475f 100644
--- a/src/java/azkaban/execapp/FlowRunnerManager.java
+++ b/src/java/azkaban/execapp/FlowRunnerManager.java
@@ -18,6 +18,7 @@ package azkaban.execapp;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.io.FilenameFilter;
 import java.io.IOException;
 import java.lang.Thread.State;
 import java.util.ArrayList;
@@ -101,6 +102,8 @@ public class FlowRunnerManager implements EventListener {
 			projectDirectory.mkdirs();
 		}
 
+		installedProjects = loadExistingProjects();
+		
 		//azkaban.temp.dir
 		numThreads = props.getInt("executor.flow.threads", DEFAULT_NUM_EXECUTING_FLOWS);
 		executorService = Executors.newFixedThreadPool(numThreads);
@@ -118,6 +121,32 @@ public class FlowRunnerManager implements EventListener {
 		
 	}
 
+	private Map<Pair<Integer, Integer>, ProjectVersion> loadExistingProjects() {
+		Map<Pair<Integer, Integer>, ProjectVersion> allProjects = new HashMap<Pair<Integer,Integer>, ProjectVersion>();
+		for(File project : projectDirectory.listFiles(new FilenameFilter() {
+			
+			String pattern = "[0-9]+\\.[0-9]+";
+			@Override
+			public boolean accept(File dir, String name) {
+				return name.matches(pattern);
+			}
+		})) {
+			if(project.isDirectory()) {
+				try {
+					String fileName = new File(project.getAbsolutePath()).getName();
+					int projectId = Integer.parseInt(fileName.split("\\.")[0]);
+					int versionNum = Integer.parseInt(fileName.split("\\.")[1]);
+					ProjectVersion version = new ProjectVersion(projectId, versionNum);
+					allProjects.put(new Pair<Integer, Integer>(projectId, versionNum), version);
+				}
+				catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return allProjects;
+	}
+
 	public Props getGlobalProps() {
 		return globalProps;
 	}
diff --git a/src/java/azkaban/project/ProjectManager.java b/src/java/azkaban/project/ProjectManager.java
index d4ac2fb..a5be28b 100644
--- a/src/java/azkaban/project/ProjectManager.java
+++ b/src/java/azkaban/project/ProjectManager.java
@@ -32,6 +32,7 @@ public class ProjectManager {
 	private final Props props;
 	private final File tempDir;
 	private final int projectVersionRetention;
+	private final boolean creatorDefaultPermissions;
 	
 	public ProjectManager(ProjectLoader loader, Props props) {
 		this.projectLoader = loader;
@@ -40,6 +41,8 @@ public class ProjectManager {
 		this.projectVersionRetention = (props.getInt("project.version.retention", 3));
 		logger.info("Project version retention is set to " + projectVersionRetention);
 		
+		this.creatorDefaultPermissions = props.getBoolean("azkaban.creator.default.permissions", true);
+		
 		if (!tempDir.exists()) {
 			tempDir.mkdirs();
 		}
@@ -170,8 +173,19 @@ public class ProjectManager {
 		projectsByName.put(newProject.getName(), newProject);
 		projectsById.put(newProject.getId(), newProject);
 		
+		if(creatorDefaultPermissions) {
 		// Add permission to project
-		projectLoader.updatePermission(newProject, creator.getUserId(), new Permission(Permission.Type.ADMIN), false);
+			projectLoader.updatePermission(newProject, creator.getUserId(), new Permission(Permission.Type.ADMIN), false);
+			
+			// Add proxy user 
+			newProject.getProxyUsers().add(creator.getUserId());
+			try {
+				updateProjectSetting(newProject);
+			} catch (ProjectManagerException e) {
+				e.printStackTrace();
+				throw e;
+			}
+		}
 		
 		projectLoader.postEvent(newProject, EventType.CREATED, creator.getUserId(), null);