@@ -256,6 +256,16 @@ impl RocksDbStorage {
256256 let db = Arc :: new ( DB :: open ( & options. db_options , path) ?) ;
257257 Ok ( Self { db, options : Arc :: new ( options) , config } )
258258 }
259+
260+ fn mget_from_raw_keys < K : AsRef < [ u8 ] > , RK : IntoIterator < Item = K > > (
261+ raw_keys : RK ,
262+ db : Arc < DB > ,
263+ ) -> PatriciaStorageResult < Vec < Option < DbValue > > > {
264+ db. multi_get ( raw_keys)
265+ . into_iter ( )
266+ . map ( |r| r. map ( |opt| opt. map ( DbValue ) ) . map_err ( |e| e. into ( ) ) )
267+ . collect :: < Result < Vec < _ > , PatriciaStorageError > > ( )
268+ }
259269}
260270
261271#[ derive( Debug , Default ) ]
@@ -300,22 +310,10 @@ impl Storage for RocksDbStorage {
300310 if self . config . spawn_blocking_reads {
301311 let db = self . db . clone ( ) ;
302312 let keys: Vec < Vec < u8 > > = keys. iter ( ) . map ( |k| k. 0 . clone ( ) ) . collect ( ) ;
303- Ok ( spawn_blocking ( move || {
304- let raw_keys = keys. iter ( ) . map ( |k| k. as_slice ( ) ) ;
305- db. multi_get ( raw_keys)
306- . into_iter ( )
307- . map ( |r| r. map ( |opt| opt. map ( DbValue ) ) . map_err ( |e| e. into ( ) ) )
308- . collect :: < Result < Vec < _ > , PatriciaStorageError > > ( )
309- } )
310- . await ??)
313+ Ok ( spawn_blocking ( move || Self :: mget_from_raw_keys ( keys, db) ) . await ??)
311314 } else {
312315 let raw_keys = keys. iter ( ) . map ( |k| k. 0 . as_slice ( ) ) ;
313- Ok ( self
314- . db
315- . multi_get ( raw_keys)
316- . into_iter ( )
317- . map ( |r| r. map ( |opt| opt. map ( DbValue ) ) . map_err ( |e| e. into ( ) ) )
318- . collect :: < Result < Vec < _ > , PatriciaStorageError > > ( ) ?)
316+ Ok ( Self :: mget_from_raw_keys ( raw_keys, self . db . clone ( ) ) ?)
319317 }
320318 }
321319
0 commit comments