Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: polling data source now supports one shot configuration #285

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

tanderson-ld
Copy link
Contributor

Requirements

  • I have added test coverage for new or changed functionality
    TODO

  • I have followed the repository's pull request submission guidelines

  • I have validated my changes against all supported platform versions
    TODO

Describe the solution you've provided

Adds polling data source one shot mode. Updated data source to support providing the max number of polls to make.
Updated builder to calculate number of polls to make based on one shot configuration.

@tanderson-ld tanderson-ld requested a review from a team as a code owner December 20, 2024 22:10
* {@link LDClient#init(Application, LDConfig, LDContext, int)} even if the SDK has cached feature flags.
*
* @return true if the client is able to retrieve flag data from LaunchDarkly or offline, false if the client has been
* unable to up to this point.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reviewers: Updated this documentation with feedback from #284.

Copy link
Member

@kinyoklion kinyoklion Dec 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the one shot poll is prevented (maxNumPolls = 0), are we still initialized?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Reading further it would appear yes, so maybe we need some statement for that?)

ConnectivityManager.fetchAndSetData(fetcher, context, dataSourceUpdateSink,
resultCallback, logger);
numberOfPollsRemaining--; // decrementing even when we have unlimited polls has no consequence
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reviewers: Decrementing with unlimited polls will underflow after 20,428 years. Seemed worth the simplified implementation.

resultCallback.onSuccess(true);
return;
}
Copy link
Contributor Author

@tanderson-ld tanderson-ld Dec 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reviewers: The PR I opened previously to add "polling interval across restarts" used initialDelayMillis > 0 to short circuit initialized to true. I realized that was incorrect after examining isInitialized behavior. This bug existed only in 5.5.0 which was released two weeks ago.

When maxNumberOfPolls == 0 (such as in the rate limited one shot case), isInitialized should be true because the flags are "as up to date as they can be in the current configuration", which is how isInitialized behaves currently. For example: when offline mode is set, isInitialized returns true.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: add fix documentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants