@@ -19,8 +19,8 @@ public class ChecksumRequestFilter implements ClientRequestFilter {
19
19
20
20
private S3Config s3Config ;
21
21
private S3Signer signer ;
22
- private ThreadLocal < ClientRequestContext > requestContextThreadLocal = new ThreadLocal <>() ;
23
- private ThreadLocal < OutputStream > bufferThreadLocal = new ThreadLocal <>() ;
22
+ private ClientRequestContext clientRequestContext ;
23
+ private OutputStream buffer ;
24
24
25
25
public ChecksumRequestFilter (S3Config s3Config ) {
26
26
this .s3Config = s3Config ;
@@ -35,14 +35,14 @@ public void filter(ClientRequestContext requestContext) throws IOException {
35
35
Boolean verifyWrite = (Boolean ) requestContext .getConfiguration ().getProperty (RestUtil .PROPERTY_VERIFY_WRITE_CHECKSUM );
36
36
Boolean generateMd5 = (Boolean ) requestContext .getConfiguration ().getProperty (RestUtil .PROPERTY_GENERATE_CONTENT_MD5 );
37
37
OutputStream out = requestContext .getEntityStream ();
38
- bufferThreadLocal . set ( out ) ;
38
+ buffer = out ;
39
39
40
40
if ((verifyWrite != null && verifyWrite ) || (generateMd5 != null && generateMd5 )){
41
41
try {
42
42
RunningChecksum checksum = new RunningChecksum (ChecksumAlgorithm .MD5 );
43
43
out = new ChecksummedOutputStream (out , checksum , generateMd5 );
44
44
requestContext .setEntityStream (out );
45
- requestContextThreadLocal . set ( requestContext ) ;
45
+ clientRequestContext = requestContext ;
46
46
} catch (NoSuchAlgorithmException e ) {
47
47
throw new RuntimeException ("fatal: MD5 algorithm not found" );
48
48
}
@@ -89,10 +89,12 @@ public void flush() throws IOException {
89
89
public void close () throws IOException {
90
90
delegate .close ();
91
91
92
- ClientRequestContext clientRequestContext = requestContextThreadLocal .get ();
93
92
if (generateContentMd5 != null && generateContentMd5 ) {
94
93
// add Content-MD5 (before anything is written to the final stream)
95
94
clientRequestContext .getHeaders ().add (RestUtil .HEADER_CONTENT_MD5 , DatatypeConverter .printBase64Binary (checksum .getByteValue ()));
95
+ clientRequestContext .getHeaders ().add ("xxx" , DatatypeConverter .printBase64Binary (checksum .getByteValue ()));
96
+
97
+
96
98
// need to re-sign request because Content-MD5 is included in the signature!
97
99
if (s3Config .getIdentity () != null ) {
98
100
Map <String , String > parameters = RestUtil .getQueryParameterMap (clientRequestContext .getUri ().getRawQuery ());
@@ -105,7 +107,7 @@ public void close() throws IOException {
105
107
} else {
106
108
clientRequestContext .setProperty (RestUtil .PROPERTY_VERIFY_WRITE_CHECKSUM_VALUE , checksum .getHexValue ());
107
109
}
108
- clientRequestContext .setEntityStream (bufferThreadLocal . get () );
110
+ clientRequestContext .setEntityStream (buffer );
109
111
}
110
112
111
113
public ChecksumValue getChecksum () { return checksum ; }
0 commit comments