use std::sync::atomic::{AtomicBool, Ordering};
use anyhow::Result;
use crate::memory::config::MemoryConfig;
use crate::memory::queue::handlers::QueueDelegates;
use crate::memory::queue::store;
use crate::memory::queue::types::{NewJob, ReembedBackfillPayload};
static BACKFILL_IN_PROGRESS: AtomicBool = AtomicBool::new(false);
pub fn set_backfill_in_progress(v: bool) {
BACKFILL_IN_PROGRESS.store(v, Ordering::Relaxed);
}
pub fn backfill_in_progress() -> bool {
BACKFILL_IN_PROGRESS.load(Ordering::Relaxed)
}
pub fn ensure_reembed_backfill(
config: &MemoryConfig,
delegates: &dyn QueueDelegates,
) -> Result<()> {
let sig = delegates.active_signature(config);
if delegates.has_uncovered_reembed_work(config, &sig)? {
let job = NewJob::reembed_backfill(&ReembedBackfillPayload {
signature: sig.clone(),
})?;
if store::enqueue(config, &job)?.is_some() {
set_backfill_in_progress(true);
}
}
Ok(())
}
#[cfg(test)]
#[path = "ops_tests.rs"]
mod tests;