@@ -474,7 +474,6 @@ impl<F> CurrentSegment<F> {
474
474
let ( buf, res) = self . read_frame_offset_async( frame_offset, buf) . await ;
475
475
res?;
476
476
477
-
478
477
let mut frame = buf. into_inner( ) ;
479
478
frame. header_mut( ) . size_after = 0 . into( ) ;
480
479
let page_no = frame. header( ) . page_no( ) ;
@@ -613,12 +612,12 @@ impl SegmentIndex {
613
612
614
613
#[ cfg( test) ]
615
614
mod test {
616
- use std:: env:: temp_dir;
617
615
use std:: io:: { self , Read } ;
618
616
619
617
use chrono:: { DateTime , Utc } ;
620
618
use hashbrown:: HashMap ;
621
619
use insta:: assert_debug_snapshot;
620
+ use rand:: rngs:: ThreadRng ;
622
621
use tempfile:: { tempdir, tempfile} ;
623
622
use tokio_stream:: StreamExt ;
624
623
use uuid:: Uuid ;
@@ -775,11 +774,9 @@ mod test {
775
774
776
775
#[ tokio:: test]
777
776
async fn crash_on_flush ( ) {
778
-
779
777
#[ derive( Clone , Default ) ]
780
778
struct SyncFailBufferIo {
781
- inner : Arc < Mutex < HashMap < PathBuf , Arc < Mutex < Vec < u8 > > > > > >
782
-
779
+ inner : Arc < Mutex < HashMap < PathBuf , Arc < Mutex < Vec < u8 > > > > > > ,
783
780
}
784
781
785
782
struct File {
@@ -823,15 +820,16 @@ mod test {
823
820
let inner = self . inner ( ) ;
824
821
let inner = inner. lock ( ) ;
825
822
if offset >= inner. len ( ) as u64 {
826
- return Ok ( 0 )
823
+ return Ok ( 0 ) ;
827
824
}
828
-
825
+
829
826
let read_len = if offset as usize + buf. len ( ) > inner. len ( ) {
830
827
offset as usize + buf. len ( ) - inner. len ( )
831
828
} else {
832
829
buf. len ( )
833
830
} ;
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] ) ;
835
833
Ok ( read_len)
836
834
}
837
835
@@ -853,10 +851,11 @@ mod test {
853
851
mut buf : B ,
854
852
offset : u64 ,
855
853
) -> ( 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
+ } ;
857
857
let ret = self . read_at ( slice, offset) ;
858
858
( buf, ret. map ( |_| ( ) ) )
859
-
860
859
}
861
860
862
861
async fn read_at_async < B : IoBufMut + Send + ' static > (
@@ -878,7 +877,7 @@ mod test {
878
877
879
878
impl Io for SyncFailBufferIo {
880
879
type File = File ;
881
-
880
+ type Rng = ThreadRng ;
882
881
type TempFile = File ;
883
882
884
883
fn create_dir_all ( & self , path : & std:: path:: Path ) -> std:: io:: Result < ( ) > {
@@ -906,7 +905,6 @@ mod test {
906
905
path : path. into ( ) ,
907
906
io : self . clone ( ) ,
908
907
} )
909
-
910
908
}
911
909
912
910
fn tempfile ( & self ) -> std:: io:: Result < Self :: TempFile > {
@@ -921,11 +919,22 @@ mod test {
921
919
Uuid :: new_v4 ( )
922
920
}
923
921
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 < ( ) > {
925
927
todo ! ( )
926
928
}
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
+ }
927
936
}
928
-
937
+
929
938
let tmp = Arc :: new ( tempdir ( ) . unwrap ( ) ) ;
930
939
{
931
940
let env = TestEnv :: new_io_and_tmp ( SyncFailBufferIo :: default ( ) , tmp. clone ( ) ) ;
@@ -936,6 +945,9 @@ mod test {
936
945
conn. execute ( "insert into test values (1234)" , ( ) ) . unwrap ( ) ;
937
946
conn. execute ( "insert into test values (1234)" , ( ) ) . unwrap ( ) ;
938
947
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 ( ) ;
939
951
940
952
// trigger a flush, that will fail. When we reopen the db, the log should need recovery
941
953
// this simulates a crash before flush
@@ -954,7 +966,8 @@ mod test {
954
966
conn. query_row ( "select count(*) from test" , ( ) , |row| {
955
967
dbg ! ( row) ;
956
968
Ok ( ( ) )
957
- } ) . unwrap ( ) ;
969
+ } )
970
+ . unwrap ( ) ;
958
971
}
959
972
}
960
973
}
0 commit comments