()
| 86 | |
| 87 | #[test] |
| 88 | fn compression() { |
| 89 | enable_logging(); |
| 90 | |
| 91 | let root = tempdir().unwrap(); |
| 92 | let clog = Commitlog::open( |
| 93 | CommitLogDir::from_path_unchecked(root.path()), |
| 94 | Options { |
| 95 | max_segment_size: 8 * 1024, |
| 96 | ..Options::default() |
| 97 | }, |
| 98 | None, |
| 99 | ) |
| 100 | .unwrap(); |
| 101 | |
| 102 | let payloads = compressible_payloads().take(1024).collect::<Vec<_>>(); |
| 103 | for (i, payload) in payloads.iter().enumerate() { |
| 104 | clog.commit([(i as u64, *payload)]).unwrap(); |
| 105 | } |
| 106 | clog.flush_and_sync().unwrap(); |
| 107 | |
| 108 | let uncompressed_size = clog.size_on_disk().unwrap(); |
| 109 | |
| 110 | let segments = clog.existing_segment_offsets().unwrap(); |
| 111 | let segments_to_compress = &segments[..segments.len() / 2]; |
| 112 | info!("segments: {segments:?} compressing: {segments_to_compress:?}"); |
| 113 | clog.compress_segments(segments_to_compress).unwrap(); |
| 114 | |
| 115 | let compressed_size = clog.size_on_disk().unwrap(); |
| 116 | assert!(compressed_size.total_bytes < uncompressed_size.total_bytes); |
| 117 | |
| 118 | assert!(clog |
| 119 | .transactions(&payload::ArrayDecoder) |
| 120 | .map(Result::unwrap) |
| 121 | .enumerate() |
| 122 | .all(|(i, x)| x.offset == i as u64 && x.txdata == payloads[i])); |
| 123 | } |
| 124 | |
| 125 | /// When restoring an archived commitlog, all segments are compressed and should |
| 126 | /// remain immutable. |
nothing calls this directly
no test coverage detected
searching dependent graphs…