CRUNCH-669: Add an option to disable temp dir deletion in the finalize() method of a DistributedPipeline
diff --git a/crunch-core/src/main/java/org/apache/crunch/impl/dist/DistributedPipeline.java b/crunch-core/src/main/java/org/apache/crunch/impl/dist/DistributedPipeline.java
index 1deafd5..0afa766 100644
--- a/crunch-core/src/main/java/org/apache/crunch/impl/dist/DistributedPipeline.java
+++ b/crunch-core/src/main/java/org/apache/crunch/impl/dist/DistributedPipeline.java
@@ -52,7 +52,6 @@
 import org.apache.crunch.io.ReadableSource;
 import org.apache.crunch.io.ReadableSourceTarget;
 import org.apache.crunch.io.To;
-import org.apache.crunch.io.impl.FileTargetImpl;
 import org.apache.crunch.materialize.MaterializableIterable;
 import org.apache.crunch.types.PTableType;
 import org.apache.crunch.types.PType;
@@ -75,6 +74,7 @@
 
   private static final Random RANDOM = new Random();
   private static final String CRUNCH_TMP_DIRS = "crunch.tmp.dirs";
+  private static final String CRUNCH_PRESERVE_TEMP_DIR = "crunch.preserve.tmp.dir";
 
   private final String name;
   protected final PCollectionFactory factory;
@@ -82,6 +82,7 @@
   protected final Map<PCollectionImpl<?>, MaterializableIterable<?>> outputTargetsToMaterialize;
   protected final Map<PipelineCallable<?>, Set<Target>> allPipelineCallables;
   protected final Set<Target> appendedTargets;
+  private final boolean preserveTempDirectory;
   private Path tempDirectory;
   private int tempFileIndex;
   private int nextAnonymousStageId;
@@ -105,6 +106,7 @@
     this.conf = conf;
     this.tempFileIndex = 0;
     this.nextAnonymousStageId = 0;
+    this.preserveTempDirectory = conf.getBoolean(CRUNCH_PRESERVE_TEMP_DIR, false);
   }
 
   public static boolean isTempDir(Job job, String outputPath) {
@@ -497,7 +499,9 @@
   protected void finalize() throws Throwable {
     if (tempDirectory != null) {
       LOG.warn("Temp directory {} still exists; was Pipeline.done() called?", tempDirectory);
-      deleteTempDirectory();
+      if (!preserveTempDirectory) {
+        deleteTempDirectory();
+      }
     }
     super.finalize();
   }