1- mod macros;
21mod algorithm;
32mod generate_csv;
43mod misc;
@@ -11,20 +10,17 @@ use crossbeam_channel::{bounded, Receiver, Sender};
1110use lazy_static:: lazy_static;
1211use std:: {
1312 time:: { Duration , Instant } ,
14- io:: { Write , stdout} ,
13+ io:: stdout,
1514 thread,
16- sync:: atomic:: {
17- AtomicI32
18- }
15+ sync:: atomic:: AtomicI32
1916} ;
2017use crossterm:: ExecutableCommand ;
2118use crossterm:: terminal:: { EnterAlternateScreen , LeaveAlternateScreen } ;
2219use crate :: {
23- misc:: split_chunks,
2420 metrics:: write_metrics,
2521 threads:: *
2622} ;
27- use crate :: checkpoint:: write_checkpoints;
23+ use crate :: checkpoint:: { load_workloads , write_checkpoints} ;
2824
2925const STAR_COUNT : usize = 64 ;
3026const REC_MULTIPLIER : f32 = 1.0 ;
@@ -39,8 +35,8 @@ lazy_static! {
3935 static ref END_SEED : i32 = env_int!( "END_SEED" , 10_000 ) ;
4036 static ref WORKER_THREADS : i32 = env_int!( "WORKER_THREADS" , 8 ) ;
4137 static ref WRITER_THREADS : i32 = env_int!( "WRITER_THREADS" , 4 ) ;
42- static ref COMMIT_COUNT : i32 = env_int!( "COMMIT_COUNT" , 1000 ) ;
43- static ref CHANNEL_SIZE : i32 = env_int!( "CHANNEL_SIZE" , 1000 ) ;
38+ static ref COMMIT_COUNT : usize = env_int!( "COMMIT_COUNT" , 1000 ) as usize ;
39+ static ref CHANNEL_SIZE : usize = env_int!( "CHANNEL_SIZE" , 1000 ) as usize ;
4440 static ref CHECKPOINT_FILE : String = env_str!( "CHECKPOINT_FILE" , "checkpoints.txt" ) ;
4541 static ref BENCHMARK : bool = env_int!( "BENCHMARK" , 0 ) == 1 ;
4642
@@ -53,20 +49,19 @@ lazy_static! {
5349 format!( "postgres://{user}:{pass}@{netloc}:{port}/{db_name}?sslmode=disable" )
5450 } ;
5551
56- static ref MAX_BUFFER : i32 = * CHANNEL_SIZE + * COMMIT_COUNT * * WORKER_THREADS ;
52+ static ref MAX_BUFFER : usize = * CHANNEL_SIZE + * COMMIT_COUNT * * WORKER_THREADS as usize ;
5753}
5854fn main ( ) {
5955 assert ! ( * START_SEED < * END_SEED ) ;
6056 assert ! ( * WORKER_THREADS < * END_SEED ) ;
6157 assert ! ( * WORKER_THREADS < MAX_WORKERS as i32 ) ;
6258
63-
59+ // capture start time for performance evaluation
6460 let start = Instant :: now ( ) ;
6561
6662 // Prepare thread resources
67- let all_seeds = * START_SEED ..* END_SEED ;
68- let workloads = split_chunks ( all_seeds, * WORKER_THREADS ) ;
69- let ( entry_sender, entry_reciever) : ( Sender < ( String , String ) > , Receiver < ( String , String ) > ) = bounded ( * CHANNEL_SIZE as usize ) ;
63+ let workloads = load_workloads ( ) . unwrap ( ) ;
64+ let ( entry_sender, entry_reciever) : ( Sender < ( String , String ) > , Receiver < ( String , String ) > ) = bounded ( * CHANNEL_SIZE ) ;
7065
7166 let mut work_handles = vec ! [ ] ;
7267 let mut commit_handles = vec ! [ ] ;
@@ -79,18 +74,17 @@ fn main() {
7974 } ) )
8075 }
8176 if !* BENCHMARK {
82- let conf = ( ( * DB_STR ) . clone ( ) , * COMMIT_COUNT ) ;
8377 // Launch database threads
8478 for _ in 0 ..* WRITER_THREADS {
8579 let thread_receiver = entry_reciever. clone ( ) ;
86- let thread_conf = conf. clone ( ) ;
8780 commit_handles. push ( thread:: spawn ( move || {
88- commit_thread ( thread_receiver, thread_conf )
81+ commit_thread ( thread_receiver)
8982 } ) )
9083 }
9184 }
9285 else {
9386 for _ in 0 ..* WRITER_THREADS {
87+ // launch dummy db threads that will void all results
9488 let thread_receiver = entry_reciever. clone ( ) ;
9589 commit_handles. push ( thread:: spawn ( move || {
9690 writer_sink ( thread_receiver)
0 commit comments