Skip to content

Commit ef8ac22

Browse files
committed
use of putIfAbsent for Thread safety - remove individual provider reference in favor of map usage
1 parent dec58f6 commit ef8ac22

1 file changed

Lines changed: 13 additions & 30 deletions

File tree

  • powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/ParamManager.java

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ public final class ParamManager {
3131

3232
private static final CacheManager cacheManager = new CacheManager();
3333
private static final TransformationManager transformationManager = new TransformationManager();
34-
private static final ConcurrentHashMap<Class<? extends BaseProvider>, BaseProvider> providers = new ConcurrentHashMap<>();
3534

36-
private static SecretsProvider secretsProvider;
37-
private static SSMProvider ssmProvider;
35+
private static ConcurrentHashMap<Class<? extends BaseProvider>, BaseProvider> providers = new ConcurrentHashMap<>();
3836

3937
/**
4038
* Get a concrete implementation of {@link BaseProvider}.<br/>
@@ -47,6 +45,7 @@ public static <T extends BaseProvider> T getProvider(Class<T> providerClass) {
4745
throw new IllegalStateException("You cannot provide a null provider class.");
4846
}
4947
try {
48+
5049
if(!providers.containsKey(providerClass)) {
5150
Constructor<T> constructor = providerClass.getDeclaredConstructor(CacheManager.class);
5251
T provider = constructor.newInstance(cacheManager);
@@ -65,14 +64,7 @@ public static <T extends BaseProvider> T getProvider(Class<T> providerClass) {
6564
* @return a {@link SecretsProvider}
6665
*/
6766
public static SecretsProvider getSecretsProvider() {
68-
if (!providers.containsKey(SecretsProvider.class)) {
69-
secretsProvider = SecretsProvider.builder()
70-
.withCacheManager(cacheManager)
71-
.withTransformationManager(transformationManager)
72-
.build();
73-
providers.putIfAbsent(SecretsProvider.class, secretsProvider);
74-
}
75-
return secretsProvider;
67+
return getProvider(SecretsProvider.class);
7668
}
7769

7870
/**
@@ -81,14 +73,7 @@ public static SecretsProvider getSecretsProvider() {
8173
* @return a {@link SSMProvider}
8274
*/
8375
public static SSMProvider getSsmProvider() {
84-
if (!providers.containsKey(SSMProvider.class)) {
85-
ssmProvider = SSMProvider.builder()
86-
.withCacheManager(cacheManager)
87-
.withTransformationManager(transformationManager)
88-
.build();
89-
providers.putIfAbsent(SSMProvider.class, ssmProvider);
90-
}
91-
return ssmProvider;
76+
return getProvider(SSMProvider.class);
9277
}
9378

9479
/**
@@ -98,14 +83,13 @@ public static SSMProvider getSsmProvider() {
9883
*/
9984
public static SecretsProvider getSecretsProvider(SecretsManagerClient client) {
10085
if (!providers.containsKey(SecretsProvider.class)) {
101-
secretsProvider = SecretsProvider.builder()
86+
providers.putIfAbsent(SecretsProvider.class, SecretsProvider.builder()
10287
.withClient(client)
10388
.withCacheManager(cacheManager)
10489
.withTransformationManager(transformationManager)
105-
.build();
106-
providers.putIfAbsent(SecretsProvider.class, secretsProvider);
90+
.build());
10791
}
108-
return secretsProvider;
92+
return (SecretsProvider) providers.get(SecretsProvider.class);
10993
}
11094

11195
/**
@@ -115,14 +99,13 @@ public static SecretsProvider getSecretsProvider(SecretsManagerClient client) {
11599
*/
116100
public static SSMProvider getSsmProvider(SsmClient client) {
117101
if (!providers.containsKey(SSMProvider.class)) {
118-
ssmProvider = SSMProvider.builder()
119-
.withClient(client)
120-
.withCacheManager(cacheManager)
121-
.withTransformationManager(transformationManager)
122-
.build();
123-
providers.putIfAbsent(SSMProvider.class, ssmProvider);
102+
providers.putIfAbsent(SSMProvider.class, SSMProvider.builder()
103+
.withClient(client)
104+
.withCacheManager(cacheManager)
105+
.withTransformationManager(transformationManager)
106+
.build());
124107
}
125-
return ssmProvider;
108+
return (SSMProvider) providers.get(SSMProvider.class);
126109
}
127110

128111
public static CacheManager getCacheManager() {

0 commit comments

Comments
 (0)