HADOOP-11710. Make CryptoOutputStream behave like DFSOutputStream wrt synchronization. (Sean Busbey via yliu)

(cherry picked from commit 813c93cb25)
This commit is contained in:
yliu 2015-03-13 02:26:16 +08:00 committed by Tsuyoshi Ozawa
parent 834e9bc3b2
commit 5eac0a9ec0
2 changed files with 15 additions and 7 deletions

View File

@ -656,6 +656,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-11693. Azure Storage FileSystem rename operations are throttled too
aggressively to complete HBase WAL archiving. (Duo Xu via cnauroth)
HADOOP-11710. Make CryptoOutputStream behave like DFSOutputStream wrt
synchronization. (Sean Busbey via yliu)
Release 2.6.1 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -40,6 +40,9 @@ import com.google.common.base.Preconditions;
* padding = pos%(algorithm blocksize);
* <p/>
* The underlying stream offset is maintained as state.
*
* Note that while some of this class' methods are synchronized, this is just to
* match the threadsafety behavior of DFSOutputStream. See HADOOP-11710.
*/
@InterfaceAudience.Private
@InterfaceStability.Evolving
@ -126,7 +129,7 @@ public class CryptoOutputStream extends FilterOutputStream implements
* @throws IOException
*/
@Override
public void write(byte[] b, int off, int len) throws IOException {
public synchronized void write(byte[] b, int off, int len) throws IOException {
checkStream();
if (b == null) {
throw new NullPointerException();
@ -213,14 +216,16 @@ public class CryptoOutputStream extends FilterOutputStream implements
}
@Override
public void close() throws IOException {
public synchronized void close() throws IOException {
if (closed) {
return;
}
super.close();
freeBuffers();
closed = true;
try {
super.close();
freeBuffers();
} finally {
closed = true;
}
}
/**
@ -228,7 +233,7 @@ public class CryptoOutputStream extends FilterOutputStream implements
* underlying stream, then do the flush.
*/
@Override
public void flush() throws IOException {
public synchronized void flush() throws IOException {
checkStream();
encrypt();
super.flush();