--- name: storage-sync description: Synchronize memories between Turso (durable) and redb (cache) storage layers. Use when cache appears stale, after failures, or during periodic maintenance. --- # Storage Sync Synchronize memories between Turso (durable) and redb (cache) storage layers. ## When to Sync 1. **On startup** - After system initialization 2. **Periodic** - Scheduled background sync 3. **Cache staleness** - When redb appears outdated 4. **Recovery** - After storage failures 5. **Manual trigger** - When explicitly requested ## Sync Process 1. **Check connection health**: ```rust turso_client.ping().await?; redb_env.check_integrity()?; ``` 2. **Fetch latest from Turso**: ```rust let episodes = turso_client .query("SELECT * FROM episodes ORDER BY timestamp DESC LIMIT ?") .bind(max_episodes_cache) .await?; ``` 3. **Update redb cache**: ```rust tokio::task::spawn_blocking(move || { let write_txn = redb.begin_write()?; let mut table = write_txn.open_table(EPISODES_TABLE)?; for episode in episodes { table.insert(episode.id.as_bytes(), episode.to_bytes())?; } write_txn.commit()?; }); ``` 4. **Sync patterns and embeddings** if enabled ## Configuration ```rust pub struct SyncConfig { pub max_episodes_cache: usize, // Default: 1000 pub batch_size: usize, // Default: 100 pub sync_patterns: bool, // Default: true pub sync_embeddings: bool, // Default: true } ``` ## Error Handling | Error | Handling | |-------|----------| | Turso unavailable | Skip sync, log warning, retry later | | redb corruption | Attempt repair, rebuild from Turso | | Partial sync | Track progress, resume from last point | ## Performance Tips - Batch small operations - Incremental sync (only changes) - Parallel fetch with Tokio - Write-ahead preparation ## Validation After sync, verify: - Episode count matches - Latest episodes present - Pattern counts consistent - No orphaned embeddings ## Troubleshooting | Issue | Solution | |-------|----------| | Slow syncs | Reduce cache size, increase batch | | redb lock errors | Use dedicated write task | | Memory pressure | Stream large results, smaller batches |