use std::sync::Arc;
use chronon_executor::Executor;
use chronon_scheduler::{run_coordinator_tick_loop, Scheduler};
use chronon_telemetry::TelemetrySink;
use tokio::sync::Notify;
use crate::worker::run_worker_loop;
pub async fn run_embedded_loops(
scheduler: Arc<Scheduler>,
executor: Arc<Executor>,
telemetry: Arc<dyn TelemetrySink>,
shutdown: Arc<Notify>,
) {
scheduler.init_partitions().await;
let store = scheduler.store();
let instance_id = scheduler.instance_id().to_string();
let assigner = scheduler.assigner();
let pool = chronon_scheduler::worker_pool_from_env();
let tick_shutdown = Arc::clone(&shutdown);
let tick_store = Arc::clone(&store);
let tick_telemetry = Arc::clone(&telemetry);
let tick_instance = instance_id.clone();
let tick_assigner = Arc::clone(&assigner);
tokio::spawn(async move {
run_coordinator_tick_loop(
tick_store,
tick_telemetry,
tick_instance,
tick_assigner,
tick_shutdown,
)
.await;
});
run_worker_loop(
store,
executor,
telemetry,
pool,
instance_id,
shutdown,
)
.await;
}