Author: yliu
Date: Mon Jun 2 14:35:32 2014
New Revision: 1599228
URL: http://svn.apache.org/r1599228
Log:
HADOOP-10653. Add a new constructor for CryptoInputStream that receives current
position of wrapped stream. Contributed by Yi Liu
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoInputStream.java
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt?rev=1599228&r1=1599227&r2=1599228&view=diff
==============================================================================
---
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
(original)
+++
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
Mon Jun 2 14:35:32 2014
@@ -21,6 +21,9 @@ fs-encryption (Unreleased)
HADOOP-10635. Add a method to CryptoCodec to generate SRNs for IV. (Yi Liu)
+ HADOOP-10653. Add a new constructor for CryptoInputStream that
+ receives current position of wrapped stream. (Yi Liu)
+
OPTIMIZATIONS
BUG FIXES
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoInputStream.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoInputStream.java?rev=1599228&r1=1599227&r2=1599228&view=diff
==============================================================================
---
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoInputStream.java
(original)
+++
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoInputStream.java
Mon Jun 2 14:35:32 2014
@@ -102,18 +102,22 @@ public class CryptoInputStream extends F
public CryptoInputStream(InputStream in, CryptoCodec codec,
int bufferSize, byte[] key, byte[] iv) throws IOException {
+ this(in, codec, bufferSize, key, iv,
+ CryptoStreamUtils.getInputStreamOffset(in));
+ }
+
+ public CryptoInputStream(InputStream in, CryptoCodec codec,
+ int bufferSize, byte[] key, byte[] iv, long streamOffset) throws
IOException {
super(in);
this.bufferSize = CryptoStreamUtils.checkBufferSize(codec, bufferSize);
this.codec = codec;
this.key = key.clone();
this.initIV = iv.clone();
this.iv = iv.clone();
+ this.streamOffset = streamOffset;
inBuffer = ByteBuffer.allocateDirect(this.bufferSize);
outBuffer = ByteBuffer.allocateDirect(this.bufferSize);
decryptor = getDecryptor();
- if (in instanceof Seekable) {
- streamOffset = ((Seekable) in).getPos();
- }
resetStreamOffset(streamOffset);
}
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java?rev=1599228&r1=1599227&r2=1599228&view=diff
==============================================================================
---
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java
(original)
+++
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java
Mon Jun 2 14:35:32 2014
@@ -20,10 +20,13 @@ package org.apache.hadoop.crypto;
import static
org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_CRYPTO_BUFFER_SIZE_DEFAULT;
import static
org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_CRYPTO_BUFFER_SIZE_KEY;
+import java.io.IOException;
+import java.io.InputStream;
import java.nio.ByteBuffer;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.Seekable;
import com.google.common.base.Preconditions;
@@ -52,4 +55,15 @@ public class CryptoStreamUtils {
"Minimum value of buffer size is " + MIN_BUFFER_SIZE + ".");
return bufferSize - bufferSize % codec.getAlgorithmBlockSize();
}
+
+ /**
+ * If input stream is {@link org.apache.hadoop.fs.Seekable}, return it's
+ * current position, otherwise return 0;
+ */
+ public static long getInputStreamOffset(InputStream in) throws IOException {
+ if (in instanceof Seekable) {
+ return ((Seekable) in).getPos();
+ }
+ return 0;
+ }
}