1414package io .trino .filesystem .s3 ;
1515
1616import com .google .inject .Inject ;
17+ import io .airlift .units .Duration ;
1718import io .opentelemetry .api .OpenTelemetry ;
1819import io .opentelemetry .instrumentation .awssdk .v2_2 .AwsSdkTelemetry ;
1920import io .trino .filesystem .Location ;
@@ -162,6 +163,8 @@ private static S3ClientFactory s3ClientFactory(SdkHttpClient httpClient, OpenTel
162163 Optional <String > staticEndpoint = Optional .ofNullable (config .getEndpoint ());
163164 boolean pathStyleAccess = config .isPathStyleAccess ();
164165 boolean useWebIdentityTokenCredentialsProvider = config .isUseWebIdentityTokenCredentialsProvider ();
166+ Optional <Duration > webIdentityTokenCredentialsPrefetchTime = config .getWebIdentityTokenCredentialsPrefetchTime ();
167+ Optional <Duration > webIdentityTokenCredentialsStaleTime = config .getWebIdentityTokenCredentialsStaleTime ();
165168 Optional <String > staticIamRole = Optional .ofNullable (config .getIamRole ());
166169 String staticRoleSessionName = config .getRoleSessionName ();
167170 String externalId = config .getExternalId ();
@@ -190,9 +193,10 @@ private static S3ClientFactory s3ClientFactory(SdkHttpClient httpClient, OpenTel
190193 s3 .forcePathStyle (pathStyleAccess );
191194
192195 if (useWebIdentityTokenCredentialsProvider ) {
193- s3 .credentialsProvider (WebIdentityTokenFileCredentialsProvider .builder ()
194- .asyncCredentialUpdateEnabled (true )
195- .build ());
196+ WebIdentityTokenFileCredentialsProvider .Builder builder = WebIdentityTokenFileCredentialsProvider .builder ().asyncCredentialUpdateEnabled (true );
197+ webIdentityTokenCredentialsPrefetchTime .ifPresent (duration -> builder .prefetchTime (duration .toJavaTime ()));
198+ webIdentityTokenCredentialsStaleTime .ifPresent (duration -> builder .staleTime (duration .toJavaTime ()));
199+ s3 .credentialsProvider (builder .build ());
196200 }
197201 else if (iamRole .isPresent ()) {
198202 s3 .credentialsProvider (StsAssumeRoleCredentialsProvider .builder ()
@@ -219,6 +223,8 @@ private static S3Presigner s3PreSigner(SdkHttpClient httpClient, OpenTelemetry o
219223 Optional <String > staticEndpoint = Optional .ofNullable (config .getEndpoint ());
220224 boolean pathStyleAccess = config .isPathStyleAccess ();
221225 boolean useWebIdentityTokenCredentialsProvider = config .isUseWebIdentityTokenCredentialsProvider ();
226+ Optional <Duration > webIdentityTokenCredentialsPrefetchTime = config .getWebIdentityTokenCredentialsPrefetchTime ();
227+ Optional <Duration > webIdentityTokenCredentialsStaleTime = config .getWebIdentityTokenCredentialsStaleTime ();
222228 Optional <String > staticIamRole = Optional .ofNullable (config .getIamRole ());
223229 String staticRoleSessionName = config .getRoleSessionName ();
224230 String externalId = config .getExternalId ();
@@ -234,9 +240,10 @@ private static S3Presigner s3PreSigner(SdkHttpClient httpClient, OpenTelemetry o
234240 .build ());
235241
236242 if (useWebIdentityTokenCredentialsProvider ) {
237- s3 .credentialsProvider (WebIdentityTokenFileCredentialsProvider .builder ()
238- .asyncCredentialUpdateEnabled (true )
239- .build ());
243+ WebIdentityTokenFileCredentialsProvider .Builder builder = WebIdentityTokenFileCredentialsProvider .builder ().asyncCredentialUpdateEnabled (true );
244+ webIdentityTokenCredentialsPrefetchTime .ifPresent (duration -> builder .prefetchTime (duration .toJavaTime ()));
245+ webIdentityTokenCredentialsStaleTime .ifPresent (duration -> builder .staleTime (duration .toJavaTime ()));
246+ s3 .credentialsProvider (builder .build ());
240247 }
241248 else if (staticIamRole .isPresent ()) {
242249 s3 .credentialsProvider (StsAssumeRoleCredentialsProvider .builder ()
0 commit comments