Skip to main content

WalFileShared

Struct WalFileShared 

Source
pub struct WalFileShared {
    pub wal_header: Arc<SpinLock<WalHeader>>,
    pub min_frame: AtomicU64,
    pub max_frame: AtomicU64,
    pub nbackfills: AtomicU64,
    pub frame_cache: Arc<SpinLock<HashMap<u64, Vec<u64>>>>,
    pub pages_in_frames: Arc<SpinLock<Vec<u64>>>,
    pub last_checksum: (u32, u32),
    pub file: Arc<dyn File>,
    pub read_locks: [LimboRwLock; 5],
    pub write_lock: LimboRwLock,
    pub loaded: AtomicBool,
}
Expand description

WalFileShared is the part of a WAL that will be shared between threads. A wal has information that needs to be communicated between threads so this struct does the job.

Fields§

§wal_header: Arc<SpinLock<WalHeader>>§min_frame: AtomicU64§max_frame: AtomicU64§nbackfills: AtomicU64§frame_cache: Arc<SpinLock<HashMap<u64, Vec<u64>>>>§pages_in_frames: Arc<SpinLock<Vec<u64>>>§last_checksum: (u32, u32)§file: Arc<dyn File>§read_locks: [LimboRwLock; 5]

read_locks is a list of read locks that can coexist with the max_frame number stored in value. There is a limited amount because and unbounded amount of connections could be fatal. Therefore, for now we copy how SQLite behaves with limited amounts of read max frames that is equal to 5

§write_lock: LimboRwLock

There is only one write allowed in WAL mode. This lock takes care of ensuring there is only one used.

§loaded: AtomicBool

Implementations§

Source§

impl WalFileShared

Source

pub fn open_shared( io: &Arc<dyn IO>, path: &str, page_size: u32, ) -> Result<Arc<UnsafeCell<WalFileShared>>>

Source

pub fn open_shared_inner( io: &Arc<dyn IO>, path: &str, page_size: u32, db_freshly_created: bool, ) -> Result<Arc<UnsafeCell<WalFileShared>>>

Open the shared WAL state for path.

When db_freshly_created is true, the accompanying main database file did not exist (or was empty) and was just bootstrapped by crate::maybe_init_database_file. Any -wal file present on disk is therefore an orphan left behind by a previous database incarnation (e.g. the main .db was deleted while its -wal survived). Replaying such a WAL would resurrect stale committed pages on top of the fresh database, corrupting it (the classic symptom is row counts that grow by the previous content on every reopen). In that case we discard the orphaned WAL and start a fresh one instead of recovering from it.

Trait Implementations§

Source§

impl Debug for WalFileShared

Source§

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

Formats the value using the given formatter. 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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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