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: LimboRwLockThere is only one write allowed in WAL mode. This lock takes care of ensuring there is only one used.
loaded: AtomicBoolImplementations§
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.