VMClockShmWriter

Struct VMClockShmWriter 

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

Writer to the VMClock shared memory segment.

This writer is expected to be used by a single process writing to a given path. The file written to is memory mapped by the writer and many (read-only) readers. Updates to the memory segment are applied in a lock-free manner, using a rolling seq_count number to protect the update section.

Implementations§

Source§

impl VMClockShmWriter

Source

pub fn new(path: &Path) -> Result<VMClockShmWriter>

Create a new VMClockShmWriter referencing the memory segment to write VMClockShmBody data to.

There are several cases to consider:

  1. The file backing the memory segment does not exist, or the content is corrupted/wrong. This is a cold start-like scenario, creating a fresh memory mapped file.
  2. The file backing the memory segment already exist and is valid. This may be that the process using this writer has restarted, but clients may still be using the existing values. Here, we want to load the existing memory segment, and continue as if nothing happened. That’s a warm reboot-like scenario.
  3. A variation of 2., but where the layout is being changed (a version bump). This is analog to a cold boot.

TODO: implement scenario 3 once the readers support a version bump.

Trait Implementations§

Source§

impl Debug for VMClockShmWriter

Source§

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

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

impl Drop for VMClockShmWriter

Source§

fn drop(&mut self)

Unmap the memory segment

TODO: revisit to see if this can be refactored into the MmapGuard logic implemented on the VMClockShmReader.

Source§

impl VMClockShmWrite for VMClockShmWriter

Source§

fn write(&mut self, vmclock_shm_body: &VMClockShmBody)

Update the clock error bound data in the memory segment.

This function implements the lock-free mechanism that lets the writer update the memory segment shared with many readers. The seq_count number is set to an odd number before the update and an even number when successfully completed.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, 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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more