Skip to content

Commit 1d9c25a

Browse files
committed
pass IoBuf to CompactedSegment::read_frame
1 parent f658240 commit 1d9c25a

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

libsql-wal/src/replication/storage.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use roaring::RoaringBitmap;
77
use tokio_stream::Stream;
88
use zerocopy::FromZeroes;
99

10+
use crate::io::buf::ZeroCopyBoxIoBuf;
1011
use crate::segment::Frame;
1112
use crate::storage::Storage;
1213

@@ -61,8 +62,9 @@ where
6162
},
6263
};
6364

64-
let (frame, ret) = segment.read_frame(Frame::new_box_zeroed(), offset as u32).await;
65+
let (frame, ret) = segment.read_frame(ZeroCopyBoxIoBuf::new_uninit(Frame::new_box_zeroed()), offset as u32).await;
6566
ret?;
67+
let frame = frame.into_inner();
6668
debug_assert_eq!(frame.header().size_after(), 0, "all frames in a compacted segment should have size_after set to 0");
6769
if frame.header().frame_no() >= until {
6870
yield frame;

libsql-wal/src/segment/compacted.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::mem::size_of;
44
use zerocopy::little_endian::{U128 as lu128, U16 as lu16, U32 as lu32, U64 as lu64};
55
use zerocopy::{AsBytes, FromBytes, FromZeroes};
66

7-
use crate::io::buf::{ZeroCopyBoxIoBuf, ZeroCopyBuf};
7+
use crate::io::buf::{IoBufMut, ZeroCopyBuf};
88
use crate::io::FileExt;
99
use crate::{LIBSQL_MAGIC, LIBSQL_PAGE_SIZE, LIBSQL_WAL_VERSION};
1010

@@ -82,14 +82,16 @@ impl<F: FileExt> CompactedSegment<F> {
8282
Ok(Self { file, header })
8383
}
8484

85-
pub(crate) async fn read_frame(
85+
pub(crate) async fn read_frame<B: IoBufMut + Send + 'static>(
8686
&self,
87-
frame: Box<Frame>,
87+
buf: B,
8888
offset: u32,
89-
) -> (Box<Frame>, io::Result<()>) {
89+
) -> (B, io::Result<()>) {
90+
assert_eq!(buf.bytes_init(), 0);
91+
assert_eq!(buf.bytes_total(), size_of::<Frame>());
9092
let offset = size_of::<CompactedSegmentDataHeader>() + size_of::<Frame>() * offset as usize;
91-
let buf = ZeroCopyBoxIoBuf::new(frame);
9293
let (buf, ret) = self.file.read_exact_at_async(buf, offset as u64).await;
93-
(buf.into_inner(), ret)
94+
(buf, ret)
95+
}
9496
}
9597
}

0 commit comments

Comments
 (0)