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

This commit is contained in:
yliu 2015-03-13 02:25:02 +08:00
parent 8212877415
commit a85291003c
2 changed files with 15 additions and 7 deletions

View File

@ -1097,6 +1097,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-11693. Azure Storage FileSystem rename operations are throttled too HADOOP-11693. Azure Storage FileSystem rename operations are throttled too
aggressively to complete HBase WAL archiving. (Duo Xu via cnauroth) 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 Release 2.6.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -40,6 +40,9 @@ import com.google.common.base.Preconditions;
* padding = pos%(algorithm blocksize); * padding = pos%(algorithm blocksize);
* <p/> * <p/>
* The underlying stream offset is maintained as state. * 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 @InterfaceAudience.Private
@InterfaceStability.Evolving @InterfaceStability.Evolving
@ -126,7 +129,7 @@ public class CryptoOutputStream extends FilterOutputStream implements
* @throws IOException * @throws IOException
*/ */
@Override @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(); checkStream();
if (b == null) { if (b == null) {
throw new NullPointerException(); throw new NullPointerException();
@ -213,14 +216,16 @@ public class CryptoOutputStream extends FilterOutputStream implements
} }
@Override @Override
public void close() throws IOException { public synchronized void close() throws IOException {
if (closed) { if (closed) {
return; return;
} }
try {
super.close(); super.close();
freeBuffers(); freeBuffers();
closed = true; } finally {
closed = true;
}
} }
/** /**
@ -228,7 +233,7 @@ public class CryptoOutputStream extends FilterOutputStream implements
* underlying stream, then do the flush. * underlying stream, then do the flush.
*/ */
@Override @Override
public void flush() throws IOException { public synchronized void flush() throws IOException {
checkStream(); checkStream();
encrypt(); encrypt();
super.flush(); super.flush();