From f00164bde360795704e7fc684d187c846167e663 Mon Sep 17 00:00:00 2001 From: Skye Gill Date: Wed, 18 Jan 2023 16:57:55 +0000 Subject: [PATCH 1/2] feat: exposed eventStreamAliveSync to allow application authors to block until event stream is alive Signed-off-by: Skye Gill --- .../contrib/providers/flagd/FlagdProvider.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java index 2a662f048..5be62a908 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java @@ -87,6 +87,7 @@ public class FlagdProvider implements FeatureProvider, EventStreamCallback { private int maxEventStreamRetries = DEFAULT_MAX_EVENT_STREAM_RETRIES; private ReadWriteLock lock = new ReentrantReadWriteLock(); + private Object eventStreamAliveSync; /** * Create a new FlagdProvider instance. @@ -183,6 +184,7 @@ public FlagdProvider() { this.eventStreamAlive = false; this.cache = new FlagdCache(cache, maxCacheSize); this.maxEventStreamRetries = maxEventStreamRetries; + this.eventStreamAliveSync = new Object(); this.handleEvents(); } @@ -603,6 +605,9 @@ public void setEventStreamAlive(Boolean alive) { l.lock(); this.eventStreamAlive = alive; if (alive) { + synchronized (this.eventStreamAliveSync) { + this.eventStreamAliveSync.notify(); // notify any waiters that the event stream is alive + } // reset attempts on successful connection this.eventStreamAttempt = 1; this.eventStreamRetryBackoff = BASE_EVENT_STREAM_RETRY_BACKOFF_MS; @@ -630,4 +635,13 @@ public void restartEventStream() throws Exception { this.handleEvents(); } + + /** + * Call .wait() on this to block until the event stream is alive. + * + * @return eventStreamAliveSync + */ + public Object getEventStreamAliveSync() { + return this.eventStreamAliveSync; + } } From 9a5670cab957388f1b756acdbabe029ef6007f95 Mon Sep 17 00:00:00 2001 From: Skye Gill Date: Wed, 18 Jan 2023 17:28:42 +0000 Subject: [PATCH 2/2] further description of getEventStreamAliveSync Signed-off-by: Skye Gill --- .../dev/openfeature/contrib/providers/flagd/FlagdProvider.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java index 5be62a908..2ced77933 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/FlagdProvider.java @@ -638,6 +638,8 @@ public void restartEventStream() throws Exception { /** * Call .wait() on this to block until the event stream is alive. + * Can be used in instances where the provider being connected to the event stream is a prerequisite + * to execution (e.g. testing). Not necessary for standard usage. * * @return eventStreamAliveSync */