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

Add Extensions with_lock() to try and avoid timing issues #5360

Merged
merged 8 commits into from
Jun 10, 2024

Conversation

garypen
Copy link
Contributor

@garypen garypen commented Jun 6, 2024

We hit a lot of problems with timing that causes flaky tests because it's not always easy to know when the compiler drops the Extensions lock.

We can side-step this a lot of the time by introducing (and using) a with_lock() function.

Review Notes: This commit (a0963c4) contains many changes as I replace lock() with with_lock() over the entire code base and mark lock() deprecated. You should review the preceding commits to understand the change and then the referenced commit if you want to see the remaining changes that I made.


Checklist

Complete the checklist (and note appropriate exceptions) before the PR is marked ready-for-review.

  • Changes are compatible1
  • Documentation2 completed
  • Performance impact assessed and acceptable
  • Tests added and passing3
    • Unit Tests
    • Integration Tests
    • Manual Tests

Exceptions

The code change is so small/simple, no tests are required.

Notes

Footnotes

  1. It may be appropriate to bring upcoming changes to the attention of other (impacted) groups. Please endeavour to do this before seeking PR approval. The mechanism for doing this will vary considerably, so use your judgement as to how and when to do this.

  2. Configuration is an important part of many changes. Where applicable please try to document configuration examples.

  3. Tick whichever testing boxes are applicable. If you are adding Manual Tests, please document the manual testing (extensively) in the Exceptions.

We hit a lot of problems with timing that causes flaky tests because
it's not always easy to know when the compiler drops the Extensions
lock.

We can side-step this a lot of the time by introducing (and using) a
with_lock() function.
@garypen garypen requested review from Geal, BrynCooke and bnjjj June 6, 2024 08:18
@garypen garypen self-assigned this Jun 6, 2024
@garypen garypen requested review from a team as code owners June 6, 2024 08:18

This comment has been minimized.

@router-perf
Copy link

router-perf bot commented Jun 6, 2024

CI performance tests

  • step - Basic stress test that steps up the number of users over time
  • reload - Reload test over a long period of time at a constant rate of users
  • step-with-prometheus - A copy of the step test with the Prometheus metrics exporter enabled
  • events_without_dedup_callback - Stress test for events with a lot of users and deduplication DISABLED using callback mode
  • events - Stress test for events with a lot of users and deduplication ENABLED
  • events_without_dedup - Stress test for events with a lot of users and deduplication DISABLED
  • events_big_cap_high_rate_callback - Stress test for events with a lot of users, deduplication enabled and high rate event with a big queue capacity using callback mode
  • xlarge-request - Stress test with 10 MB request payload
  • const - Basic stress test that runs with a constant number of users
  • events_big_cap_high_rate - Stress test for events with a lot of users, deduplication enabled and high rate event with a big queue capacity
  • step-jemalloc-tuning - Clone of the basic stress test for jemalloc tuning
  • xxlarge-request - Stress test with 100 MB request payload
  • demand-control-uninstrumented - A copy of the step test, but with demand control monitoring enabled
  • no-graphos - Basic stress test, no GraphOS.
  • events_callback - Stress test for events with a lot of users and deduplication ENABLED in callback mode
  • large-request - Stress test with a 1 MB request payload
  • demand-control-instrumented - A copy of the step test, but with demand control monitoring and metrics enabled

garypen added 2 commits June 6, 2024 09:32
Only review this commit if you are very interested in the details.
@garypen garypen requested a review from goto-bus-stop June 10, 2024 07:13
Copy link
Contributor

@Geal Geal left a comment

Choose a reason for hiding this comment

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

great idea, thanks

@garypen garypen merged commit 5e9e911 into dev Jun 10, 2024
12 of 14 checks passed
@garypen garypen deleted the garypen/ROUTER-340/extensions-with-lock branch June 10, 2024 08:42
Geal pushed a commit that referenced this pull request Jun 10, 2024
We hit a lot of problems with timing that causes flaky tests because it's not always easy to know when the compiler drops the Extensions lock.

We can side-step this a lot of the time by introducing (and using) a with_lock() function.
@lrlna lrlna mentioned this pull request Jun 18, 2024
/// See related clippy lint for examples: <https://rust-lang.github.io/rust-clippy/master/index.html#/await_holding_lock>
#[deprecated]
Copy link
Member

@abernix abernix Jun 18, 2024

Choose a reason for hiding this comment

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

Q: Is there a reason we don't use the Deprecated macro's parameters on things like this here? Doesn't that provide a better user experience?:

#[deprecated(since = "1.49.0", note = "Users should instead use with_lock")]

Copy link
Member

Choose a reason for hiding this comment

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

It definitely renders nicer in the 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.

4 participants