photon_backend/
executor_services.rs1use std::sync::Arc;
4
5use crate::checkpoint::CheckpointCoalescer;
6use crate::delivery::{DlqSink, WorkerPool};
7use crate::retention::{PartitionReclaim, RetentionDeps, RetentionHook, RetentionPolicy, RetentionReclaimer};
8use crate::storage::StoragePort;
9
10pub struct ExecutorServices {
12 pub worker_pool: Arc<WorkerPool>,
14 pub checkpoint_coalescer: Arc<CheckpointCoalescer>,
16 pub dlq: Arc<DlqSink>,
18 pub retention_reclaimer: Arc<RetentionReclaimer>,
20}
21
22impl ExecutorServices {
23 #[allow(clippy::needless_pass_by_value)] pub fn new(
26 port: Arc<dyn StoragePort>,
27 policy: RetentionPolicy,
28 hook: Option<Arc<dyn RetentionHook>>,
29 ) -> Self {
30 let coalescer = Arc::new(CheckpointCoalescer::new(Arc::clone(&port)));
31 let dlq = Arc::new(DlqSink::new());
32 let reclaimer = RetentionReclaimer::new(RetentionDeps {
33 port: Arc::clone(&port),
34 coalescer: Arc::clone(&coalescer),
35 dlq: Arc::clone(&dlq),
36 policy,
37 hook,
38 });
39 coalescer.attach_reclaimer(Arc::clone(&reclaimer) as Arc<dyn PartitionReclaim>);
40 Self {
41 worker_pool: Arc::new(WorkerPool::from_env()),
42 checkpoint_coalescer: coalescer,
43 dlq,
44 retention_reclaimer: reclaimer,
45 }
46 }
47}