pub struct BackupWorker { /* private fields */ }Expand description
The backup worker. BackupWorker::spawn runs it as a task; tests drive
it a step at a time with run_once.
Implementations§
Source§impl BackupWorker
impl BackupWorker
Sourcepub fn new(
config: BackupConfig,
store: Arc<dyn ObjectStore>,
source: Arc<dyn WalSource>,
store_dir: PathBuf,
) -> Result<Self, BackupError>
pub fn new( config: BackupConfig, store: Arc<dyn ObjectStore>, source: Arc<dyn WalSource>, store_dir: PathBuf, ) -> Result<Self, BackupError>
A worker for the store in store_dir, uploading to store under the
prefix config.s3_url names.
Sourcepub fn spawn(
config: BackupConfig,
store: Arc<dyn ObjectStore>,
source: Arc<dyn WalSource>,
store_dir: PathBuf,
snapshot_rx: Receiver<BackupTrigger>,
) -> Result<BackupHandle, BackupError>
pub fn spawn( config: BackupConfig, store: Arc<dyn ObjectStore>, source: Arc<dyn WalSource>, store_dir: PathBuf, snapshot_rx: Receiver<BackupTrigger>, ) -> Result<BackupHandle, BackupError>
Start the worker as a Tokio task. It takes the bucket lease, then runs
one step at once — reading the bucket’s previous state and uploading a
base restore point — then one every wal_interval_ms, and one
immediately on each trigger. While another instance holds the lease it
uploads nothing and is unhealthy (see the module docs).
§Errors
Only a malformed config.s3_url.
Sourcepub fn start(self, snapshot_rx: Receiver<BackupTrigger>) -> BackupHandle
pub fn start(self, snapshot_rx: Receiver<BackupTrigger>) -> BackupHandle
Run this worker as a Tokio task, beside a supervisor that evaluates
health every wal_interval_ms and reports the worker’s end — a
shutdown, or a panic — as unhealthy with the reason.
Sourcepub fn counters(&self) -> BackupCounters
pub fn counters(&self) -> BackupCounters
The counters this worker updates (the same ones its
BackupHandle carries).
Sourcepub fn instance_id(&self) -> &str
pub fn instance_id(&self) -> &str
The instance id this worker takes the bucket lease under, the same for every attempt.
Sourcepub fn adopt_lease(&mut self, lease: Arc<BucketLease>)
pub fn adopt_lease(&mut self, lease: Arc<BucketLease>)
Hold lease, taken for this prefix by someone else in this process (a
restore on boot), instead of taking one: the worker renews it at once
and from then on, and its instance id becomes the lease’s. Call before
start, inside a Tokio runtime.
Sourcepub async fn step(&mut self) -> Duration
pub async fn step(&mut self) -> Duration
One step, with its outcome recorded in the counters. Returns how long to wait before the next one: the WAL interval after a success or a deferral, the back-off after a failure.
Sourcepub async fn flush(&mut self)
pub async fn flush(&mut self)
Ship pending WAL bytes and write a final manifest, retrying a failure twice. Used on shutdown, under the shutdown grace.
Sourcepub async fn run_once(&mut self) -> Result<(), BackupError>
pub async fn run_once(&mut self) -> Result<(), BackupError>
One step: read the bucket’s previous state if not done yet; upload a new restore point when the snapshot or WAL file on disk, or the engine’s WAL generation, changed; ship the WAL bytes fsynced since the last step; write a manifest when one is due.
Auto Trait Implementations§
impl !Freeze for BackupWorker
impl !RefUnwindSafe for BackupWorker
impl !UnwindSafe for BackupWorker
impl Forget for BackupWorker
impl Send for BackupWorker
impl Sync for BackupWorker
impl Unpin for BackupWorker
impl UnsafeUnpin for BackupWorker
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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> ⓘ
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> ⓘ
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.