Skip to content

Commit cef82c3

Browse files
authored
fix: DH-20129: Return delegated AwsCredentialsProvider (deephaven#7080)
This fixes the issue where `DeephavenS3ClientCredentialsProvider#resolveCredentials` was improperly caching `AwsCredentials` results by simply returning the actual `AwsCredentialsProvider` during the create.
1 parent 37f3f8c commit cef82c3

1 file changed

Lines changed: 16 additions & 22 deletions

File tree

extensions/iceberg/s3/src/main/java/io/deephaven/iceberg/util/DeephavenS3ClientCredentialsProvider.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import org.apache.iceberg.aws.AwsClientProperties;
77
import org.apache.iceberg.aws.s3.S3FileIOProperties;
8-
import org.jetbrains.annotations.NotNull;
98
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
109
import software.amazon.awssdk.auth.credentials.AwsCredentials;
1110
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
@@ -19,32 +18,27 @@
1918
* fixed.
2019
*/
2120
// TODO (DH-19448): Remove this class once Iceberg fix for #13131 is released
22-
public class DeephavenS3ClientCredentialsProvider implements AwsCredentialsProvider {
23-
24-
private final S3FileIOProperties s3FileIOProperties;
25-
private final AwsClientProperties awsClientProperties;
26-
27-
private AwsCredentials cachedCredentials;
28-
29-
public static DeephavenS3ClientCredentialsProvider create(Map<String, String> properties) {
30-
return new DeephavenS3ClientCredentialsProvider(properties);
21+
public final class DeephavenS3ClientCredentialsProvider implements AwsCredentialsProvider {
22+
23+
// See org.apache.iceberg.aws.AwsClientProperties.credentialsProvider
24+
// It does do a check to make sure the class implements AwsCredentials provider, but that isn't actually necessary
25+
// since it will just take the return value of this create.
26+
@SuppressWarnings("unused")
27+
public static AwsCredentialsProvider create(final Map<String, String> properties) {
28+
final S3FileIOProperties s3FileIOProperties = new S3FileIOProperties(properties);
29+
final AwsClientProperties awsClientProperties = new AwsClientProperties(properties);
30+
return s3FileIOProperties.isRemoteSigningEnabled()
31+
? AnonymousCredentialsProvider.create()
32+
: awsClientProperties.credentialsProvider(s3FileIOProperties.accessKeyId(),
33+
s3FileIOProperties.secretAccessKey(), s3FileIOProperties.sessionToken());
3134
}
3235

33-
private DeephavenS3ClientCredentialsProvider(@NotNull final Map<String, String> properties) {
34-
this.s3FileIOProperties = new S3FileIOProperties(properties);
35-
this.awsClientProperties = new AwsClientProperties(properties);
36+
private DeephavenS3ClientCredentialsProvider() {
37+
throw new UnsupportedOperationException();
3638
}
3739

3840
@Override
3941
public AwsCredentials resolveCredentials() {
40-
if (cachedCredentials == null) {
41-
final AwsCredentialsProvider delegateCredentialsProvider =
42-
s3FileIOProperties.isRemoteSigningEnabled()
43-
? AnonymousCredentialsProvider.create()
44-
: awsClientProperties.credentialsProvider(s3FileIOProperties.accessKeyId(),
45-
s3FileIOProperties.secretAccessKey(), s3FileIOProperties.sessionToken());
46-
cachedCredentials = delegateCredentialsProvider.resolveCredentials();
47-
}
48-
return cachedCredentials;
42+
throw new UnsupportedOperationException();
4943
}
5044
}

0 commit comments

Comments
 (0)