-
Notifications
You must be signed in to change notification settings - Fork 2.6k
client/authority-discovery: Publish and query on exponential interval #7545
Changes from 2 commits
6a2e46e
d4e3f9f
934381c
114aec1
a100023
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,46 @@ | ||||||||||
| use futures::stream::Stream; | ||||||||||
| use futures::future::FutureExt; | ||||||||||
| use futures::ready; | ||||||||||
| use futures_timer::Delay; | ||||||||||
| use std::pin::Pin; | ||||||||||
| use std::task::{Context, Poll}; | ||||||||||
| use std::time::Duration; | ||||||||||
|
|
||||||||||
| /// Exponentially increasing interval | ||||||||||
| /// | ||||||||||
| /// Doubles interval duration on each tick until the configured maximum is reached. | ||||||||||
| pub struct ExpIncInterval { | ||||||||||
| max: Duration, | ||||||||||
| next: Duration, | ||||||||||
| delay: Delay, | ||||||||||
| } | ||||||||||
|
|
||||||||||
| impl ExpIncInterval { | ||||||||||
| /// Create a new [`ExpIncInterval`]. | ||||||||||
| pub fn new(start: Duration, max: Duration) -> Self { | ||||||||||
| let delay = Delay::new(start); | ||||||||||
| Self { | ||||||||||
| max, | ||||||||||
| next: start * 2, | ||||||||||
| delay, | ||||||||||
| } | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /// Fast forward the exponentially increasing interval to the configured maximum. | ||||||||||
| pub fn set_to_max(&mut self) { | ||||||||||
| self.next = self.max; | ||||||||||
| self.delay = Delay::new(self.next); | ||||||||||
| } | ||||||||||
| } | ||||||||||
|
|
||||||||||
| impl Stream for ExpIncInterval { | ||||||||||
| type Item = (); | ||||||||||
|
|
||||||||||
| fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> { | ||||||||||
| ready!(self.delay.poll_unpin(cx)); | ||||||||||
| self.delay = Delay::new(self.next); | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Indeed this need to be done, otherwise the thing doesn't work at all.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Wait, no, you actually don't need this. (this code had passed my review the other day) Since you return To phrase it differently: the documentation of
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ahh yeah, I mixed Stream with Future. Sorry! |
||||||||||
| self.next = std::cmp::min(self.max, self.next * 2); | ||||||||||
|
|
||||||||||
| Poll::Ready(Some(())) | ||||||||||
| } | ||||||||||
| } | ||||||||||
Uh oh!
There was an error while loading. Please reload this page.