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

Function lazy_skip_non_matching

nodedb-wal/src/lazy_reader.rs:237–274  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

235
236 #[test]
237 fn lazy_skip_non_matching() {
238 let dir = tempfile::tempdir().unwrap();
239 let path = dir.path().join("test.wal");
240
241 {
242 let mut w = WalWriter::open_without_direct_io(&path).unwrap();
243 // 3 big TS records, 1 small vector record.
244 w.append(RecordType::TimeseriesBatch as u32, 1, 0, 0, &[0u8; 10000])
245 .unwrap();
246 w.append(RecordType::TimeseriesBatch as u32, 1, 0, 0, &[0u8; 10000])
247 .unwrap();
248 w.append(RecordType::VectorPut as u32, 1, 0, 0, b"small-vec")
249 .unwrap();
250 w.append(RecordType::TimeseriesBatch as u32, 1, 0, 0, &[0u8; 10000])
251 .unwrap();
252 w.sync().unwrap();
253 }
254
255 // A "vector core" reads only VectorPut, skips TimeseriesBatch.
256 let mut reader = LazyWalReader::open(&path).unwrap();
257 let mut vector_payloads = Vec::new();
258 let mut skipped = 0;
259
260 while let Some(header) = reader.next_header().unwrap() {
261 let rt = RecordType::from_raw(header.record_type);
262 if rt == Some(RecordType::VectorPut) {
263 let payload = reader.read_payload(&header).unwrap();
264 vector_payloads.push(payload);
265 } else {
266 reader.skip_payload(&header).unwrap();
267 skipped += 1;
268 }
269 }
270
271 assert_eq!(vector_payloads.len(), 1);
272 assert_eq!(vector_payloads[0], b"small-vec");
273 assert_eq!(skipped, 3);
274 }
275
276 #[test]
277 fn replay_all_segments_lazy_works() {

Callers

nothing calls this directly

Calls 9

joinMethod · 0.80
next_headerMethod · 0.80
read_payloadMethod · 0.80
skip_payloadMethod · 0.80
openFunction · 0.50
pathMethod · 0.45
appendMethod · 0.45
syncMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected