macp_storage/storage/
compaction.rs1use crate::log_store::{EntryKind, LogEntry};
2use crate::registry::PersistedSession;
3use macp_core::session::Session;
4use std::io;
5
6use super::StorageBackend;
7
8pub async fn compact_session_log(
14 storage: &dyn StorageBackend,
15 session_id: &str,
16 session: &Session,
17) -> io::Result<()> {
18 let persisted = PersistedSession::from(session);
19 let raw_payload = serde_json::to_vec(&persisted)
20 .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
21
22 let now = chrono::Utc::now().timestamp_millis();
23 let checkpoint = LogEntry {
24 message_id: String::new(),
25 received_at_ms: now,
26 sender: "_runtime".into(),
27 message_type: "Checkpoint".into(),
28 raw_payload,
29 entry_kind: EntryKind::Checkpoint,
30 session_id: session_id.into(),
31 mode: session.mode.clone(),
32 macp_version: String::new(),
33 timestamp_unix_ms: now,
34 };
35
36 storage.replace_log(session_id, &[checkpoint]).await
37}