-
Notifications
You must be signed in to change notification settings - Fork 56
Lack of programmatic feedback on connection issues on service startup #184
Description
Is your feature request related to a problem? Please describe.
If LaunchDarkly (or the relay) is unreachable on service startup, there isn't any feedback mechanism for the app to do anything about it (for example if we want the app to crash and page loudly).
There is a startWaitMillis()
option on the builder that will attempt to block until the connection is established, but if it times out or fails, the startup process will just proceed silently. Additionally, this option causes the constructor to LDClient
to block, which plays poorly with dependency injection frameworks like Guice.
Logs are generated by the SDK, but logs aren't useful to the application itself.
Describe the solution you'd like
Add a method to LDClient
, like
public void awaitInitialized(Duration timeout) throws Exception {
...
}
This method blocks until the initial streaming connection to the backend is established. If there are connection errors, or bad HTTP status codes returned, it will throw immediately with the underlying exception (potentially after configurable retries). If the initial connection is successful, the method returns. If the initial connection takes longer than timeout
, then it will throw TimeoutException
.
Additionally, add a callback mechanism to LDClient
to propagate subsequent connection issues, like
public void onConnectionError(... some callback interface...)
This would notify the applicable during steady state that the connection to LaunchDarkly is broken, and the application can choose what it wants to do. The argument could potentially be a com.launchdarkly.eventsource.ConnectionErrorHandler
, but maybe the app shouldn't be able to decide the Action
for the event source.
Describe alternatives you've considered
That's all I got.
Additional context
This is in context to a connection issue we saw that took a while to pinpoint: #183. Our services take the practice of crashing if LaunchDarkly isn't ready after a certain timeout after startup, and it'd be really useful if that crash could include why LaunchDarkly wasn't ready.