Skip to content

Commit 9519a9e

Browse files
utkarshtoddbaert
utkarsh
authored andcommitted
initialized empty list in the constuctor instead of passing null and removed check before if the list is empty
1 parent d58f56d commit 9519a9e

File tree

9 files changed

+35
-25
lines changed

9 files changed

+35
-25
lines changed

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,7 @@ private void handleStateTransition(ProviderState oldState, ProviderState newStat
174174
if (ProviderState.READY.equals(oldState) && ProviderState.READY.equals(newState)) {
175175
log.debug("Configuration changed");
176176
ProviderEventDetails details = ProviderEventDetails.builder().message("configuration changed").build();
177-
if (!changedFlagKeys.isEmpty()) {
178-
details.setFlagsChanged(changedFlagKeys);
179-
}
177+
details.setFlagsChanged(changedFlagKeys);
180178
this.emitProviderConfigurationChanged(details);
181179
return;
182180
}

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/grpc/GrpcConnector.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.openfeature.contrib.providers.flagd.resolver.grpc;
22

3+
import java.util.Collections;
34
import java.util.List;
45
import java.util.Random;
56
import java.util.concurrent.TimeUnit;
@@ -100,7 +101,7 @@ public void shutdown() throws Exception {
100101
this.channel.awaitTermination(this.deadline, TimeUnit.MILLISECONDS);
101102
log.warn(String.format("Unable to shut down channel by %d deadline", this.deadline));
102103
}
103-
this.stateConsumer.accept(ProviderState.NOT_READY, null);
104+
this.stateConsumer.accept(ProviderState.NOT_READY, Collections.emptyList());
104105
}
105106
}
106107

@@ -162,6 +163,6 @@ private void grpcStateConsumer(final ProviderState state) {
162163
}
163164

164165
// chain to initiator
165-
this.stateConsumer.accept(state, null);
166+
this.stateConsumer.accept(state, Collections.emptyList());
166167
}
167168
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ public void init() throws Exception {
7070
final StorageStateDTO storageStateDTO = flagStore.getStateQueue().take();
7171
switch (storageStateDTO.getStorageState()) {
7272
case OK:
73-
stateConsumer.accept(ProviderState.READY,
74-
storageStateDTO.getChangedFlags().keySet().stream().collect(Collectors.toList()));
73+
stateConsumer.accept(ProviderState.READY, storageStateDTO.getChangedFlagsKeys());
7574
this.connected.set(true);
7675
break;
7776
case ERROR:

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fasterxml.jackson.annotation.JsonProperty;
66
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
77
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
8+
import lombok.EqualsAndHashCode;
89
import lombok.Getter;
910

1011
import java.util.Map;
@@ -16,6 +17,7 @@
1617
@SuppressFBWarnings(value = {"EI_EXPOSE_REP"},
1718
justification = "Feature flag comes as a Json configuration, hence they must be parsed and exposed")
1819
@JsonIgnoreProperties(ignoreUnknown = true)
20+
@EqualsAndHashCode
1921
public class FeatureFlag {
2022
public static final String EMPTY_TARGETING_STRING = "{}";
2123

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
88
import lombok.extern.slf4j.Slf4j;
99
import java.util.HashMap;
10+
import java.util.List;
1011
import java.util.Map;
1112
import java.util.concurrent.BlockingQueue;
1213
import java.util.concurrent.LinkedBlockingQueue;
1314
import java.util.concurrent.atomic.AtomicBoolean;
1415
import java.util.concurrent.locks.ReentrantReadWriteLock;
1516
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
1617
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
18+
import java.util.stream.Collectors;
1719

1820
/**
1921
* Feature flag storage.
@@ -99,29 +101,29 @@ private void streamerListener(final Connector connector) throws InterruptedExcep
99101
switch (take.getType()) {
100102
case DATA:
101103
try {
102-
Map<String,FeatureFlag> changedFlags;
104+
List<String> changedFlagsKeys;
103105
Map<String, FeatureFlag> flagMap = FlagParser.parseString(take.getData(), throwIfInvalid);
104106
writeLock.lock();
105107
try {
106-
changedFlags = getChangedFlags(flagMap);
108+
changedFlagsKeys = getChangedFlagsKeys(flagMap);
107109
flags.clear();
108110
flags.putAll(flagMap);
109111
} finally {
110112
writeLock.unlock();
111113
}
112-
if (!stateBlockingQueue.offer(new StorageStateDTO(StorageState.OK, changedFlags))) {
114+
if (!stateBlockingQueue.offer(new StorageStateDTO(StorageState.OK, changedFlagsKeys))) {
113115
log.warn("Failed to convey OK satus, queue is full");
114116
}
115117
} catch (Throwable e) {
116118
// catch all exceptions and avoid stream listener interruptions
117119
log.warn("Invalid flag sync payload from connector", e);
118-
if (!stateBlockingQueue.offer(new StorageStateDTO(StorageState.STALE,null))) {
120+
if (!stateBlockingQueue.offer(new StorageStateDTO(StorageState.STALE))) {
119121
log.warn("Failed to convey STALE satus, queue is full");
120122
}
121123
}
122124
break;
123125
case ERROR:
124-
if (!stateBlockingQueue.offer(new StorageStateDTO(StorageState.ERROR,null))) {
126+
if (!stateBlockingQueue.offer(new StorageStateDTO(StorageState.ERROR))) {
125127
log.warn("Failed to convey ERROR satus, queue is full");
126128
}
127129
break;
@@ -133,7 +135,7 @@ private void streamerListener(final Connector connector) throws InterruptedExcep
133135
log.info("Shutting down store stream listener");
134136
}
135137

136-
private Map<String, FeatureFlag> getChangedFlags(Map<String, FeatureFlag> newFlags) {
138+
private List<String> getChangedFlagsKeys(Map<String, FeatureFlag> newFlags) {
137139
Map<String, FeatureFlag> changedFlags = new HashMap<>();
138140
Map<String, FeatureFlag> addedFeatureFlags = new HashMap<>();
139141
Map<String, FeatureFlag> removedFeatureFlags = new HashMap<>();
@@ -153,7 +155,7 @@ private Map<String, FeatureFlag> getChangedFlags(Map<String, FeatureFlag> newFla
153155
changedFlags.putAll(addedFeatureFlags);
154156
changedFlags.putAll(removedFeatureFlags);
155157
changedFlags.putAll(updatedFeatureFlags);
156-
return changedFlags;
158+
return changedFlags.keySet().stream().collect(Collectors.toList());
157159
}
158160

159161
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
package dev.openfeature.contrib.providers.flagd.resolver.process.storage;
22

33

4-
import dev.openfeature.contrib.providers.flagd.resolver.process.model.FeatureFlag;
54
import lombok.EqualsAndHashCode;
65
import lombok.Getter;
76
import lombok.ToString;
87

9-
import java.util.Map;
8+
import java.util.Collections;
9+
import java.util.List;
1010

1111
@Getter
1212
@ToString
1313
@EqualsAndHashCode
1414
public class StorageStateDTO {
1515
private final StorageState storageState;
16-
private final Map<String, FeatureFlag> changedFlags;
16+
private final List<String> changedFlagsKeys;
1717

18-
public StorageStateDTO(StorageState storageState, Map<String, FeatureFlag> changedFlags) {
18+
public StorageStateDTO(StorageState storageState, List<String> changedFlagsKeys) {
1919
this.storageState = storageState;
20-
this.changedFlags = changedFlags;
20+
this.changedFlagsKeys = changedFlagsKeys;
21+
}
22+
23+
public StorageStateDTO(StorageState storageState) {
24+
this.storageState = storageState;
25+
this.changedFlagsKeys = Collections.emptyList();
2126
}
2227
}

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/FlagdProviderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -920,7 +920,7 @@ private FlagdProvider createInProcessProvider() {
920920
final FlagdProvider provider = new FlagdProvider(flagdOptions);
921921
final MockStorage mockStorage = new MockStorage(new HashMap<String, FeatureFlag>(),
922922
new LinkedBlockingQueue<StorageStateDTO>(Arrays.asList(new
923-
StorageStateDTO(StorageState.OK, Collections.emptyMap()))));
923+
StorageStateDTO(StorageState.OK))));
924924

925925
try {
926926
final Field flagResolver = FlagdProvider.class.getDeclaredField("flagResolver");

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ public void eventHandling() throws Throwable {
8484
}
8585
});
8686
initThread.start();
87-
if (!sender.offer(new StorageStateDTO(StorageState.OK, Collections.emptyMap()), 100, TimeUnit.MILLISECONDS)) {
87+
if (!sender.offer(new StorageStateDTO(StorageState.OK, Collections.EMPTY_LIST), 100, TimeUnit.MILLISECONDS)) {
8888
Assertions.fail("failed to send the event");
8989
}
90-
if (!sender.offer(new StorageStateDTO(StorageState.ERROR,null), 100, TimeUnit.MILLISECONDS)) {
90+
if (!sender.offer(new StorageStateDTO(StorageState.ERROR), 100, TimeUnit.MILLISECONDS)) {
9191
Assertions.fail("failed to send the event");
9292
}
9393

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.Map;
1212
import java.util.concurrent.BlockingQueue;
1313
import java.util.concurrent.LinkedBlockingQueue;
14+
import java.util.stream.Collectors;
1415

1516
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.INVALID_FLAG;
1617
import static dev.openfeature.contrib.providers.flagd.resolver.process.TestUtils.VALID_LONG;
@@ -87,8 +88,9 @@ public void changedFlags() throws Exception {
8788
payload.offer(new StreamPayload(StreamPayloadType.DATA, getFlagsFromResource(VALID_SIMPLE)));
8889
});
8990
// flags changed for first time
90-
assertEquals(FlagParser.parseString(getFlagsFromResource(VALID_SIMPLE), true).keySet(),
91-
storageStateDTOS.take().getChangedFlags().keySet());
91+
assertEquals(FlagParser.parseString(
92+
getFlagsFromResource(VALID_SIMPLE), true).keySet().stream().collect(Collectors.toList()),
93+
storageStateDTOS.take().getChangedFlagsKeys());
9294

9395
assertTimeoutPreemptively(Duration.ofMillis(maxDelay), ()-> {
9496
payload.offer(new StreamPayload(StreamPayloadType.DATA, getFlagsFromResource(VALID_LONG)));
@@ -97,7 +99,8 @@ public void changedFlags() throws Exception {
9799
FlagParser.parseString(getFlagsFromResource(VALID_LONG),true);
98100
expectedChangedFlags.remove("myBoolFlag");
99101
// flags changed from initial VALID_SIMPLE flag
100-
Assert.assertEquals(expectedChangedFlags.keySet(),storageStateDTOS.take().getChangedFlags().keySet());
102+
Assert.assertEquals(expectedChangedFlags.keySet().stream().collect(Collectors.toList()),
103+
storageStateDTOS.take().getChangedFlagsKeys());
101104
}
102105

103106
}

0 commit comments

Comments
 (0)