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

fix(auth): debounce getToken() function #6282

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

Conversation

nkomonen-amazon
Copy link
Contributor

Problem:

The Identity team noticed a large spike in token refreshes for specific users. One user would trigger refresh over 50 times within a few seconds.

Ticket: P180886632

Solution:

The telemetry showed that getChatAuthState() was being called many times in a short period. This eventually triggered the token refresh logic many times, if the token was expired.

The solution is to add a debounce to getToken() which calls the refresh logic.

  • debounce() only accepts functions without any args, the refresh logic requires args
  • getToken() will also load from disk is the token is not expired, so debouncing here saves disk I/O as well.

The current debounce interval is 100 milliseconds, which based on telemetry should be enough to capture the barrage of calls. With some manual testing it does not feel like UX is impacted in any noticeable way.


  • Treat all work as PUBLIC. Private feature/x branches will not be squash-merged at release time.
  • Your code changes must meet the guidelines in CONTRIBUTING.md.
  • License: I confirm that my contribution is made under the terms of the Apache 2.0 license.

Problem:

The Identity team noticed a large spike in token refreshes for specific users.
One user would trigger refresh over 50 times within a few seconds.

Solution:

The telemetry showed that `getChatAuthState()` was being called many times in a
short period. This eventually triggered the token refresh logic many times, if the token was
expired.

The solution is to add a debounce to `getToken()` which calls the refresh logic.
- `debounce()` only accepts functions without any args, the refresh logic requires args
- `getToken()` will also load from disk is the token is not expired, so debouncing here
  saves disk I/O as well.

The current debounce interval is 100 milliseconds, which based on telemetry should be enough to capture the barrage of calls.

Signed-off-by: nkomonen-amazon <[email protected]>
@nkomonen-amazon nkomonen-amazon requested a review from a team as a code owner December 20, 2024 17:15
Copy link

  • This pull request modifies code in src/* but no tests were added/updated.
    • Confirm whether tests should be added or ensure the PR description explains why tests are not required.
  • This pull request implements a feat or fix, so it must include a changelog entry (unless the fix is for an unreleased feature). Review the changelog guidelines.
    • Note: beta or "experiment" features that have active users should announce fixes in the changelog.
    • If this is not a feature or fix, use an appropriate type from the title guidelines. For example, telemetry-only changes should use the telemetry type.

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.

1 participant