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

Function split_into_chunks

nodedb-array/src/sync/snapshot.rs:153–200  ·  view source on GitHub ↗

Split a [`TileSnapshot`] into a header plus a sequence of fixed-size chunks. `max_chunk_bytes` must be at least 64. Returns [`ArrayError::InvalidOp`] if it is smaller. `total_chunks = ceil(blob.len() / max_chunk_bytes).max(1)` — there is always at least one chunk, even for an empty blob.

(
    s: &TileSnapshot,
    max_chunk_bytes: usize,
)

Source from the content-addressed store, hash-verified

151/// `total_chunks = ceil(blob.len() / max_chunk_bytes).max(1)` — there is
152/// always at least one chunk, even for an empty blob.
153pub fn split_into_chunks(
154 s: &TileSnapshot,
155 max_chunk_bytes: usize,
156) -> ArrayResult<(SnapshotHeader, Vec<SnapshotChunk>)> {
157 if max_chunk_bytes < 64 {
158 return Err(ArrayError::InvalidOp {
159 detail: "max_chunk_bytes too small".into(),
160 });
161 }
162
163 let blob = &s.tile_blob;
164 let total_chunks = if blob.is_empty() {
165 1
166 } else {
167 blob.len().div_ceil(max_chunk_bytes).max(1) as u32
168 };
169
170 let header = SnapshotHeader {
171 array: s.array.clone(),
172 coord_range: s.coord_range.clone(),
173 total_chunks,
174 snapshot_hlc: s.snapshot_hlc,
175 schema_hlc: s.schema_hlc,
176 };
177
178 let chunks: Vec<SnapshotChunk> = if blob.is_empty() {
179 vec![SnapshotChunk {
180 array: s.array.clone(),
181 chunk_index: 0,
182 total_chunks: 1,
183 payload: Vec::new(),
184 snapshot_hlc: s.snapshot_hlc,
185 }]
186 } else {
187 blob.chunks(max_chunk_bytes)
188 .enumerate()
189 .map(|(i, slice)| SnapshotChunk {
190 array: s.array.clone(),
191 chunk_index: i as u32,
192 total_chunks,
193 payload: slice.to_vec(),
194 snapshot_hlc: s.snapshot_hlc,
195 })
196 .collect()
197 };
198
199 Ok((header, chunks))
200}
201
202/// Reassemble a [`TileSnapshot`] from a header and a slice of chunks.
203///

Calls 5

collectMethod · 0.80
is_emptyMethod · 0.45
lenMethod · 0.45
cloneMethod · 0.45
to_vecMethod · 0.45