Our Personal Data Server from scratch!
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(tranquil-store): blockstore tweaks

Lewis: May this revision serve well! <lu5a@proton.me>

+34 -21
+34 -21
crates/tranquil-pds/src/repo_ops.rs
··· 266 266 let storage_for_diff = Arc::new(ctx.tracking_store.clone()); 267 267 let original_settled = Mst::load(storage_for_diff.clone(), ctx.prev_data_cid, None); 268 268 let new_settled = Mst::load(storage_for_diff, new_mst_root, None); 269 - let (obsolete_cids, new_tree_cids) = tokio::try_join!( 270 - async { 271 - compute_obsolete_cids( 272 - &original_settled, 273 - &new_settled, 274 - CommitCid::from(ctx.current_root_cid), 275 - ) 276 - .await 277 - .map_err(|e| { 278 - error!("MST diff failed during finalize_repo_write: {}", e); 279 - ApiError::InternalError(Some("MST diff failed".into())) 280 - }) 281 - }, 269 + 270 + let (obsolete_result, new_tree_result) = tokio::join!( 271 + compute_obsolete_cids( 272 + &original_settled, 273 + &new_settled, 274 + CommitCid::from(ctx.current_root_cid), 275 + ), 282 276 async { 283 277 let (nodes, leaves) = 284 - tokio::try_join!(new_settled.collect_node_cids(), new_settled.leaves(),).map_err( 285 - |e| { 286 - error!("new tree walk failed: {}", e); 287 - ApiError::InternalError(None) 288 - }, 289 - )?; 290 - Ok::<Vec<Cid>, ApiError>( 278 + tokio::try_join!(new_settled.collect_node_cids(), new_settled.leaves(),)?; 279 + Ok::<Vec<Cid>, jacquard_repo::error::RepoError>( 291 280 nodes 292 281 .into_iter() 293 282 .chain(leaves.iter().map(|(_, cid)| *cid)) 294 283 .collect(), 295 284 ) 296 285 }, 297 - )?; 286 + ); 287 + 288 + let new_tree_cids = match new_tree_result { 289 + Ok(cids) => cids, 290 + Err(e) => { 291 + error!( 292 + "new tree walk failed: {e}. \ 293 + Falling back to written-block CIDs only; \ 294 + shared subtree ownership already tracked by prior commits." 295 + ); 296 + block_bytes.keys().copied().collect() 297 + } 298 + }; 299 + 300 + let obsolete_cids = match obsolete_result { 301 + Ok(cids) => cids, 302 + Err(e) => { 303 + error!( 304 + "MST diff failed during finalize_repo_write: {e}. \ 305 + Proceeding with empty obsolete set; leaked blocks \ 306 + will be reclaimed by reachability GC." 307 + ); 308 + vec![ctx.current_root_cid] 309 + } 310 + }; 298 311 299 312 let result = commit_and_log( 300 313 state,