-
Notifications
You must be signed in to change notification settings - Fork 412
Switch PersistenceNotifierGuard persist closure to FnOnce #3835
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
base: main
Are you sure you want to change the base?
Switch PersistenceNotifierGuard persist closure to FnOnce #3835
Conversation
This allows us to move owned and mutable values into the closure, with the assumption that the closure can only be invoked once. As a result, we now have to track `should_persist` as an `Option`, such that we can `take` the owned closure and invoke it within the `PersistenceNotifierGuard::drop` implementation.
👋 Thanks for assigning @tnull as a reviewer! |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3835 +/- ##
==========================================
- Coverage 89.92% 89.84% -0.09%
==========================================
Files 160 160
Lines 129581 129655 +74
Branches 129581 129655 +74
==========================================
- Hits 116525 116485 -40
- Misses 10361 10466 +105
- Partials 2695 2704 +9 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
event_persist_notifier: &'a Notifier, | ||
needs_persist_flag: &'a AtomicBool, | ||
should_persist: F, | ||
should_persist: Option<F>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The explanation why this needs to be an option could be helpful in the code rather than in the commit message.
@@ -2815,10 +2815,10 @@ enum NotifyOption { | |||
/// We allow callers to either always notify by constructing with `notify_on_drop` or choose to | |||
/// notify or not based on whether relevant changes have been made, providing a closure to | |||
/// `optionally_notify` which returns a `NotifyOption`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Background question: it seems that in some instances, the persist_check
isn't just checking, but also making the actual changes to the chan mgr state. Is that fine, or indicative of the PersistenceNotifierGuard
not fully matching its desired use cases?
@@ -2833,20 +2833,20 @@ impl<'a> PersistenceNotifierGuard<'a, fn() -> NotifyOption> { | |||
/// isn't ideal. | |||
fn notify_on_drop<C: AChannelManager>( | |||
cm: &'a C, | |||
) -> PersistenceNotifierGuard<'a, impl FnMut() -> NotifyOption> { | |||
) -> PersistenceNotifierGuard<'a, impl FnOnce() -> NotifyOption> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So this means that only single-use closure may be provided now. And it seems we are lucky that nowhere a closure was reused, so no other refactoring needed? (questions for me to understand this better)
This allows us to move owned and mutable values into the closure, with the assumption that the closure can only be invoked once. As a result, we now have to track
should_persist
as anOption
, such that we cantake
the owned closure and invoke it within thePersistenceNotifierGuard::drop
implementation.Motivated by #3736 (comment).