HADOOP-11710. Make CryptoOutputStream behave like DFSOutputStream wrt synchronization. (Sean Busbey via yliu)
This commit is contained in:
parent
8212877415
commit
a85291003c
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue