You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ec...@apache.org on 2012/06/28 07:00:11 UTC

svn commit: r1354816 - /hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java

Author: ecapriolo
Date: Thu Jun 28 05:00:10 2012
New Revision: 1354816

URL: http://svn.apache.org/viewvc?rev=1354816&view=rev
Log:
HIVE-3206 FileUtils.tar assumes wrong directory in some cases. Navis Ryu (via egc)

Modified:
    hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java

Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java?rev=1354816&r1=1354815&r2=1354816&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java (original)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java Thu Jun 28 05:00:10 2012
@@ -255,27 +255,25 @@ public final class FileUtils {
    */
   public static void tar(String parentDir, String[] inputFiles, String outputFile)
       throws IOException {
-    TarArchiveOutputStream tOut = null;
 
+    FileOutputStream out = null;
     try {
-      tOut = new TarArchiveOutputStream(
-          new GzipCompressorOutputStream(
-              new BufferedOutputStream(
-                  new FileOutputStream(new File(parentDir, outputFile)))));
+      out = new FileOutputStream(new File(parentDir, outputFile));
+      TarArchiveOutputStream tOut = new TarArchiveOutputStream(
+          new GzipCompressorOutputStream(new BufferedOutputStream(out)));
 
       for (int i = 0; i < inputFiles.length; i++) {
-        File f = new File(inputFiles[i]);
+        File f = new File(parentDir, inputFiles[i]);
         TarArchiveEntry tarEntry = new TarArchiveEntry(f, f.getName());
         tOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
         tOut.putArchiveEntry(tarEntry);
-        IOUtils.copy(new FileInputStream(f), tOut);
+        IOUtils.copy(new FileInputStream(f), tOut); // copy with 8K buffer, not close
         tOut.closeArchiveEntry();
       }
+      tOut.close(); // finishes inside
     } finally {
-      if(tOut != null ) {
-        tOut.finish();
-        tOut.close();
-      }
+      // TarArchiveOutputStream seemed not to close files properly in error situation
+      org.apache.hadoop.io.IOUtils.closeStream(out);
     }
   }
 }