Skip to content

Commit dec58f6

Browse files
committed
use of putIfAbsent for Thread safety
1 parent 2d86a48 commit dec58f6

1 file changed

Lines changed: 6 additions & 5 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: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static <T extends BaseProvider> T getProvider(Class<T> providerClass) {
5151
Constructor<T> constructor = providerClass.getDeclaredConstructor(CacheManager.class);
5252
T provider = constructor.newInstance(cacheManager);
5353
provider.setTransformationManager(transformationManager);
54-
providers.put(providerClass, provider);
54+
providers.putIfAbsent(providerClass, provider);
5555
}
5656
return (T) providers.get(providerClass);
5757
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
@@ -70,7 +70,7 @@ public static SecretsProvider getSecretsProvider() {
7070
.withCacheManager(cacheManager)
7171
.withTransformationManager(transformationManager)
7272
.build();
73-
providers.put(SecretsProvider.class, secretsProvider);
73+
providers.putIfAbsent(SecretsProvider.class, secretsProvider);
7474
}
7575
return secretsProvider;
7676
}
@@ -86,7 +86,7 @@ public static SSMProvider getSsmProvider() {
8686
.withCacheManager(cacheManager)
8787
.withTransformationManager(transformationManager)
8888
.build();
89-
providers.put(SSMProvider.class, ssmProvider);
89+
providers.putIfAbsent(SSMProvider.class, ssmProvider);
9090
}
9191
return ssmProvider;
9292
}
@@ -103,7 +103,7 @@ public static SecretsProvider getSecretsProvider(SecretsManagerClient client) {
103103
.withCacheManager(cacheManager)
104104
.withTransformationManager(transformationManager)
105105
.build();
106-
providers.put(SecretsProvider.class, secretsProvider);
106+
providers.putIfAbsent(SecretsProvider.class, secretsProvider);
107107
}
108108
return secretsProvider;
109109
}
@@ -114,12 +114,13 @@ public static SecretsProvider getSecretsProvider(SecretsManagerClient client) {
114114
* @return a {@link SSMProvider}
115115
*/
116116
public static SSMProvider getSsmProvider(SsmClient client) {
117-
if (ssmProvider == null) {
117+
if (!providers.containsKey(SSMProvider.class)) {
118118
ssmProvider = SSMProvider.builder()
119119
.withClient(client)
120120
.withCacheManager(cacheManager)
121121
.withTransformationManager(transformationManager)
122122
.build();
123+
providers.putIfAbsent(SSMProvider.class, ssmProvider);
123124
}
124125
return ssmProvider;
125126
}

0 commit comments

Comments
 (0)