Skip to content

Commit 4e92434

Browse files
committed
Avoid repeated calls to getState in AbstractDependentConfig
The getState method was called repeatedly in various AbstractDependentConfig methods, which could incur repeated volatile reads or correctness issues in edge cases.
1 parent e9bbde9 commit 4e92434

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

archaius2-core/src/main/java/com/netflix/archaius/config/AbstractDependentConfig.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.netflix.archaius.config;
22

3+
import com.netflix.archaius.api.Config;
34
import com.netflix.archaius.api.PropertyDetails;
45

56
import java.util.Iterator;
@@ -27,9 +28,11 @@ public AbstractDependentConfig() {
2728

2829
@Override
2930
public Object getRawProperty(String key) {
30-
Object value = getState().getData().get(key);
31-
if (getState().getInstrumentedKeys().containsKey(key)) {
32-
getState().getInstrumentedKeys().get(key).recordUsage(createPropertyDetails(key, value));
31+
CachedState state = getState();
32+
Object value = state.getData().get(key);
33+
Config config = state.getInstrumentedKeys().get(key);
34+
if (config != null) {
35+
config.recordUsage(createPropertyDetails(key, value));
3336
}
3437
return value;
3538
}
@@ -52,9 +55,11 @@ public Iterable<String> keys() {
5255

5356
@Override
5457
public void forEachProperty(BiConsumer<String, Object> consumer) {
55-
getState().getData().forEach((k, v) -> {
56-
if (getState().getInstrumentedKeys().containsKey(k)) {
57-
getState().getInstrumentedKeys().get(k).recordUsage(createPropertyDetails(k, v));
58+
CachedState state = getState();
59+
state.getData().forEach((k, v) -> {
60+
Config config = state.getInstrumentedKeys().get(k);
61+
if (config != null) {
62+
config.recordUsage(createPropertyDetails(k, v));
5863
}
5964
consumer.accept(k, v);
6065
});
@@ -77,8 +82,10 @@ public boolean isEmpty() {
7782

7883
@Override
7984
public void recordUsage(PropertyDetails propertyDetails) {
80-
if (getState().getInstrumentedKeys().containsKey(propertyDetails.getKey())) {
81-
getState().getInstrumentedKeys().get(propertyDetails.getKey()).recordUsage(createPropertyDetails(propertyDetails.getKey(), propertyDetails.getValue()));
85+
CachedState state = getState();
86+
Config config = state.getInstrumentedKeys().get(propertyDetails.getKey());
87+
if (config != null) {
88+
config.recordUsage(createPropertyDetails(propertyDetails.getKey(), propertyDetails.getValue()));
8289
}
8390
}
8491

0 commit comments

Comments
 (0)