Struct Graveyard

Source
pub struct Graveyard { /* private fields */ }
Expand description

A graveyard exists as a place to park objects that should be deleted when they are no longer in use. How objects enter and leave the graveyard is up to the caller to decide. The intention is that at mount time, any objects in the graveyard will get removed. Each object store has a directory like object that contains a list of the objects within that store that are part of the graveyard. A single instance of this Graveyard struct manages all stores.

Implementations§

Source§

impl Graveyard

Source

pub fn new(object_manager: Arc<ObjectManager>) -> Arc<Self>

Creates a new instance of the graveyard manager.

Source

pub fn create(transaction: &mut Transaction<'_>, store: &ObjectStore) -> u64

Creates a graveyard object in store. Returns the object ID for the graveyard object.

Source

pub fn reap_async(self: Arc<Self>)

Starts an asynchronous task to reap the graveyard for all entries older than |journal_offset| (exclusive). If a task is already started, this has no effect, even if that task was targeting an older |journal_offset|.

Source

pub async fn wait_for_reap(&self)

Returns a future which completes when the ongoing reap task (if it exists) completes.

Source

pub async fn initial_reap( self: &Arc<Self>, store: &ObjectStore, ) -> Result<usize, Error>

Performs the initial mount-time reap for the given store. This will queue all items in the graveyard. Concurrently adding more entries to the graveyard will lead to undefined behaviour: the entries might or might not be immediately tombstoned, so callers should wait for this to return before changing to a state where more entries can be added. Once this has returned, entries will be tombstoned in the background.

Source

pub fn queue_tombstone_object(&self, store_id: u64, object_id: u64)

Queues an object for tombstoning.

Source

pub fn queue_tombstone_attribute( &self, store_id: u64, object_id: u64, attribute_id: u64, )

Queues an object’s attribute for tombstoning.

Source

pub async fn flush(&self)

Waits for all preceding queued tombstones to finish.

Source

pub async fn tombstone_object( &self, store_id: u64, object_id: u64, ) -> Result<(), Error>

Immediately tombstones (discards) an object in the graveyard. NB: Code should generally use |queue_tombstone| instead.

Source

pub async fn tombstone_attribute( &self, store_id: u64, object_id: u64, attribute_id: u64, ) -> Result<(), Error>

Immediately tombstones (discards) and attribute in the graveyard. NB: Code should generally use |queue_tombstone| instead.

Source

pub async fn iter<'a, 'b>( graveyard_object_id: u64, merger: &'a mut Merger<'b, ObjectKey, ObjectValue>, ) -> Result<GraveyardIterator<'a, 'b>, Error>

Returns an iterator that will return graveyard entries skipping deleted ones. Example usage:

let layer_set = graveyard.store().tree().layer_set(); let mut merger = layer_set.merger(); let mut iter = graveyard.iter(&mut merger).await?;

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, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V