pub struct FakeHost {
pub world: Arc<Mutex<World>>,
pub store: MemStore,
}Fields§
§world: Arc<Mutex<World>>§store: MemStoreImplementations§
Trait Implementations§
Source§impl GenerationBackend for FakeHost
impl GenerationBackend for FakeHost
fn current(&self) -> Result<GenerationId, Outcome>
fn boot_entries(&self) -> Result<Vec<GenerationId>, Outcome>
fn boot_default(&self) -> Result<GenerationId, Outcome>
fn last_booted(&self) -> Result<GenerationId, Outcome>
fn stage( &self, _owner: &PinnedSource, _overrides: &OverrideSet, ) -> Result<StagedSource, Outcome>
Source§fn source_hash(&self, _owner: &PinnedSource) -> Result<Hash, Outcome>
fn source_hash(&self, _owner: &PinnedSource) -> Result<Hash, Outcome>
Recompute the NAR hash of the owner’s Nix-visible source now (stale check, §9 step 6).
fn evaluate(&self, _src: &StagedSource) -> Result<EvaluatedGeneration, Outcome>
Source§fn build(&self, _eval: &EvaluatedGeneration) -> Result<Built, Outcome>
fn build(&self, _eval: &EvaluatedGeneration) -> Result<Built, Outcome>
Store-only; roots its own output.
Source§fn verify_candidate(
&self,
path: &StorePath,
_nar: Option<&Hash>,
) -> Result<bool, Outcome>
fn verify_candidate( &self, path: &StorePath, _nar: Option<&Hash>, ) -> Result<bool, Outcome>
The path is a whole system, its contents still hash to what the store
recorded, and, when
nar is given (the transaction built it), that is
the NAR hash recorded at build (§9 step 3, C6).fn pending_jobs(&self) -> Result<Vec<JobId>, Outcome>
Source§fn jobs_tagged(&self, op: &OpId) -> Result<Option<Vec<JobId>>, Outcome>
fn jobs_tagged(&self, op: &OpId) -> Result<Option<Vec<JobId>>, Outcome>
None: the backend cannot say whether work tagged with op exists.Source§fn override_hash(&self) -> Result<Hash, Outcome>
fn override_hash(&self) -> Result<Hash, Outcome>
The override file’s current content hash (promotion compares against it, §9 step 4).
Source§fn activate_live(&self, g: GenerationId, op: &OpId) -> Outcome
fn activate_live(&self, g: GenerationId, op: &OpId) -> Outcome
switch-to-configuration test.Source§fn publish_boot(&self, g: GenerationId, op: &OpId) -> Outcome
fn publish_boot(&self, g: GenerationId, op: &OpId) -> Outcome
Boot entry only; no re-activation.
fn protect(&self, g: GenerationId, op: &OpId) -> Outcome
fn cancel(&self, job: &JobId, op: &OpId) -> Outcome
Source§fn swap_override(&self, from: &Hash, to: &Hash, op: &OpId) -> Outcome
fn swap_override(&self, from: &Hash, to: &Hash, op: &OpId) -> Outcome
Atomically replace the live override file with the content whose hash is
to, but only if its current hash is from. Idempotent: if it already
hashes to to, succeed without writing.Source§fn path_of(&self, g: GenerationId) -> Result<StorePath, Outcome>
fn path_of(&self, g: GenerationId) -> Result<StorePath, Outcome>
The system store path of a known generation.
Source§fn evaluate_built(
&self,
_path: &StorePath,
) -> Result<EvaluatedGeneration, Outcome>
fn evaluate_built( &self, _path: &StorePath, ) -> Result<EvaluatedGeneration, Outcome>
Evaluate an already-built generation from its store path (its exported
manifest), for SwitchGeneration / Revert / Rollback.
Source§fn read_overrides(&self) -> Result<(OverrideSet, Hash), Outcome>
fn read_overrides(&self) -> Result<(OverrideSet, Hash), Outcome>
The live override set and its content hash.
Source§fn remember_override(&self, set: &OverrideSet) -> Result<Hash, Outcome>
fn remember_override(&self, set: &OverrideSet) -> Result<Hash, Outcome>
Keep override content addressable by hash, so
swap_override can write it.Source§fn override_for(&self, _g: GenerationId) -> Result<Option<Hash>, Outcome>
fn override_for(&self, _g: GenerationId) -> Result<Option<Hash>, Outcome>
The override content recorded for a generation when it was committed.
fn record_override(&self, _g: GenerationId, _hash: &Hash) -> Result<(), Outcome>
Source§fn release_root(&self, root: &str) -> bool
fn release_root(&self, root: &str) -> bool
Remove a GC root symlink this backend created.
Source§fn collect_garbage(
&self,
_protect: &[GenerationId],
_emergency: bool,
op: &OpId,
) -> Outcome
fn collect_garbage( &self, _protect: &[GenerationId], _emergency: bool, op: &OpId, ) -> Outcome
Collect generations under the §12b bounds (
gc::plan), never touching
protect (I3), then collect store garbage. Mutating.Source§fn gc_plan(
&self,
_protect: &[GenerationId],
_emergency: bool,
) -> Result<GcPlan, Outcome>
fn gc_plan( &self, _protect: &[GenerationId], _emergency: bool, ) -> Result<GcPlan, Outcome>
What
collect_garbage would delete now. Read-only.Source§fn space_report(&self) -> Option<SpaceReport>
fn space_report(&self) -> Option<SpaceReport>
The last collection’s result.
Source§fn untracked(&self, _owner: &PinnedSource) -> Vec<String>
fn untracked(&self, _owner: &PinnedSource) -> Vec<String>
The owner’s files Nix cannot see now (untracked in a git flake), to
report with the stale check: one added during the build was not
there at staging (§9 step 1).
Source§fn dry_activation(&self, _path: &StorePath) -> Result<ActivationPlan, Outcome>
fn dry_activation(&self, _path: &StorePath) -> Result<ActivationPlan, Outcome>
What switching from the running generation to an existing one would
start, stop, restart and reload (its dry activation), for
SwitchGeneration / Revert / Rollback (§11, R04). An activation that
failed, timed out or was cut short is an error, never a smaller plan.
Source§fn publish_boot_once(
&self,
_g: GenerationId,
_keep: GenerationId,
_op: &OpId,
) -> Outcome
fn publish_boot_once( &self, _g: GenerationId, _keep: GenerationId, _op: &OpId, ) -> Outcome
The boot-only path (§12 step 7, §12f):
g boots once, at the next
boot; keep stays the default. All or nothing.Source§fn created_by(&self, _g: GenerationId) -> Option<(u32, Timestamp)>
fn created_by(&self, _g: GenerationId) -> Option<(u32, Timestamp)>
Who created generation
g and when (its profile link’s owner and
time): the provenance of a rebuild made outside Planarian (§15).Source§fn one_shot_pending(&self) -> Result<Option<GenerationId>, Outcome>
fn one_shot_pending(&self) -> Result<Option<GenerationId>, Outcome>
The generation a one-shot entry will boot next, if one is pending.
Source§fn override_content(&self, _h: &Hash) -> Result<OverrideSet, Outcome>
fn override_content(&self, _h: &Hash) -> Result<OverrideSet, Outcome>
The override content
remember_override kept under this hash.Source§fn age_out_build_roots(&self) -> Vec<String>
fn age_out_build_roots(&self) -> Vec<String>
Remove build roots no transaction can still use: older than the
longest a candidate may wait (§12f), a crashed build’s included.
At startup and before every collection (§9 step 5, C4). Returns them.
Source§impl Host for FakeHost
impl Host for FakeHost
type Gen = FakeHost
type Inv = FakeHost
fn generations(&self) -> &FakeHost
fn inventory(&self) -> &FakeHost
Source§fn execute_runtime(&self, t: &Transition, op: &OpId) -> Outcome
fn execute_runtime(&self, t: &Transition, op: &OpId) -> Outcome
Perform a
ReobserveOnly transition’s backend effect (restart, stop,
runtime option, GC). Override bookkeeping is the kernel’s job, not this.Source§fn reobserve(&self, _txn: &Transaction) -> Outcome
fn reobserve(&self, _txn: &Transaction) -> Outcome
Settle, then observe and compare against the expectation; the outcome is
recorded, never acted on (§12 step 7, UnitOp).
Source§fn check(&self, _txn: &Transaction, _phase: CheckPhase) -> Verdict
fn check(&self, _txn: &Transaction, _phase: CheckPhase) -> Verdict
Run the applicable Readiness probes from the candidate’s UnitDefs and the
installed core, plus the expectation and executor-owned requirements.
Source§fn release_gc_root(&self, path: &str) -> bool
fn release_gc_root(&self, path: &str) -> bool
Remove a GC root (I3). Returns false if it could not be removed.
fn now(&self) -> Timestamp
Source§fn boot_now(&self) -> Timestamp
fn boot_now(&self) -> Timestamp
The boot clock (
CLOCK_BOOTTIME): leases, deadlines and waits (§12h).fn sleep(&self, d: Millis)
Source§fn kill_worker(&self, pid: u32) -> bool
fn kill_worker(&self, pid: u32) -> bool
SIGTERM then SIGKILL the process group via pidfd; true once confirmed dead.
fn pid_alive(&self, pid: u32) -> bool
Source§fn floor_fixes(
&self,
_txn: &Transaction,
_floor: Option<GenerationId>,
) -> Result<Vec<String>, Outcome>
fn floor_fixes( &self, _txn: &Transaction, _floor: Option<GenerationId>, ) -> Result<Vec<String>, Outcome>
§12e, I25: the security fixes
txn’s candidate brings, absent from
the floor generation and every generation between it and the
candidate (every earlier one, with no floor). Part of the commit:
an error here means the transaction does not commit yet.Source§impl InventoryBackend for FakeHost
impl InventoryBackend for FakeHost
fn devices(&self) -> Result<Vec<DeviceInfo>, Outcome>
fn resources(&self) -> Result<Resources, Outcome>
fn bound_driver(&self, device: &UnitId) -> Result<Option<DriverRef>, Outcome>
fn bind(&self, device: &UnitId, driver: &DriverRef, op: &OpId) -> Outcome
fn unbind(&self, device: &UnitId, op: &OpId) -> Outcome
Auto Trait Implementations§
impl Freeze for FakeHost
impl RefUnwindSafe for FakeHost
impl Send for FakeHost
impl Sync for FakeHost
impl Unpin for FakeHost
impl UnsafeUnpin for FakeHost
impl UnwindSafe for FakeHost
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