Kontinuation commented on issue #8601:
URL: https://github.com/apache/iceberg/issues/8601#issuecomment-1732469299

   I injected some code into 
`software.amazon.awssdk.thirdparty.org.apache.http.impl.conn.PoolingHttpClientConnectionManager`
 in AWS SDK v2 to print the stacktrace when the connection pool was shut down 
and ran several hours of testing. I found that it was shut down by the 
finalizer of `S3FileIO`:
   
   ```
   shutdown() was called
      java.base/java.lang.Thread.getStackTrace(Unknown Source)
      
software.amazon.awssdk.thirdparty.org.apache.http.impl.conn.PoolingHttpClientConnectionManager.shutdown(PoolingHttpClientConnectionManager.java:411)
      
software.amazon.awssdk.http.apache.ApacheHttpClient.close(ApacheHttpClient.java:247)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
      
software.amazon.awssdk.utils.AttributeMap.lambda$close$0(AttributeMap.java:87)
      java.base/java.util.HashMap$Values.forEach(Unknown Source)
      software.amazon.awssdk.utils.AttributeMap.close(AttributeMap.java:87)
      
software.amazon.awssdk.core.client.config.SdkClientConfiguration.close(SdkClientConfiguration.java:79)
      
software.amazon.awssdk.core.internal.http.HttpClientDependencies.close(HttpClientDependencies.java:80)
      
software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient.close(AmazonSyncHttpClient.java:73)
      
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.close(BaseSyncClientHandler.java:88)
      
software.amazon.awssdk.services.sts.DefaultStsClient.close(DefaultStsClient.java:1344)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      
software.amazon.awssdk.services.sts.internal.StsWebIdentityCredentialsProviderFactory$StsWebIdentityCredentialsProvider.close(StsWebIdentityCredentialsProviderFactory.java:99)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
      
software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider.close(WebIdentityTokenFileCredentialsProvider.java:132)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
      
software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain.lambda$close$2(AwsCredentialsProviderChain.java:122)
      java.base/java.util.ArrayList.forEach(Unknown Source)
      java.base/java.util.Collections$UnmodifiableCollection.forEach(Unknown 
Source)
      
software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain.close(AwsCredentialsProviderChain.java:122)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
      software.amazon.awssdk.utils.Lazy.close(Lazy.java:77)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
      
software.amazon.awssdk.auth.credentials.internal.LazyAwsCredentialsProvider.close(LazyAwsCredentialsProvider.java:50)
      
software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider.close(DefaultCredentialsProvider.java:131)
      software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
      software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
      
software.amazon.awssdk.utils.AttributeMap.lambda$close$0(AttributeMap.java:87)
      java.base/java.util.HashMap$Values.forEach(Unknown Source)
      software.amazon.awssdk.utils.AttributeMap.close(AttributeMap.java:87)
      
software.amazon.awssdk.core.client.config.SdkClientConfiguration.close(SdkClientConfiguration.java:79)
      
software.amazon.awssdk.core.internal.http.HttpClientDependencies.close(HttpClientDependencies.java:80)
      
software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient.close(AmazonSyncHttpClient.java:73)
      
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.close(BaseSyncClientHandler.java:88)
      
software.amazon.awssdk.services.s3.DefaultS3Client.close(DefaultS3Client.java:11088)
      org.apache.iceberg.aws.s3.S3FileIO.close(S3FileIO.java:405)
      org.apache.iceberg.aws.s3.S3FileIO.finalize(S3FileIO.java:415)
      java.base/java.lang.System$2.invokeFinalize(Unknown Source)
      java.base/java.lang.ref.Finalizer.runFinalizer(Unknown Source)
      java.base/java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
   
   ```
   
   I think switching to another HTTP client implementation is not a sane 
solution to this problem since whatever HTTP client we are using, there is 
still the possibility of the client being shut down while in use.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to