pub struct LivePostBundleManager { /* private fields */ }Expand description
The production PostBundleManager implementation — the one that actually talks to the
network.
LivePostBundleManager is the glue between the pure-logic timeline code and the live
network. Each lookup:
- Checks
ClientStorageunderBUCKET_POST_BUNDLEfor a sufficiently fresh cached copy (freshness is governed byCLIENT_POST_BUNDLE_CACHE_DURATION). - Otherwise joins (or starts) a background walk of
GetPostBundleV1RPCs against the closest peers in thePeerTracker, attributing PoW to the locally-heldsponsor_id. - Returns the walk’s first authoritative bundle (
get_post_bundle) or its settled best bundle (get_post_bundle_settled). The walk itself carries on to cache, heal and upload — seecrate::client::post_bundle::post_bundle_healing.
Concurrent requests for the same bundle share one walk via InflightPostBundleFetches, so
a burst of timeline scrolls cannot fan out into redundant RPCs. The
crate::client::caching::cache_radius_tracker::CacheRadiusTracker helps the caching
role of a server decide how widely to mirror bundles.
Implementations§
Source§impl LivePostBundleManager
impl LivePostBundleManager
pub fn new( runtime_services: Arc<RuntimeServices>, sponsor_id: Id, client_storage: Arc<dyn ClientStorage>, peer_tracker: SharedPeerTracker, ) -> Self
Trait Implementations§
Source§impl PostBundleManager for LivePostBundleManager
impl PostBundleManager for LivePostBundleManager
Source§fn get_post_bundle<'life0, 'life1, 'async_trait>(
&'life0 self,
bucket_location: &'life1 BucketLocation,
time_millis: TimeMillis,
) -> Pin<Box<dyn Future<Output = Result<EncodedPostBundleV1>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_post_bundle<'life0, 'life1, 'async_trait>(
&'life0 self,
bucket_location: &'life1 BucketLocation,
time_millis: TimeMillis,
) -> Pin<Box<dyn Future<Output = Result<EncodedPostBundleV1>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The bundle for this bucket, as soon as one is good enough to show. An implementation may answer with a provisional bundle
(e.g. the first authoritative reply) while it keeps reconciling in the background, so the posts or
overflowed flag may be
incomplete. Use this for display; use Self::get_post_bundle_settled when a decision depends on the bundle being complete.Source§fn get_post_bundle_settled<'life0, 'life1, 'async_trait>(
&'life0 self,
bucket_location: &'life1 BucketLocation,
time_millis: TimeMillis,
) -> Pin<Box<dyn Future<Output = Result<EncodedPostBundleV1>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_post_bundle_settled<'life0, 'life1, 'async_trait>(
&'life0 self,
bucket_location: &'life1 BucketLocation,
time_millis: TimeMillis,
) -> Pin<Box<dyn Future<Output = Result<EncodedPostBundleV1>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The bundle once it has fully settled (e.g. best-of-several-servers). Implementations that never answer provisionally
can rely on this default.
Auto Trait Implementations§
impl Freeze for LivePostBundleManager
impl !RefUnwindSafe for LivePostBundleManager
impl Send for LivePostBundleManager
impl Sync for LivePostBundleManager
impl Unpin for LivePostBundleManager
impl UnsafeUnpin for LivePostBundleManager
impl !UnwindSafe for LivePostBundleManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more