Skip to content

Commit c2f0eb7

Browse files
committed
patch crash_on_flush test
1 parent 47ed09a commit c2f0eb7

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

libsql-wal/src/segment/current.rs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,6 @@ impl<F> CurrentSegment<F> {
474474
let (buf, res) = self.read_frame_offset_async(frame_offset, buf).await;
475475
res?;
476476

477-
478477
let mut frame = buf.into_inner();
479478
frame.header_mut().size_after = 0.into();
480479
let page_no = frame.header().page_no();
@@ -613,12 +612,12 @@ impl SegmentIndex {
613612

614613
#[cfg(test)]
615614
mod test {
616-
use std::env::temp_dir;
617615
use std::io::{self, Read};
618616

619617
use chrono::{DateTime, Utc};
620618
use hashbrown::HashMap;
621619
use insta::assert_debug_snapshot;
620+
use rand::rngs::ThreadRng;
622621
use tempfile::{tempdir, tempfile};
623622
use tokio_stream::StreamExt;
624623
use uuid::Uuid;
@@ -775,11 +774,9 @@ mod test {
775774

776775
#[tokio::test]
777776
async fn crash_on_flush() {
778-
779777
#[derive(Clone, Default)]
780778
struct SyncFailBufferIo {
781-
inner: Arc<Mutex<HashMap<PathBuf, Arc<Mutex<Vec<u8>>>>>>
782-
779+
inner: Arc<Mutex<HashMap<PathBuf, Arc<Mutex<Vec<u8>>>>>>,
783780
}
784781

785782
struct File {
@@ -823,15 +820,16 @@ mod test {
823820
let inner = self.inner();
824821
let inner = inner.lock();
825822
if offset >= inner.len() as u64 {
826-
return Ok(0)
823+
return Ok(0);
827824
}
828-
825+
829826
let read_len = if offset as usize + buf.len() > inner.len() {
830827
offset as usize + buf.len() - inner.len()
831828
} else {
832829
buf.len()
833830
};
834-
buf[..read_len].copy_from_slice(&inner[offset as usize..offset as usize + read_len]);
831+
buf[..read_len]
832+
.copy_from_slice(&inner[offset as usize..offset as usize + read_len]);
835833
Ok(read_len)
836834
}
837835

@@ -853,10 +851,11 @@ mod test {
853851
mut buf: B,
854852
offset: u64,
855853
) -> (B, std::io::Result<()>) {
856-
let slice = unsafe { std::slice::from_raw_parts_mut(buf.stable_mut_ptr(), buf.bytes_total()) };
854+
let slice = unsafe {
855+
std::slice::from_raw_parts_mut(buf.stable_mut_ptr(), buf.bytes_total())
856+
};
857857
let ret = self.read_at(slice, offset);
858858
(buf, ret.map(|_| ()))
859-
860859
}
861860

862861
async fn read_at_async<B: IoBufMut + Send + 'static>(
@@ -878,7 +877,7 @@ mod test {
878877

879878
impl Io for SyncFailBufferIo {
880879
type File = File;
881-
880+
type Rng = ThreadRng;
882881
type TempFile = File;
883882

884883
fn create_dir_all(&self, path: &std::path::Path) -> std::io::Result<()> {
@@ -906,7 +905,6 @@ mod test {
906905
path: path.into(),
907906
io: self.clone(),
908907
})
909-
910908
}
911909

912910
fn tempfile(&self) -> std::io::Result<Self::TempFile> {
@@ -921,11 +919,22 @@ mod test {
921919
Uuid::new_v4()
922920
}
923921

924-
fn hard_link(&self, _src: &std::path::Path, _dst: &std::path::Path) -> std::io::Result<()> {
922+
fn hard_link(
923+
&self,
924+
_src: &std::path::Path,
925+
_dst: &std::path::Path,
926+
) -> std::io::Result<()> {
925927
todo!()
926928
}
929+
930+
fn with_rng<F, R>(&self, f: F) -> R
931+
where
932+
F: FnOnce(&mut Self::Rng) -> R,
933+
{
934+
f(&mut rand::thread_rng())
935+
}
927936
}
928-
937+
929938
let tmp = Arc::new(tempdir().unwrap());
930939
{
931940
let env = TestEnv::new_io_and_tmp(SyncFailBufferIo::default(), tmp.clone());
@@ -936,6 +945,9 @@ mod test {
936945
conn.execute("insert into test values (1234)", ()).unwrap();
937946
conn.execute("insert into test values (1234)", ()).unwrap();
938947
conn.execute("insert into test values (1234)", ()).unwrap();
948+
conn.execute("insert into test values (1234)", ()).unwrap();
949+
conn.execute("insert into test values (1234)", ()).unwrap();
950+
conn.execute("insert into test values (1234)", ()).unwrap();
939951

940952
// trigger a flush, that will fail. When we reopen the db, the log should need recovery
941953
// this simulates a crash before flush
@@ -954,7 +966,8 @@ mod test {
954966
conn.query_row("select count(*) from test", (), |row| {
955967
dbg!(row);
956968
Ok(())
957-
}).unwrap();
969+
})
970+
.unwrap();
958971
}
959972
}
960973
}

0 commit comments

Comments
 (0)