@@ -262,6 +262,16 @@ impl RocksDbStorage {
262262 let db = Arc :: new ( DB :: open ( & options. db_options , path) ?) ;
263263 Ok ( Self { db, options : Arc :: new ( options) , config } )
264264 }
265+
266+ fn mget_from_raw_keys < K : AsRef < [ u8 ] > , RK : IntoIterator < Item = K > > (
267+ raw_keys : RK ,
268+ db : Arc < DB > ,
269+ ) -> PatriciaStorageResult < Vec < Option < DbValue > > > {
270+ db. multi_get ( raw_keys)
271+ . into_iter ( )
272+ . map ( |r| r. map ( |opt| opt. map ( DbValue ) ) . map_err ( |e| e. into ( ) ) )
273+ . collect :: < Result < Vec < _ > , PatriciaStorageError > > ( )
274+ }
265275}
266276
267277#[ derive( Debug , Default ) ]
@@ -306,22 +316,10 @@ impl Storage for RocksDbStorage {
306316 if self . config . spawn_blocking_reads {
307317 let db = self . db . clone ( ) ;
308318 let keys: Vec < Vec < u8 > > = keys. iter ( ) . map ( |k| k. 0 . clone ( ) ) . collect ( ) ;
309- Ok ( spawn_blocking ( move || {
310- let raw_keys = keys. iter ( ) . map ( |k| k. as_slice ( ) ) ;
311- db. multi_get ( raw_keys)
312- . into_iter ( )
313- . map ( |r| r. map ( |opt| opt. map ( DbValue ) ) . map_err ( |e| e. into ( ) ) )
314- . collect :: < Result < Vec < _ > , PatriciaStorageError > > ( )
315- } )
316- . await ??)
319+ Ok ( spawn_blocking ( move || Self :: mget_from_raw_keys ( keys, db) ) . await ??)
317320 } else {
318321 let raw_keys = keys. iter ( ) . map ( |k| k. 0 . as_slice ( ) ) ;
319- Ok ( self
320- . db
321- . multi_get ( raw_keys)
322- . into_iter ( )
323- . map ( |r| r. map ( |opt| opt. map ( DbValue ) ) . map_err ( |e| e. into ( ) ) )
324- . collect :: < Result < Vec < _ > , PatriciaStorageError > > ( ) ?)
322+ Ok ( Self :: mget_from_raw_keys ( raw_keys, self . db . clone ( ) ) ?)
325323 }
326324 }
327325
0 commit comments