pub struct SeedSpec {
pub from: SeedSource,
pub sync: Option<SeedSyncOptions>,
pub migrate: Option<SeedMigrateOptions>,
pub allow_empty_source: bool,
pub failure_policy: Option<FailurePolicy>,
pub credential_projection: Option<CredentialProjection>,
}Expand description
Initialize this repository from an existing replica on its first bootstrap.
Every knob below is a sub-object so future tuning slots in without an API
break. The sync/migrate blocks are mode-specific and admission
rejects the mismatched pairing (sync with a repository source, migrate
with a backend source) rather than silently ignoring one — no field in
kopiur is inert.
Fields§
§from: SeedSourceWhere the seed data comes from: exactly one of a bare storage backend (blob mode) or another repository CR (migrate mode).
sync: Option<SeedSyncOptions>Tuning for the kopia repository sync-to blob copy. Blob mode only
(from.backend); rejected at admission alongside from.repository.
migrate: Option<SeedMigrateOptions>Tuning for the kopia snapshot migrate copy. Migrate mode only
(from.repository); rejected at admission alongside from.backend.
allow_empty_source: boolAccept a source that holds zero snapshots (default false).
A mirror that answers but is empty is almost always a mis-pointed
bucket/prefix, and silently seeding nothing would hand you a Ready
repository with no history — the failure mode #380 is about. By default
the bootstrap fails loudly and retries; set this when an empty source is
genuinely expected (e.g. re-homing a repository whose history was
deliberately pruned to nothing).
failure_policy: Option<FailurePolicy>Deadline/backoff for the seeding bootstrap Job. An absent
activeDeadlineSeconds means 24h here, rather than the 120s a
routine connect gets — a seed copies a whole repository, once. Only
applied while the seed is armed; later connects to the now-initialized
repository use spec.bootstrap.failurePolicy as before.
credential_projection: Option<CredentialProjection>Opt-in projection of the SOURCE repository’s credential Secrets into the
seeding mover Job’s namespace. Migrate mode only in practice — a
blob-mode source’s credentials must already be in the namespace the
bootstrap Job runs in (this CR’s own namespace for a Repository; for a
ClusterRepository the operator’s namespace, unless
encryption.passwordSecretRef.namespace pins another, in which case the
Job runs there). Requires the operator’s features.credentialProjection
install flag.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for SeedSpec
impl<'de> Deserialize<'de> for SeedSpec
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for SeedSpec
Source§impl JsonSchema for SeedSpec
impl JsonSchema for SeedSpec
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreimpl StructuralPartialEq for SeedSpec
Auto Trait Implementations§
impl Freeze for SeedSpec
impl RefUnwindSafe for SeedSpec
impl Send for SeedSpec
impl Sync for SeedSpec
impl Unpin for SeedSpec
impl UnsafeUnpin for SeedSpec
impl UnwindSafe for SeedSpec
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§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>
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 more