()
| 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() { |
nothing calls this directly
no test coverage detected