@@ -36,7 +36,7 @@ impl SnapshotEngine {
3636 // acquire lock for worker_running
3737 let mut worker_running = self . worker_running . lock ( ) . map_err ( |_| DbError :: LockError ) ?;
3838 if !* worker_running {
39- return Err ( DbError :: StorageEngineError (
39+ return Err ( DbError :: SnapshotEngineError (
4040 "Worker thread not running" . to_string ( ) ,
4141 ) ) ;
4242 }
@@ -50,7 +50,7 @@ impl SnapshotEngine {
5050 // acquire lock for worker_running
5151 let worker_running = self . worker_running . lock ( ) . map_err ( |_| DbError :: LockError ) ?;
5252 if !* worker_running {
53- return Err ( DbError :: StorageEngineError (
53+ return Err ( DbError :: SnapshotEngineError (
5454 "Worker thread not running" . to_string ( ) ,
5555 ) ) ;
5656 }
@@ -82,7 +82,7 @@ impl SnapshotEngine {
8282 // acquire lock for worker_running
8383 let mut worker_running = self . worker_running . lock ( ) . map_err ( |_| DbError :: LockError ) ?;
8484 if * worker_running {
85- return Err ( DbError :: StorageEngineError (
85+ return Err ( DbError :: SnapshotEngineError (
8686 "Worker thread already running" . to_string ( ) ,
8787 ) ) ;
8888 }
@@ -119,25 +119,48 @@ impl SnapshotEngine {
119119 ) -> Result < ( ) , DbError > {
120120 let snapshot_path = db
121121 . lock ( )
122- . unwrap ( )
123- . create_snapshot ( registry. lock ( ) . unwrap ( ) . dir ( ) . as_path ( ) )
124- . unwrap ( ) ;
125- let snapshot_metadata = Metadata :: parse ( & snapshot_path) . unwrap ( ) ;
122+ . map_err ( |_| DbError :: LockError ) ?
123+ . create_snapshot (
124+ registry
125+ . lock ( )
126+ . map_err ( |_| DbError :: LockError ) ?
127+ . dir ( )
128+ . as_path ( ) ,
129+ )
130+ . map_err ( |err| {
131+ DbError :: SnapshotEngineError ( format ! ( "Could not create snapshot : {}" , err) )
132+ } ) ?;
133+ let snapshot_metadata = Metadata :: parse ( & snapshot_path) . map_err ( |err| {
134+ DbError :: SnapshotEngineError ( format ! ( "Could not parse snapshot metadata: {}" , err) )
135+ } ) ?;
126136
127137 // add the snapshot to registry
128138 registry
129139 . lock ( )
130- . unwrap ( )
140+ . map_err ( |_| DbError :: LockError ) ?
131141 . add_snapshot ( & snapshot_path)
132- . unwrap ( ) ;
142+ . map_err ( |err| {
143+ DbError :: SnapshotEngineError ( format ! ( "Could not add snapshot to registry: {}" , err) )
144+ } ) ?;
133145
134146 {
135- let mut queue = snapshot_queue. lock ( ) . unwrap ( ) ;
147+ let mut queue = snapshot_queue. lock ( ) . map_err ( |_| DbError :: LockError ) ? ;
136148 queue. push_back ( snapshot_metadata) ;
137149
138150 while queue. len ( ) > last_k {
139- let old = queue. pop_front ( ) . unwrap ( ) ;
140- registry. lock ( ) . unwrap ( ) . mark_dead ( old. small_id ) . unwrap ( ) ;
151+ let old = queue. pop_front ( ) . ok_or_else ( || {
152+ DbError :: SnapshotEngineError ( "Snapshot metadata queue is empty" . to_string ( ) )
153+ } ) ?;
154+ registry
155+ . lock ( )
156+ . map_err ( |_| DbError :: LockError ) ?
157+ . mark_dead ( old. small_id )
158+ . map_err ( |err| {
159+ DbError :: SnapshotEngineError ( format ! (
160+ "Could not mark snapshot as dead in registry: {}" ,
161+ err
162+ ) )
163+ } ) ?;
141164 }
142165 // drop queue lock
143166 }
@@ -156,10 +179,7 @@ impl SnapshotEngine {
156179 ) {
157180 loop {
158181 // acquire the lock and exit if its false
159- let worker_running = worker_running
160- . lock ( )
161- . map_err ( |_| DbError :: LockError )
162- . unwrap ( ) ;
182+ let worker_running = worker_running. lock ( ) . unwrap ( ) ;
163183 if !* worker_running {
164184 break ;
165185 }
0 commit comments