Skip to content

Commit 03de275

Browse files
committed
fixup! feat: improve wait logic to a more elegant solution #1160
Signed-off-by: christian.lutnik <[email protected]>
1 parent 15af42d commit 03de275

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,13 @@ EvaluationContext getEnrichedContext() {
208208
private void onProviderEvent(FlagdProviderEvent flagdProviderEvent) {
209209

210210
synchronized (syncResources) {
211-
log.info("FlagdProviderEvent: {} of type {}", flagdProviderEvent, flagdProviderEvent.getClass().getName());
212-
log.info("FlagdProviderEvent event {} ", flagdProviderEvent.getEvent().toString());
211+
log.info(
212+
"FlagdProviderEvent: {} of type {}",
213+
flagdProviderEvent,
214+
flagdProviderEvent.getClass().getName());
215+
log.info(
216+
"FlagdProviderEvent event {} ",
217+
flagdProviderEvent.getEvent().toString());
213218
syncResources.setSyncMetadata(flagdProviderEvent.getSyncMetadata());
214219
if (flagdProviderEvent.getSyncMetadata() != null) {
215220
syncResources.setEnrichedContext(contextEnricher.apply(flagdProviderEvent.getSyncMetadata()));
@@ -231,6 +236,9 @@ private void onProviderEvent(FlagdProviderEvent flagdProviderEvent) {
231236
break;
232237
}
233238
log.info("config change not ready");
239+
onReady();
240+
syncResources.setPreviousEvent(ProviderEvent.PROVIDER_READY);
241+
break;
234242
// intentional fall through, a not-ready change will trigger a ready.
235243
case PROVIDER_READY:
236244
onReady();
@@ -270,6 +278,7 @@ private void onReady() {
270278
}
271279
this.emitProviderReady(
272280
ProviderEventDetails.builder().message("connected to flagd").build());
281+
log.info("post onready");
273282
}
274283

275284
private void onError() {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public synchronized boolean initialize() {
4646
}
4747
this.initialized = true;
4848
this.notifyAll();
49+
log.info("notified all");
4950
return true;
5051
}
5152

@@ -77,6 +78,7 @@ public void waitForInitialization(long deadline) {
7778
long remaining = end - now;
7879
synchronized (this) {
7980
if (initialized) { // might have changed in the meantime
81+
log.info("post wait for init in loop");
8082
return;
8183
}
8284
if (isShutDown) {

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,11 @@ void waitForInitialization_waitsApproxForDeadline() {
3030
final AtomicLong start = new AtomicLong();
3131
final AtomicLong end = new AtomicLong();
3232
final long deadline = 45;
33-
Assertions.assertThrows(GeneralError.class, () -> {
34-
start.set(System.currentTimeMillis());
35-
try {
36-
flagdProviderSyncResources.waitForInitialization(deadline);
37-
} catch (Exception e) {
38-
end.set(System.currentTimeMillis());
39-
throw e;
40-
}
41-
});
33+
34+
start.set(System.currentTimeMillis());
35+
Assertions.assertThrows(GeneralError.class, () -> flagdProviderSyncResources.waitForInitialization(deadline));
36+
end.set(System.currentTimeMillis());
37+
4238
final long elapsed = end.get() - start.get();
4339
// should wait at least for the deadline
4440
Assertions.assertTrue(elapsed >= deadline);
@@ -54,7 +50,9 @@ void interruptingWaitingThread_isIgnored() throws InterruptedException {
5450
Thread waitingThread = new Thread(() -> {
5551
long start = System.currentTimeMillis();
5652
isWaiting.set(true);
57-
flagdProviderSyncResources.waitForInitialization(deadline);
53+
Assertions.assertThrows(
54+
GeneralError.class, () -> flagdProviderSyncResources.waitForInitialization(deadline));
55+
5856
long end = System.currentTimeMillis();
5957
long duration = end - start;
6058
// even though thread was interrupted, it still waited for the deadline
@@ -110,7 +108,7 @@ void callingShutdown_wakesUpWaitingThreadWithException() throws InterruptedExcep
110108
long start = System.currentTimeMillis();
111109
isWaiting.set(true);
112110
Assertions.assertThrows(
113-
IllegalArgumentException.class, () -> flagdProviderSyncResources.waitForInitialization(10000));
111+
IllegalStateException.class, () -> flagdProviderSyncResources.waitForInitialization(10000));
114112

115113
long end = System.currentTimeMillis();
116114
long duration = end - start;

0 commit comments

Comments
 (0)