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

Function build_segment_from_memtable

nodedb/src/engine/array/flush.rs:87–113  ·  view source on GitHub ↗
(
    schema: &ArraySchema,
    schema_hash: u64,
    kek: Option<&nodedb_wal::crypto::WalEncryptionKey>,
    drained: &[(TileId, TileBuffer)],
)

Source from the content-addressed store, hash-verified

85}
86
87fn build_segment_from_memtable(
88 schema: &ArraySchema,
89 schema_hash: u64,
90 kek: Option<&nodedb_wal::crypto::WalEncryptionKey>,
91 drained: &[(TileId, TileBuffer)],
92) -> ArrayResult<BuiltSegment> {
93 let mut writer = SegmentWriter::new(schema_hash);
94 let mut min_tile: Option<TileId> = None;
95 let mut max_tile: Option<TileId> = None;
96 let mut tile_count: u32 = 0;
97 for (tile_id, buf) in drained {
98 if buf.entry_count() == 0 {
99 continue;
100 }
101 let tile = buf.materialise(schema)?;
102 writer.append_sparse(*tile_id, &tile)?;
103 min_tile = Some(min_tile.map_or(*tile_id, |m| m.min(*tile_id)));
104 max_tile = Some(max_tile.map_or(*tile_id, |m| m.max(*tile_id)));
105 tile_count += 1;
106 }
107 Ok(BuiltSegment {
108 bytes: writer.finish(kek)?,
109 min_tile,
110 max_tile,
111 tile_count,
112 })
113}
114
115fn write_atomic(path: &std::path::Path, bytes: &[u8]) -> std::io::Result<()> {
116 use std::io::Write;

Callers 1

prepare_flushMethod · 0.85

Calls 4

materialiseMethod · 0.80
append_sparseMethod · 0.80
entry_countMethod · 0.45
finishMethod · 0.45

Tested by

no test coverage detected