pub struct ActivePacks { /* private fields */ }Expand description
Atomically swapped view of live tenant runtimes.
Reads are lock-free via ArcSwap. Mutations serialize on write_lock so a
read-modify-write swap (e.g. a watcher reload preserving revision entries)
cannot interleave with a concurrent insert and clobber the other’s update.
Implementations§
Source§impl ActivePacks
impl ActivePacks
pub fn new() -> ActivePacks
Sourcepub fn load_pack(&self, tenant: &str) -> Option<Arc<TenantRuntime>>
pub fn load_pack(&self, tenant: &str) -> Option<Arc<TenantRuntime>>
Look up the tenant-only (legacy) runtime. Compatibility helper for the
pre-revision-routing path; see load_revision.
Sourcepub fn load_revision(
&self,
tenant: &str,
deployment_id: DeploymentId,
bundle_id: BundleId,
revision_id: RevisionId,
) -> Option<Arc<TenantRuntime>>
pub fn load_revision( &self, tenant: &str, deployment_id: DeploymentId, bundle_id: BundleId, revision_id: RevisionId, ) -> Option<Arc<TenantRuntime>>
Look up the runtime for a specific deployment/bundle/revision.
pub fn snapshot(&self) -> Arc<HashMap<RuntimeKey, Arc<TenantRuntime>>> ⓘ
Sourcepub fn insert_pack(&self, tenant: &str, runtime: Arc<TenantRuntime>)
pub fn insert_pack(&self, tenant: &str, runtime: Arc<TenantRuntime>)
Insert (or replace) a single tenant-only runtime, preserving all other entries — including revision-keyed ones.
Sourcepub fn insert_revision(
&self,
tenant: &str,
deployment_id: DeploymentId,
bundle_id: BundleId,
revision_id: RevisionId,
runtime: Arc<TenantRuntime>,
) -> Result<(), Error>
pub fn insert_revision( &self, tenant: &str, deployment_id: DeploymentId, bundle_id: BundleId, revision_id: RevisionId, runtime: Arc<TenantRuntime>, ) -> Result<(), Error>
Insert (or replace) a single revision-keyed runtime, preserving every
other entry — the tenant-only legacy entry and sibling revisions alike.
This is the producer the deployment warm path calls once a revision’s
packs are loaded; the pack watcher’s replace_legacy
then carries the entry across tenant-pack reloads untouched.
Fails closed when the runtime’s identity does not match the key it would
be stored under: a wiring bug that files one tenant’s runtime under
another tenant’s revision (breaking isolation) or stores a runtime whose
telemetry reports a different revision than it routes (breaking rollout
attribution) is rejected here rather than silently serving traffic under
the wrong identity. Pairs with TenantRuntime::load_revision, which
derives the runtime’s rollout identity from these same ids.
Sourcepub fn replace_legacy(&self, legacy: HashMap<RuntimeKey, Arc<TenantRuntime>>)
pub fn replace_legacy(&self, legacy: HashMap<RuntimeKey, Arc<TenantRuntime>>)
Swap in a freshly-resolved set of tenant-only (legacy) runtimes while carrying over every revision-keyed entry. Used by the pack watcher, whose index is authoritative for tenant packs but not for deployment revisions.
Sourcepub fn remove_revision(
&self,
tenant: &str,
deployment_id: DeploymentId,
bundle_id: BundleId,
revision_id: RevisionId,
) -> Option<Arc<TenantRuntime>>
pub fn remove_revision( &self, tenant: &str, deployment_id: DeploymentId, bundle_id: BundleId, revision_id: RevisionId, ) -> Option<Arc<TenantRuntime>>
Remove and return the runtime for a single revision-keyed entry,
preserving every other entry (legacy and revision alike). Used by the
drain coordinator (gtc op revisions drain) after the drain window
closes to tear down exactly the one revision being retired. None if
no such entry was present — idempotent for safe re-runs.
Sourcepub fn replace(&self, next: HashMap<RuntimeKey, Arc<TenantRuntime>>)
pub fn replace(&self, next: HashMap<RuntimeKey, Arc<TenantRuntime>>)
Replace the entire map, dropping every entry (legacy and revision alike). Used for full host stop.
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
Trait Implementations§
Source§impl Default for ActivePacks
impl Default for ActivePacks
Source§fn default() -> ActivePacks
fn default() -> ActivePacks
Auto Trait Implementations§
impl !Freeze for ActivePacks
impl !RefUnwindSafe for ActivePacks
impl !UnwindSafe for ActivePacks
impl Send for ActivePacks
impl Sync for ActivePacks
impl Unpin for ActivePacks
impl UnsafeUnpin for ActivePacks
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request