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 Vinod Kumar Vavilapalli
parent 9642a861e1
commit 2230754f2a
2 changed files with 15 additions and 7 deletions

View File

@ -48,6 +48,9 @@ Release 2.6.1 - UNRELEASED
HADOOP-11674. oneByteBuf in CryptoInputStream and CryptoOutputStream
should be non static. (Sean Busbey via yliu)
HADOOP-11710. Make CryptoOutputStream behave like DFSOutputStream wrt
synchronization. (Sean Busbey via yliu)
Release 2.6.0 - 2014-11-18
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
@ -125,7 +128,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();
@ -212,22 +215,24 @@ public class CryptoOutputStream extends FilterOutputStream implements
}
@Override
public void close() throws IOException {
public synchronized void close() throws IOException {
if (closed) {
return;
}
try {
super.close();
freeBuffers();
} finally {
closed = true;
}
}
/**
* To flush, we need to encrypt the data in the buffer and write to the
* underlying stream, then do the flush.
*/
@Override
public void flush() throws IOException {
public synchronized void flush() throws IOException {
checkStream();
encrypt();
super.flush();