azkaban-aplcache

Fixes GH #632: Correctly closes file handles that are leaked

4/6/2016 10:07:12 PM

Details

diff --git a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
index 52024f1..a069c29 100644
--- a/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
+++ b/azkaban-common/src/main/java/azkaban/project/ProjectManager.java
@@ -579,6 +579,7 @@ public class ProjectManager {
     ZipFile zipfile = new ZipFile(archiveFile);
     File unzipped = Utils.createTempDir(tempDir);
     Utils.unzip(zipfile, unzipped);
+    zipfile.close();
 
     return unzipped;
   }
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 fe8564d..2d202f1 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -1042,7 +1042,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
   /**
    * this only returns user permissions, but not group permissions and proxy
    * users
-   * 
+   *
    * @param project
    * @param ret
    */
@@ -1747,12 +1747,12 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         }
         ret.put("error", "Installation Failed.<br>" + error);
       } finally {
-        if (tempDir.exists()) {
-          FileUtils.deleteDirectory(tempDir);
-        }
         if (out != null) {
           out.close();
         }
+        if (tempDir.exists()) {
+          FileUtils.deleteDirectory(tempDir);
+        }
       }
 
       ret.put("version", String.valueOf(project.getVersion()));