You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ad...@apache.org on 2017/08/09 12:47:48 UTC

svn commit: r1804513 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java

Author: adulceanu
Date: Wed Aug  9 12:47:48 2017
New Revision: 1804513

URL: http://svn.apache.org/viewvc?rev=1804513&view=rev
Log:
OAK-5902 - Cold standby should allow syncing of blobs bigger than 2.2 GB
Fixed deletion of temporary spool file with DeleteOnCloseFileInputStream after writing blob to blob store

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java?rev=1804513&r1=1804512&r2=1804513&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java Wed Aug  9 12:47:48 2017
@@ -22,6 +22,7 @@ import static java.util.Collections.empt
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -41,6 +42,33 @@ public class ResponseDecoder extends Byt
     private static final String TMP_DIR = System.getProperty("java.io.tmpdir");
     private static final Logger log = LoggerFactory.getLogger(ResponseDecoder.class);
 
+    static class DeleteOnCloseFileInputStream extends FileInputStream {
+        private static final Logger log = LoggerFactory.getLogger(ResponseDecoder.class);
+        
+        private File file;
+
+        public DeleteOnCloseFileInputStream(String fileName) throws FileNotFoundException {
+            this(new File(fileName));
+        }
+
+        public DeleteOnCloseFileInputStream(File file) throws FileNotFoundException {
+            super(file);
+            this.file = file;
+        }
+
+        public void close() throws IOException {
+            try {
+                super.close();
+            } finally {
+                if (file != null) {
+                    log.debug("Processing input stream finished! Deleting file {}", file.getAbsolutePath());
+                    file.delete();
+                    file = null;
+                }
+            }
+        }
+    }
+    
     @Override
     protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
         int length = in.readInt();
@@ -130,7 +158,7 @@ public class ResponseDecoder extends Byt
         if ((mask & (1 << 1)) != 0) {
             log.debug("Received entire blob {}", blobId);
 
-            FileInputStream fis = new FileInputStream(tempFile);
+            FileInputStream fis = new DeleteOnCloseFileInputStream(tempFile);
             out.add(new GetBlobResponse(null, blobId, fis, fis.getChannel().size()));
         }
     }