2121import com .fasterxml .jackson .databind .MapperFeature ;
2222import com .fasterxml .jackson .databind .ObjectMapper ;
2323import com .fasterxml .jackson .databind .json .JsonMapper ;
24- import com .google .common .collect .ImmutableSet ;
2524import io .minio .credentials .Credentials ;
2625import io .minio .credentials .Provider ;
2726import io .minio .errors .ErrorResponseException ;
@@ -100,17 +99,13 @@ public abstract class BaseS3Client implements AutoCloseable {
10099 .build ();
101100
102101 private static final String RETRY_HEAD = "RetryHead" ;
103- private static final String END_HTTP = "----------END-HTTP----------" ;
104- private static final String UPLOAD_ID = "uploadId" ;
105- private static final Set <String > TRACE_QUERY_PARAMS =
106- ImmutableSet .of ("retention" , "legal-hold" , "tagging" , UPLOAD_ID , "acl" , "attributes" );
107- private PrintWriter traceStream ;
102+ private volatile PrintWriter traceStream ;
108103 protected final Map <String , String > regionCache = new ConcurrentHashMap <>();
109104 protected String userAgent = Utils .getDefaultUserAgent ();
110105
111106 protected Http .BaseUrl baseUrl ;
112107 protected Provider provider ;
113- protected OkHttpClient httpClient ;
108+ protected volatile OkHttpClient httpClient ;
114109 protected boolean closeHttpClient ;
115110
116111 protected BaseS3Client (
@@ -272,21 +267,17 @@ private String[] handleRedirectResponse(
272267 protected CompletableFuture <Response > executeAsync (Http .S3Request s3request , String region ) {
273268 Credentials credentials = (provider == null ) ? null : provider .fetch ();
274269 Http .Request request = null ;
270+ PrintWriter traceStream = this .traceStream ;
275271 try {
276- request = s3request .toRequest (baseUrl , region , credentials );
272+ request = s3request .toRequest (baseUrl , region , credentials , traceStream );
277273 } catch (MinioException e ) {
278274 return Utils .failedFuture (e );
279275 }
280276
281277 StringBuilder traceBuilder = new StringBuilder (request .httpTraces ());
282- PrintWriter traceStream = this .traceStream ;
283278 if (traceStream != null ) traceStream .print (request .httpTraces ());
284279
285280 OkHttpClient httpClient = this .httpClient ;
286- // FIXME: enable retry for all request.
287- // if (!s3request.retryFailure()) {
288- // httpClient = httpClient.newBuilder().retryOnConnectionFailure(false).build();
289- // }
290281
291282 okhttp3 .Request httpRequest = request .httpRequest ();
292283 CompletableFuture <Response > completableFuture = newCompleteableFuture ();
@@ -330,14 +321,14 @@ private void onResponse(final Response response) throws IOException {
330321 Set <String > keys = s3request .queryParams ().keySet ();
331322 if ((s3request .method () != Http .Method .GET
332323 || s3request .object () == null
333- || !Collections .disjoint (keys , TRACE_QUERY_PARAMS ))
324+ || !Collections .disjoint (keys , Http . TRACE_QUERY_PARAMS ))
334325 && !(keys .contains ("events" )
335326 && (keys .contains ("prefix" ) || keys .contains ("suffix" )))) {
336327 String responseBody = response .peekBody (1024 * 1024 ).string ();
337328 traceStream .print (responseBody );
338329 if (!responseBody .endsWith ("\n " )) traceStream .println ();
339330 }
340- traceStream .println (END_HTTP );
331+ traceStream .println (Http . END_HTTP );
341332 }
342333
343334 completableFuture .complete (response );
@@ -357,8 +348,8 @@ private void onResponse(final Response response) throws IOException {
357348 if (traceStream != null ) traceStream .println ();
358349 }
359350 }
360- traceBuilder .append (END_HTTP ).append ("\n " );
361- if (traceStream != null ) traceStream .println (END_HTTP );
351+ traceBuilder .append (Http . END_HTTP ).append ("\n " );
352+ if (traceStream != null ) traceStream .println (Http . END_HTTP );
362353
363354 // Error out for Non-XML response from server for non-HEAD requests.
364355 String contentType = response .headers ().get (Http .Headers .CONTENT_TYPE );
@@ -635,7 +626,7 @@ protected void checkArgs(BaseArgs args) {
635626 public CompletableFuture <AbortMultipartUploadResponse > abortMultipartUpload (
636627 AbortMultipartUploadArgs args ) {
637628 checkArgs (args );
638- return executeDeleteAsync (args , null , new Http .QueryParameters (UPLOAD_ID , args .uploadId ()))
629+ return executeDeleteAsync (args , null , new Http .QueryParameters (Http . UPLOAD_ID , args .uploadId ()))
639630 .thenApply (
640631 response -> {
641632 try {
@@ -672,7 +663,7 @@ public CompletableFuture<ObjectWriteResponse> completeMultipartUpload(
672663 return executePostAsync (
673664 args ,
674665 args .ssec () == null ? null : args .ssec ().headers (),
675- new Http .QueryParameters (UPLOAD_ID , args .uploadId ()),
666+ new Http .QueryParameters (Http . UPLOAD_ID , args .uploadId ()),
676667 body )
677668 .thenApply (
678669 response -> {
@@ -1191,7 +1182,7 @@ public CompletableFuture<ListObjectVersionsResponse> listObjectVersions(
11911182 public CompletableFuture <ListPartsResponse > listParts (ListPartsArgs args ) {
11921183 Http .QueryParameters queryParams =
11931184 new Http .QueryParameters (
1194- UPLOAD_ID ,
1185+ Http . UPLOAD_ID ,
11951186 args .uploadId (),
11961187 "max-parts" ,
11971188 (args .maxParts () != null ) ? args .maxParts ().toString () : "1000" );
0 commit comments