@@ -18,7 +18,7 @@ use hdrhistogram::Histogram;
1818use itertools:: Itertools as _;
1919use petname:: Generator as _;
2020use rand:: SeedableRng as _;
21- use rand:: distributions :: Distribution as _;
21+ use rand:: distr :: Distribution as _;
2222use rand:: rngs:: StdRng ;
2323
2424use toydb:: error:: Result ;
@@ -128,7 +128,7 @@ impl Runner {
128128 // Spawn work generator.
129129 {
130130 println ! ( "Running workload {}..." , workload) ;
131- let generator = workload. generate ( rng) . take ( self . count ) ;
131+ let generator = workload. generate ( rng) ? . take ( self . count ) ;
132132 s. spawn ( move || -> Result < ( ) > {
133133 for item in generator {
134134 work_tx. send ( item) ?;
@@ -189,7 +189,7 @@ trait Workload: std::fmt::Display {
189189 fn prepare ( & self , client : & mut Client , rng : & mut StdRng ) -> Result < ( ) > ;
190190
191191 /// Generates work items as an iterator.
192- fn generate ( & self , rng : StdRng ) -> impl Iterator < Item = Self :: Item > + Send + ' static ;
192+ fn generate ( & self , rng : StdRng ) -> Result < impl Iterator < Item = Self :: Item > + Send + ' static > ;
193193
194194 /// Executes a single work item. This will automatically be retried on
195195 /// certain errors, and must use a transaction where appropriate.
@@ -234,7 +234,7 @@ impl Workload for Read {
234234 client. execute ( r#"DROP TABLE IF EXISTS "read""# ) ?;
235235 client. execute ( r#"CREATE TABLE "read" (id INT PRIMARY KEY, value STRING NOT NULL)"# ) ?;
236236
237- let chars = & mut rand:: distributions :: Alphanumeric . sample_iter ( rng) . map ( |b| b as char ) ;
237+ let chars = & mut rand:: distr :: Alphanumeric . sample_iter ( rng) . map ( |b| b as char ) ;
238238 let rows = ( 1 ..=self . rows ) . map ( |id| ( id, chars. take ( self . size ) . collect :: < String > ( ) ) ) ;
239239 let chunks = rows. chunks ( 100 ) ;
240240 let queries = chunks. into_iter ( ) . map ( |chunk| {
@@ -250,12 +250,12 @@ impl Workload for Read {
250250 Ok ( ( ) )
251251 }
252252
253- fn generate ( & self , rng : StdRng ) -> impl Iterator < Item = Self :: Item > + ' static {
254- ReadGenerator {
253+ fn generate ( & self , rng : StdRng ) -> Result < impl Iterator < Item = Self :: Item > + ' static > {
254+ Ok ( ReadGenerator {
255255 batch : self . batch ,
256- dist : rand:: distributions :: Uniform :: new ( 1 , self . rows + 1 ) ,
256+ dist : rand:: distr :: Uniform :: new ( 1 , self . rows + 1 ) ? ,
257257 rng,
258- }
258+ } )
259259 }
260260
261261 fn execute ( client : & mut Client , item : & Self :: Item ) -> Result < ( ) > {
@@ -280,7 +280,7 @@ impl Workload for Read {
280280struct ReadGenerator {
281281 batch : usize ,
282282 rng : StdRng ,
283- dist : rand:: distributions :: Uniform < u64 > ,
283+ dist : rand:: distr :: Uniform < u64 > ,
284284}
285285
286286impl Iterator for ReadGenerator {
@@ -331,8 +331,8 @@ impl Workload for Write {
331331 Ok ( ( ) )
332332 }
333333
334- fn generate ( & self , rng : StdRng ) -> impl Iterator < Item = Self :: Item > + ' static {
335- WriteGenerator { next_id : 1 , size : self . size , batch : self . batch , rng }
334+ fn generate ( & self , rng : StdRng ) -> Result < impl Iterator < Item = Self :: Item > + ' static > {
335+ Ok ( WriteGenerator { next_id : 1 , size : self . size , batch : self . batch , rng } )
336336 }
337337
338338 fn execute ( client : & mut Client , item : & Self :: Item ) -> Result < ( ) > {
@@ -369,8 +369,7 @@ impl Iterator for WriteGenerator {
369369 type Item = <Write as Workload >:: Item ;
370370
371371 fn next ( & mut self ) -> Option < Self :: Item > {
372- let chars =
373- & mut rand:: distributions:: Alphanumeric . sample_iter ( & mut self . rng ) . map ( |b| b as char ) ;
372+ let chars = & mut rand:: distr:: Alphanumeric . sample_iter ( & mut self . rng ) . map ( |b| b as char ) ;
374373 let mut rows = Vec :: with_capacity ( self . batch ) ;
375374 while rows. len ( ) < self . batch {
376375 rows. push ( ( self . next_id , chars. take ( self . size ) . collect ( ) ) ) ;
@@ -451,16 +450,16 @@ impl Workload for Bank {
451450 Ok ( ( ) )
452451 }
453452
454- fn generate ( & self , rng : StdRng ) -> impl Iterator < Item = Self :: Item > + ' static {
453+ fn generate ( & self , rng : StdRng ) -> Result < impl Iterator < Item = Self :: Item > + ' static > {
455454 let customers = self . customers ;
456455 let max_transfer = self . max_transfer ;
457456 // Generate random u64s, then pick random from,to,amount as the
458457 // remainder of the max customer and amount.
459- rand:: distributions :: Uniform :: new_inclusive ( 0 , u64:: MAX )
458+ Ok ( rand:: distr :: Uniform :: new_inclusive ( 0 , u64:: MAX ) ?
460459 . sample_iter ( rng)
461460 . tuples ( )
462461 . map ( move |( a, b, c) | ( a % customers + 1 , b % customers + 1 , c % max_transfer + 1 ) )
463- . filter ( |( from, to, _) | from != to)
462+ . filter ( |( from, to, _) | from != to) )
464463 }
465464
466465 fn execute ( client : & mut Client , item : & Self :: Item ) -> Result < ( ) > {
0 commit comments