MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / drop_below

Method drop_below

nodedb/src/control/array_sync/op_log.rs:258–301  ·  view source on GitHub ↗
(&self, hlc: Hlc)

Source from the content-addressed store, hash-verified

256 }
257
258 fn drop_below(&self, hlc: Hlc) -> ArrayResult<u64> {
259 let txn = self.db.begin_write().map_err(|e| ArrayError::InvalidOp {
260 detail: format!("drop_below begin_write: {e}"),
261 })?;
262 let mut dropped: u64 = 0;
263 {
264 let mut table = txn
265 .open_table(ARRAY_OP_LOG)
266 .map_err(|e| ArrayError::InvalidOp {
267 detail: format!("drop_below open_table: {e}"),
268 })?;
269 // Collect keys to delete (can't delete while iterating redb tables).
270 let mut to_delete: Vec<Vec<u8>> = Vec::new();
271 let iter = table.iter().map_err(|e| ArrayError::InvalidOp {
272 detail: format!("drop_below iter: {e}"),
273 })?;
274 for entry in iter {
275 let (k, _) = entry.map_err(|e| ArrayError::InvalidOp {
276 detail: format!("drop_below entry: {e}"),
277 })?;
278 let key = k.value();
279 if key.len() < 19 {
280 continue;
281 }
282 if let Some(entry_hlc) = hlc_from_key(key, 0)
283 && entry_hlc < hlc
284 {
285 to_delete.push(key.to_vec());
286 }
287 }
288 for key in to_delete {
289 table
290 .remove(key.as_slice())
291 .map_err(|e| ArrayError::InvalidOp {
292 detail: format!("drop_below remove: {e}"),
293 })?;
294 dropped += 1;
295 }
296 }
297 txn.commit().map_err(|e| ArrayError::InvalidOp {
298 detail: format!("drop_below commit: {e}"),
299 })?;
300 Ok(dropped)
301 }
302}
303
304#[cfg(test)]

Callers 1

drop_below_removes_oldFunction · 0.45

Calls 9

begin_writeMethod · 0.80
hlc_from_keyFunction · 0.70
iterMethod · 0.45
lenMethod · 0.45
pushMethod · 0.45
to_vecMethod · 0.45
removeMethod · 0.45
as_sliceMethod · 0.45
commitMethod · 0.45

Tested by 1

drop_below_removes_oldFunction · 0.36