(
schema: &ArraySchema,
schema_hash: u64,
kek: Option<&nodedb_wal::crypto::WalEncryptionKey>,
drained: &[(TileId, TileBuffer)],
)
| 85 | } |
| 86 | |
| 87 | fn 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 | |
| 115 | fn write_atomic(path: &std::path::Path, bytes: &[u8]) -> std::io::Result<()> { |
| 116 | use std::io::Write; |
no test coverage detected