reductstore 1.20.6

ReductStore is a time series database designed specifically for storing and managing large amounts of blob data.
Documentation
// Copyright 2021-2026 ReductSoftware UG
// Licensed under the Apache License, Version 2.0

use async_trait::async_trait;
use reduct_base::error::ReductError;
use reduct_base::msg::lifecycle_api::{LifecycleSettings, LifecycleType};
use std::sync::Arc;
mod compress;
mod delete;
mod progress;
use compress::CompressLifecycleAction;
use delete::DeleteLifecycleAction;

use crate::storage::engine::StorageEngine;

#[derive(Clone)]
pub(super) struct LifecycleContext {
    pub(super) storage: Arc<StorageEngine>,
    pub(super) system_events_enabled: bool,
    pub(super) system_event_instance: String,
}

impl LifecycleContext {
    pub(super) fn new(
        storage: Arc<StorageEngine>,
        system_events_enabled: bool,
        system_event_instance: String,
    ) -> Self {
        Self {
            storage,
            system_events_enabled,
            system_event_instance,
        }
    }
}

#[derive(Clone, Debug, Default)]
pub(super) struct LifecycleRunResult {
    pub(super) affected_records: u64,
    pub(super) affected_blocks: Option<u64>,
    pub(super) last_processed_ts: Option<u64>,
    pub(super) caught_up: bool,
}

#[async_trait]
pub(super) trait LifecycleAction {
    fn lifecycle_type(&self) -> LifecycleType;

    async fn run(
        &self,
        name: &str,
        settings: &LifecycleSettings,
        context: LifecycleContext,
    ) -> Result<LifecycleRunResult, ReductError>;
}

pub(super) fn build_lifecycle_action(
    lifecycle_type: LifecycleType,
) -> Arc<dyn LifecycleAction + Send + Sync> {
    match lifecycle_type {
        LifecycleType::Delete => Arc::new(DeleteLifecycleAction),
        LifecycleType::Compress => Arc::new(CompressLifecycleAction),
    }
}