Skip to main content

ClearReport

Struct ClearReport 

Source
pub struct ClearReport {
    pub schema: &'static str,
    pub scope: &'static str,
    pub store: String,
    pub requested: String,
    pub applied: bool,
    pub removed: Vec<RemovedImage>,
    pub removed_unattributed: Vec<Unattributed>,
    pub freed_bytes: u64,
    pub store_bytes_before: u64,
    pub store_bytes_after: u64,
    pub retained: Vec<VerifiedImage>,
    pub preserved: Vec<Preserved>,
}
Expand description

What a clear would do, or did.

Fields§

§schema: &'static str

Stable schema tag (SANDBOX_CLEAR_SCHEMA).

§scope: &'static str

Always "machine", for the reason SandboxStatus::scope gives.

§store: String

The store root that was cleared.

§requested: String

What was asked for — a reference, or everything.

§applied: bool

Whether this is a plan or a completed removal.

§removed: Vec<RemovedImage>

The images removed.

§removed_unattributed: Vec<Unattributed>

The unattributed bytes removed. Only ever populated for Scope::Everything.

§freed_bytes: u64

Bytes accounted for by the objects removed.

§store_bytes_before: u64

Every byte under the store root before the deletion.

§store_bytes_after: u64

Every byte under the store root after it. Equal to store_bytes_before on a plan.

§retained: Vec<VerifiedImage>

The survivors, re-checked blob by blob after the deletion.

§preserved: Vec<Preserved>

State a digest does not re-obtain, left alone and named.

Implementations§

Source§

impl ClearReport

Source

pub fn measured_freed_bytes(&self) -> u64

The bytes the filesystem actually gave back.

Reported alongside ClearReport::freed_bytes rather than instead of it: the accounted figure is what this module believes it removed, the measured one is what the store shrank by, and the two are checkable against each other by anyone holding a du.

They are not identical, and the gap is one thing: the index moves under a clear without being part of what was removed. SQLite does not shrink a file when rows are deleted — it frees pages inside it — and a DELETE under a write transaction can add a page, while a checkpoint can hand back a write-ahead log. So the gap runs in both directions, it is kilobytes against a clear measured in gigabytes, and the_accounted_bytes_and_the_measured_bytes_differ_only_by_the_index is what keeps that claim true. Anything larger is a defect, which is why both numbers are reported rather than one.

Measured on the real store: dropping an image that shared every layer with a survivor accounted for 0 bytes and measured 32 KiB back, all of it the index.

Source

pub fn survivors_intact(&self) -> bool

Whether every surviving image is still complete.

Trait Implementations§

Source§

impl Clone for ClearReport

Source§

fn clone(&self) -> ClearReport

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClearReport

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Serialize for ClearReport

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.