Skip to content

Commit 1579eff

Browse files
committed
fixup! feat: Update in-process resolver to support flag metadata #1102
Signed-off-by: christian.lutnik <[email protected]>
1 parent 53f570f commit 1579eff

File tree

11 files changed

+57
-57
lines changed

11 files changed

+57
-57
lines changed

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key, EvaluationC
244244
private ImmutableMetadata getFlagMetadata(StorageQueryResult storageQueryResult) {
245245
ImmutableMetadata.ImmutableMetadataBuilder metadataBuilder = ImmutableMetadata.builder();
246246
for (Map.Entry<String, Object> entry :
247-
storageQueryResult.getGlobalFlagMetadata().entrySet()) {
247+
storageQueryResult.getFlagSetMetadata().entrySet()) {
248248
addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue());
249249
}
250250

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/model/FlagParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ public static ParsingResult parseString(final String configuration, boolean thro
7171
final String transposedConfiguration = transposeEvaluators(configuration);
7272

7373
final Map<String, FeatureFlag> flagMap = new HashMap<>();
74-
final Map<String, Object> metadata;
74+
final Map<String, Object> flagSetMetadata;
7575
try (JsonParser parser = MAPPER.createParser(transposedConfiguration)) {
7676
final TreeNode treeNode = parser.readValueAsTree();
7777
final TreeNode flagNode = treeNode.get(FLAG_KEY);
7878
final TreeNode metadataNode = treeNode.get(METADATA_KEY);
79-
metadata = parseMetadata(metadataNode);
79+
flagSetMetadata = parseMetadata(metadataNode);
8080

8181
if (flagNode == null) {
8282
throw new IllegalArgumentException("No flag configurations found in the payload");
@@ -89,7 +89,7 @@ public static ParsingResult parseString(final String configuration, boolean thro
8989
}
9090
}
9191

92-
return new ParsingResult(flagMap, metadata);
92+
return new ParsingResult(flagMap, flagSetMetadata);
9393
}
9494

9595
private static Map<String, Object> parseMetadata(TreeNode metadataNode) throws JsonProcessingException {

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/model/ParsingResult.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
justification = "Feature flag comes as a Json configuration, hence they must be exposed")
1414
public class ParsingResult {
1515
private final Map<String, FeatureFlag> flags;
16-
private final Map<String, Object> globalFlagMetadata;
16+
private final Map<String, Object> flagSetMetadata;
1717

18-
public ParsingResult(Map<String, FeatureFlag> flags, Map<String, Object> globalFlagMetadata) {
18+
public ParsingResult(Map<String, FeatureFlag> flags, Map<String, Object> flagSetMetadata) {
1919
this.flags = flags;
20-
this.globalFlagMetadata = globalFlagMetadata;
20+
this.flagSetMetadata = flagSetMetadata;
2121
}
2222
}

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/FlagStore.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class FlagStore implements Storage {
3636
private final AtomicBoolean shutdown = new AtomicBoolean(false);
3737
private final BlockingQueue<StorageStateChange> stateBlockingQueue = new LinkedBlockingQueue<>(1);
3838
private final Map<String, FeatureFlag> flags = new HashMap<>();
39-
private final Map<String, Object> globalFlagMetadata = new HashMap<>();
39+
private final Map<String, Object> flagSetMetadata = new HashMap<>();
4040

4141
private final Connector connector;
4242
private final boolean throwIfInvalid;
@@ -80,15 +80,15 @@ public void shutdown() throws InterruptedException {
8080
connector.shutdown();
8181
}
8282

83-
/** Retrieve flag for the given key and the global flag metadata. */
83+
/** Retrieve flag for the given key and the flag set metadata. */
8484
@Override
8585
public StorageQueryResult getFlag(final String key) {
8686
readLock.lock();
8787
FeatureFlag flag;
8888
Map<String, Object> metadata;
8989
try {
9090
flag = flags.get(key);
91-
metadata = new HashMap<>(globalFlagMetadata);
91+
metadata = new HashMap<>(flagSetMetadata);
9292
} finally {
9393
readLock.unlock();
9494
}
@@ -112,16 +112,16 @@ private void streamerListener(final Connector connector) throws InterruptedExcep
112112
List<String> changedFlagsKeys;
113113
ParsingResult parsingResult = FlagParser.parseString(payload.getFlagData(), throwIfInvalid);
114114
Map<String, FeatureFlag> flagMap = parsingResult.getFlags();
115-
Map<String, Object> globalFlagMetadataMap = parsingResult.getGlobalFlagMetadata();
115+
Map<String, Object> flagSetMetadataMap = parsingResult.getFlagSetMetadata();
116116

117117
Structure metadata = parseSyncMetadata(payload.getMetadataResponse());
118118
writeLock.lock();
119119
try {
120120
changedFlagsKeys = getChangedFlagsKeys(flagMap);
121121
flags.clear();
122122
flags.putAll(flagMap);
123-
globalFlagMetadata.clear();
124-
globalFlagMetadata.putAll(globalFlagMetadataMap);
123+
flagSetMetadata.clear();
124+
flagSetMetadata.putAll(flagSetMetadataMap);
125125
} finally {
126126
writeLock.unlock();
127127
}

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/StorageQueryResult.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@
77

88
/**
99
* To be returned by the storage when a flag is queried. Contains the flag (iff a flag associated with the given key
10-
* exists, null otherwise) and global flag metadata
10+
* exists, null otherwise) and flag set metadata
1111
*/
1212
@Getter
1313
@SuppressFBWarnings(
1414
value = {"EI_EXPOSE_REP"},
15-
justification = "The storage provides access to both feature flags and global metadata")
15+
justification = "The storage provides access to both feature flags and flag set metadata")
1616
public class StorageQueryResult {
1717
private final FeatureFlag featureFlag;
18-
private final Map<String, Object> globalFlagMetadata;
18+
private final Map<String, Object> flagSetMetadata;
1919

20-
public StorageQueryResult(FeatureFlag featureFlag, Map<String, Object> globalFlagMetadata) {
20+
public StorageQueryResult(FeatureFlag featureFlag, Map<String, Object> flagSetMetadata) {
2121
this.featureFlag = featureFlag;
22-
this.globalFlagMetadata = globalFlagMetadata;
22+
this.flagSetMetadata = flagSetMetadata;
2323
}
2424
}

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolverTest.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -452,17 +452,17 @@ void selectorIsOverwrittenByFlagMetadata() throws Exception {
452452
}
453453

454454
@Test
455-
void globalFlagMetadataIsAddedToEvaluation() throws Exception {
455+
void flagSetMetadataIsAddedToEvaluation() throws Exception {
456456
// given
457457
final Map<String, FeatureFlag> flagMap = new HashMap<>();
458458
final Map<String, Object> flagMetadata = new HashMap<>();
459459
flagMetadata.put("scope", "new selector");
460460
flagMap.put("flag", new FeatureFlag("stage", "loop", stringVariants, "", flagMetadata));
461461

462-
final Map<String, Object> globalFlagMetadata = new HashMap<>();
463-
globalFlagMetadata.put("global", "metadata");
462+
final Map<String, Object> flagSetMetadata = new HashMap<>();
463+
flagSetMetadata.put("flagSetMetadata", "metadata");
464464
InProcessResolver inProcessResolver = getInProcessResolverWith(
465-
new MockStorage(flagMap, globalFlagMetadata), connectionEvent -> {}, "selector");
465+
new MockStorage(flagMap, flagSetMetadata), connectionEvent -> {}, "selector");
466466

467467
// when
468468
ProviderEvaluation<String> providerEvaluation =
@@ -471,18 +471,18 @@ void globalFlagMetadataIsAddedToEvaluation() throws Exception {
471471
// then
472472
assertThat(providerEvaluation.getFlagMetadata()).isNotNull();
473473
assertThat(providerEvaluation.getFlagMetadata().getString("scope")).isEqualTo("new selector");
474-
assertThat(providerEvaluation.getFlagMetadata().getString("global")).isEqualTo("metadata");
474+
assertThat(providerEvaluation.getFlagMetadata().getString("flagSetMetadata")).isEqualTo("metadata");
475475
}
476476

477477
@Test
478-
void globalFlagMetadataIsAddedToFailingEvaluation() throws Exception {
478+
void flagSetMetadataIsAddedToFailingEvaluation() throws Exception {
479479
// given
480480
final Map<String, FeatureFlag> flagMap = new HashMap<>();
481481

482-
final Map<String, Object> globalFlagMetadata = new HashMap<>();
483-
globalFlagMetadata.put("global", "metadata");
482+
final Map<String, Object> flagSetMetadata = new HashMap<>();
483+
flagSetMetadata.put("flagSetMetadata", "metadata");
484484
InProcessResolver inProcessResolver = getInProcessResolverWith(
485-
new MockStorage(flagMap, globalFlagMetadata), connectionEvent -> {}, "selector");
485+
new MockStorage(flagMap, flagSetMetadata), connectionEvent -> {}, "selector");
486486

487487
// when
488488
ProviderEvaluation<String> providerEvaluation =
@@ -491,21 +491,21 @@ void globalFlagMetadataIsAddedToFailingEvaluation() throws Exception {
491491
// then
492492
assertThat(providerEvaluation.getReason()).isNull();
493493
assertThat(providerEvaluation.getFlagMetadata()).isNotNull();
494-
assertThat(providerEvaluation.getFlagMetadata().getString("global")).isEqualTo("metadata");
494+
assertThat(providerEvaluation.getFlagMetadata().getString("flagSetMetadata")).isEqualTo("metadata");
495495
}
496496

497497
@Test
498-
void globalFlagMetadataIsOverwrittenByFlagMetadataToEvaluation() throws Exception {
498+
void flagSetMetadataIsOverwrittenByFlagMetadataToEvaluation() throws Exception {
499499
// given
500500
final Map<String, FeatureFlag> flagMap = new HashMap<>();
501501
final Map<String, Object> flagMetadata = new HashMap<>();
502502
flagMetadata.put("key", "expected");
503503
flagMap.put("flag", new FeatureFlag("stage", "loop", stringVariants, "", flagMetadata));
504504

505-
final Map<String, Object> globalFlagMetadata = new HashMap<>();
506-
globalFlagMetadata.put("key", "unexpected");
505+
final Map<String, Object> flagSetMetadata = new HashMap<>();
506+
flagSetMetadata.put("key", "unexpected");
507507
InProcessResolver inProcessResolver = getInProcessResolverWith(
508-
new MockStorage(flagMap, globalFlagMetadata), connectionEvent -> {}, "selector");
508+
new MockStorage(flagMap, flagSetMetadata), connectionEvent -> {}, "selector");
509509

510510
// when
511511
ProviderEvaluation<String> providerEvaluation =

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/MockStorage.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,25 @@
1212
public class MockStorage implements Storage {
1313

1414
private final Map<String, FeatureFlag> mockFlags;
15-
private final Map<String, Object> metadata;
15+
private final Map<String, Object> flagSetMetadata;
1616
private final BlockingQueue<StorageStateChange> mockQueue;
1717

18-
public MockStorage(Map<String, FeatureFlag> mockFlags, Map<String, Object> globalFlagMetadata) {
18+
public MockStorage(Map<String, FeatureFlag> mockFlags, Map<String, Object> flagSetMetadata) {
1919
this.mockFlags = mockFlags;
2020
this.mockQueue = null;
21-
this.metadata = globalFlagMetadata;
21+
this.flagSetMetadata = flagSetMetadata;
2222
}
2323

2424
public MockStorage(Map<String, FeatureFlag> mockFlags, BlockingQueue<StorageStateChange> mockQueue) {
2525
this.mockFlags = mockFlags;
2626
this.mockQueue = mockQueue;
27-
this.metadata = Collections.emptyMap();
27+
this.flagSetMetadata = Collections.emptyMap();
2828
}
2929

3030
public MockStorage(Map<String, FeatureFlag> flagMap) {
3131
this.mockFlags = flagMap;
3232
this.mockQueue = null;
33-
this.metadata = Collections.emptyMap();
33+
this.flagSetMetadata = Collections.emptyMap();
3434
}
3535

3636
public void init() {
@@ -43,7 +43,7 @@ public void shutdown() {
4343

4444
@Override
4545
public StorageQueryResult getFlag(String key) {
46-
return new StorageQueryResult(mockFlags.get(key), metadata);
46+
return new StorageQueryResult(mockFlags.get(key), flagSetMetadata);
4747
}
4848

4949
@Nullable public BlockingQueue<StorageStateChange> getStateQueue() {

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/TestUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public class TestUtils {
1515
public static final String VALID_LONG = "flagConfigurations/valid-long.json";
1616
public static final String INVALID_FLAG = "flagConfigurations/invalid-flag.json";
1717
public static final String INVALID_FLAG_METADATA = "flagConfigurations/invalid-metadata.json";
18-
public static final String INVALID_GLOBAL_FLAG_METADATA = "flagConfigurations/invalid-global-metadata.json";
19-
public static final String VALID_GLOBAL_FLAG_METADATA = "flagConfigurations/valid-global-metadata.json";
18+
public static final String INVALID_FLAG_SET_METADATA = "flagConfigurations/invalid-flag-set-metadata.json";
19+
public static final String VALID_FLAG_SET_METADATA = "flagConfigurations/valid-flag-set-metadata.json";
2020
public static final String INVALID_CFG = "flagConfigurations/invalid-configuration.json";
2121
public static final String UPDATABLE_FILE = "flagConfigurations/updatableFlags.json";
2222

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/model/FlagParserTest.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.INVALID_CFG;
44
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.INVALID_FLAG;
55
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.INVALID_FLAG_METADATA;
6-
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.INVALID_GLOBAL_FLAG_METADATA;
7-
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.VALID_GLOBAL_FLAG_METADATA;
6+
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.INVALID_FLAG_SET_METADATA;
7+
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.VALID_FLAG_SET_METADATA;
88
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.VALID_LONG;
99
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.VALID_SIMPLE;
1010
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.VALID_SIMPLE_EXTRA_FIELD;
@@ -91,41 +91,41 @@ void validJsonConfigurationWithTargetingRulesParsing() throws IOException {
9191
}
9292

9393
@Test
94-
void validJsonConfigurationWithGlobalMetadataParsing() throws IOException {
95-
ParsingResult parsingResult = FlagParser.parseString(getFlagsFromResource(VALID_GLOBAL_FLAG_METADATA), true);
94+
void validJsonConfigurationWithFlagSetMetadataParsing() throws IOException {
95+
ParsingResult parsingResult = FlagParser.parseString(getFlagsFromResource(VALID_FLAG_SET_METADATA), true);
9696
Map<String, FeatureFlag> flagMap = parsingResult.getFlags();
9797
FeatureFlag flag = flagMap.get("without-metadata");
9898

9999
assertNotNull(flag);
100100

101101
Map<String, Object> metadata = flag.getMetadata();
102-
Map<String, Object> globalMetadata = parsingResult.getGlobalFlagMetadata();
102+
Map<String, Object> flagSetMetadata = parsingResult.getFlagSetMetadata();
103103

104104
assertNotNull(metadata);
105105
assertNull(metadata.get("string"));
106106
assertNull(metadata.get("boolean"));
107107
assertNull(metadata.get("float"));
108-
assertNotNull(globalMetadata);
109-
assertEquals("some string", globalMetadata.get("string"));
110-
assertEquals(true, globalMetadata.get("boolean"));
111-
assertEquals(1.234, globalMetadata.get("float"));
108+
assertNotNull(flagSetMetadata);
109+
assertEquals("some string", flagSetMetadata.get("string"));
110+
assertEquals(true, flagSetMetadata.get("boolean"));
111+
assertEquals(1.234, flagSetMetadata.get("float"));
112112
}
113113

114114
@Test
115115
void validJsonConfigurationWithFlagMetadataParsing() throws IOException {
116-
ParsingResult parsingResult = FlagParser.parseString(getFlagsFromResource(VALID_GLOBAL_FLAG_METADATA), true);
116+
ParsingResult parsingResult = FlagParser.parseString(getFlagsFromResource(VALID_FLAG_SET_METADATA), true);
117117
Map<String, FeatureFlag> flagMap = parsingResult.getFlags();
118118
FeatureFlag flag = flagMap.get("with-metadata");
119119

120120
assertNotNull(flag);
121121

122122
Map<String, Object> metadata = flag.getMetadata();
123-
Map<String, Object> globalMetadata = parsingResult.getGlobalFlagMetadata();
123+
Map<String, Object> flagSetMetadata = parsingResult.getFlagSetMetadata();
124124

125-
assertNotNull(globalMetadata);
126-
assertEquals("some string", globalMetadata.get("string"));
127-
assertEquals(true, globalMetadata.get("boolean"));
128-
assertEquals(1.234, globalMetadata.get("float"));
125+
assertNotNull(flagSetMetadata);
126+
assertEquals("some string", flagSetMetadata.get("string"));
127+
assertEquals(true, flagSetMetadata.get("boolean"));
128+
assertEquals(1.234, flagSetMetadata.get("float"));
129129
assertNotNull(metadata);
130130
assertEquals("other string", metadata.get("string"));
131131
assertEquals(true, metadata.get("boolean"));
@@ -145,8 +145,8 @@ void invalidFlagMetadataThrowsError() throws IOException {
145145
}
146146

147147
@Test
148-
void invalidGlobalFlagMetadataThrowsError() throws IOException {
149-
String flagString = getFlagsFromResource(INVALID_GLOBAL_FLAG_METADATA);
148+
void invalidFlagSetMetadataThrowsError() throws IOException {
149+
String flagString = getFlagsFromResource(INVALID_FLAG_SET_METADATA);
150150
assertThrows(IllegalArgumentException.class, () -> FlagParser.parseString(flagString, true));
151151
}
152152

0 commit comments

Comments
 (0)