trine-kv 0.6.0

Embedded LSM MVCC key-value database.
Documentation
use super::{
    CancellationToken, Db, DbInner, Error, MaintenanceCoordinator, Ordering, Weak,
    record_maintenance_success,
};

pub(in crate::db) fn background_worker_loop(
    inner: &Weak<DbInner>,
    maintenance: &MaintenanceCoordinator,
    runtime_shutdown: &CancellationToken,
) {
    while let Some(request) = maintenance.wait_for_request() {
        if runtime_shutdown.is_cancelled() {
            break;
        }
        let Some(inner) = inner.upgrade() else {
            break;
        };
        if inner.closed.load(Ordering::Acquire) || runtime_shutdown.is_cancelled() {
            break;
        }

        let db = Db {
            inner,
            counts_as_user_handle: false,
        };
        match db.run_background_maintenance(request) {
            Ok(()) => record_maintenance_success(maintenance),
            Err(Error::Closed) => break,
            Err(error) => maintenance.record_error(error),
        }
    }
}