@@ -13,7 +13,7 @@ use crate::{
1313 types:: { DbusErrorEnum , EncryptionInfos , TData , OK_STRING } ,
1414 util:: { engine_to_dbus_err_tuple, get_next_arg, tuple_to_option} ,
1515 } ,
16- engine:: { CreateAction , InputEncryptionInfo , KeyDescription } ,
16+ engine:: { CreateAction , DeleteAction , InputEncryptionInfo , KeyDescription } ,
1717 stratis:: StratisError ,
1818} ;
1919
@@ -90,7 +90,8 @@ pub fn encrypt_pool(m: &MethodInfo<'_, MTSync<TData>, TData>) -> MethodResult {
9090
9191 // Check if operation is idempotent and complete all operations before handling result
9292 let create_result = handle_action ! (
93- read_guard. encrypt_pool_idem_check( )
93+ read_guard
94+ . encrypt_pool_idem_check( )
9495 . and_then( |action| match action {
9596 CreateAction :: Identity => Ok ( action) ,
9697 CreateAction :: Created ( _) => {
@@ -117,9 +118,11 @@ pub fn encrypt_pool(m: &MethodInfo<'_, MTSync<TData>, TData>) -> MethodResult {
117118 ) ;
118119
119120 let msg = match create_result {
120- Ok ( CreateAction :: Identity ) => {
121- return_message. append3 ( default_return, DbusErrorEnum :: OK as u16 , OK_STRING . to_string ( ) )
122- }
121+ Ok ( CreateAction :: Identity ) => return_message. append3 (
122+ default_return,
123+ DbusErrorEnum :: OK as u16 ,
124+ OK_STRING . to_string ( ) ,
125+ ) ,
123126 Ok ( CreateAction :: Created ( _) ) => {
124127 let guard = get_pool ! ( dbus_context. engine; pool_uuid; default_return; return_message) ;
125128 let encryption_info = match guard. encryption_info ( ) . clone ( ) {
@@ -218,22 +221,40 @@ pub fn decrypt_pool(m: &MethodInfo<'_, MTSync<TData>, TData>) -> MethodResult {
218221 return_message
219222 ) ;
220223
221- let mut guard = get_mut_pool ! ( dbus_context. engine; pool_uuid; default_return; return_message) ;
222- let ( name, uuid, pool) = guard. as_mut_tuple ( ) ;
224+ let guard = get_pool ! ( dbus_context. engine; pool_uuid; default_return; return_message) ;
223225
224- let result = handle_action ! (
225- pool . decrypt_pool ( & name , uuid ) ,
226+ let result = match handle_action ! (
227+ guard . decrypt_pool_idem_check ( ) ,
226228 dbus_context,
227229 pool_path. get_name( )
228- ) ;
230+ ) {
231+ Ok ( DeleteAction :: Identity ) => Ok ( DeleteAction :: Identity ) ,
232+ Ok ( DeleteAction :: Deleted ( d) ) => {
233+ match guard. do_decrypt_pool ( pool_uuid) . and_then ( |_| {
234+ let mut guard = block_on ( dbus_context. engine . upgrade_pool ( guard) ) ;
235+ let ( name, _, _) = guard. as_mut_tuple ( ) ;
236+ guard. finish_decrypt_pool ( pool_uuid, & name)
237+ } ) {
238+ Ok ( _) => Ok ( DeleteAction :: Deleted ( d) ) ,
239+ Err ( e) => Err ( e) ,
240+ }
241+ }
242+ Err ( e) => Err ( e) ,
243+ } ;
229244 let msg = match result {
230- Ok ( _) => {
245+ Ok ( DeleteAction :: Deleted ( _) ) => {
246+ let guard = get_pool ! ( dbus_context. engine; pool_uuid; default_return; return_message) ;
231247 dbus_context. push_pool_key_desc_change ( pool_path. get_name ( ) , None ) ;
232248 dbus_context. push_pool_clevis_info_change ( pool_path. get_name ( ) , None ) ;
233249 dbus_context. push_pool_encryption_status_change ( pool_path. get_name ( ) , false ) ;
234- dbus_context. push_pool_last_reencrypt_timestamp ( object_path, pool . last_reencrypt ( ) ) ;
250+ dbus_context. push_pool_last_reencrypt_timestamp ( object_path, guard . last_reencrypt ( ) ) ;
235251 return_message. append3 ( true , DbusErrorEnum :: OK as u16 , OK_STRING . to_string ( ) )
236252 }
253+ Ok ( DeleteAction :: Identity ) => return_message. append3 (
254+ default_return,
255+ DbusErrorEnum :: OK as u16 ,
256+ OK_STRING . to_string ( ) ,
257+ ) ,
237258 Err ( err) => {
238259 let ( rc, rs) = engine_to_dbus_err_tuple ( & err) ;
239260 return_message. append3 ( default_return, rc, rs)
0 commit comments