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

Method cell_versions_for_coord

nodedb/src/engine/array/store/catalog.rs:404–441  ·  view source on GitHub ↗

Build a `(TileId, raw_bytes)` list for a specific `coord` across all versions (memtable + segments), ordered newest-first by `system_from_ms`.

(
        &self,
        hilbert_prefix: u64,
        coord: &[CoordValue],
        system_as_of: i64,
    )

Source from the content-addressed store, hash-verified

402 /// Build a `(TileId, raw_bytes)` list for a specific `coord` across all
403 /// versions (memtable + segments), ordered newest-first by `system_from_ms`.
404 fn cell_versions_for_coord(
405 &self,
406 hilbert_prefix: u64,
407 coord: &[CoordValue],
408 system_as_of: i64,
409 ) -> Result<Vec<(TileId, Vec<u8>)>, nodedb_array::ArrayError> {
410 let mut versions: Vec<(TileId, Vec<u8>)> = Vec::new();
411
412 // Memtable (most recent writes, already newest-first from iter_tile_versions).
413 for (tile_id, buf) in self
414 .memtable
415 .iter_tile_versions(hilbert_prefix, system_as_of)
416 {
417 if let Some(bytes) = buf.get_cell_bytes(coord) {
418 versions.push((tile_id, bytes.to_vec()));
419 }
420 }
421
422 // Segment versions — gather all qualifying versions across all segments,
423 // then sort newest-first so memtable + segment ordering is correct.
424 let mut seg_versions: Vec<(TileId, Vec<u8>)> = Vec::new();
425 for h in self.segments.values() {
426 let reader = h.reader();
427 for item in reader.iter_tile_versions(hilbert_prefix, system_as_of)? {
428 let (tile_id, tile_payload) = item?;
429 if let TilePayload::Sparse(sparse) = &tile_payload
430 && let Some(bytes) = extract_cell_bytes(sparse, coord)?
431 {
432 seg_versions.push((tile_id, bytes));
433 }
434 }
435 }
436 // Sort segment versions newest-first by system_from_ms.
437 seg_versions.sort_by_key(|(a, _)| std::cmp::Reverse(a.system_from_ms));
438 versions.extend(seg_versions);
439
440 Ok(versions)
441 }
442}
443
444fn parse_segment_seq(id: &str) -> Option<u64> {

Callers 2

scan_tiles_atMethod · 0.80
ceiling_for_coordMethod · 0.80

Calls 7

extract_cell_bytesFunction · 0.85
get_cell_bytesMethod · 0.80
iter_tile_versionsMethod · 0.45
pushMethod · 0.45
to_vecMethod · 0.45
readerMethod · 0.45
extendMethod · 0.45

Tested by

no test coverage detected