Interface DataSourceStatusProvider
-
public interface DataSourceStatusProviderAn interface for querying the status of the SDK's data source. The data source is the component that receives updates to feature flag data; normally this is a streaming connection, but it could be polling or file data depending on your configuration.An implementation of this interface is returned by
LDClientInterface.getDataSourceStatusProvider(). Application code never needs to implement this interface.- Since:
- 5.0.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static classDataSourceStatusProvider.ErrorInfoA description of an error condition that the data source encountered.static classDataSourceStatusProvider.ErrorKindAn enumeration describing the general type of an error reported inDataSourceStatusProvider.ErrorInfo.static classDataSourceStatusProvider.StateAn enumeration of possible values forDataSourceStatusProvider.Status.getState().static classDataSourceStatusProvider.StatusInformation about the data source's status and about the last status change.static interfaceDataSourceStatusProvider.StatusListenerInterface for receiving status change notifications.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidaddStatusListener(DataSourceStatusProvider.StatusListener listener)Subscribes for notifications of status changes.DataSourceStatusProvider.StatusgetStatus()Returns the current status of the data source.voidremoveStatusListener(DataSourceStatusProvider.StatusListener listener)Unsubscribes from notifications of status changes.booleanwaitFor(DataSourceStatusProvider.State desiredState, java.time.Duration timeout)A synchronous method for waiting for a desired connection state.
-
-
-
Method Detail
-
getStatus
DataSourceStatusProvider.Status getStatus()
Returns the current status of the data source.All of the built-in data source implementations are guaranteed to update this status whenever they successfully initialize, encounter an error, or recover after an error.
For a custom data source implementation, it is the responsibility of the data source to push status updates to the SDK; if it does not do so, the status will always be reported as
DataSourceStatusProvider.State.INITIALIZING.- Returns:
- the latest status; will never be null
-
addStatusListener
void addStatusListener(DataSourceStatusProvider.StatusListener listener)
Subscribes for notifications of status changes.The listener will be notified whenever any property of the status has changed. See
DataSourceStatusProvider.Statusfor an explanation of the meaning of each property and what could cause it to change.Notifications will be dispatched on a worker thread. It is the listener's responsibility to return as soon as possible so as not to block subsequent notifications.
- Parameters:
listener- the listener to add
-
removeStatusListener
void removeStatusListener(DataSourceStatusProvider.StatusListener listener)
Unsubscribes from notifications of status changes.- Parameters:
listener- the listener to remove; if no such listener was added, this does nothing
-
waitFor
boolean waitFor(DataSourceStatusProvider.State desiredState, java.time.Duration timeout) throws java.lang.InterruptedException
A synchronous method for waiting for a desired connection state.If the current state is already
desiredStatewhen this method is called, it immediately returns. Otherwise, it blocks until 1. the state has becomedesiredState, 2. the state has becomeDataSourceStatusProvider.State.OFF(since that is a permanent condition), 3. the specified timeout elapses, or 4. the current thread is deliberately interrupted withThread.interrupt().A scenario in which this might be useful is if you want to create the
LDClientwithout waiting for it to initialize, and then wait for initialization at a later time or on a different thread:// create the client but do not wait LDConfig config = new LDConfig.Builder().startWait(Duration.ZERO).build(); client = new LDClient(sdkKey, config); // later, possibly on another thread: boolean inited = client.getDataSourceStatusProvider().waitFor( DataSourceStatusProvider.State.VALID, Duration.ofSeconds(10)); if (!inited) { // do whatever is appropriate if initialization has timed out }- Parameters:
desiredState- the desired connection state (normally this would beDataSourceStatusProvider.State.VALID)timeout- the maximum amount of time to wait-- orDuration.ZEROto block indefinitely (unless the thread is explicitly interrupted)- Returns:
- true if the connection is now in the desired state; false if it timed out, or if the state
changed to
DataSourceStatusProvider.State.OFFand that was not the desired state - Throws:
java.lang.InterruptedException- ifThread.interrupt()was called on this thread while blocked
-
-