From e13bda773d4a48db850f0a93c4c7f675d1f04e33 Mon Sep 17 00:00:00 2001 From: mulhern Date: Thu, 21 Dec 2023 21:17:52 -0500 Subject: [PATCH] Send fs origin change signals on D-Bus Signed-off-by: mulhern --- src/dbus_api/pool/pool_3_7/methods.rs | 44 ++++++++++++++++++--------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/dbus_api/pool/pool_3_7/methods.rs b/src/dbus_api/pool/pool_3_7/methods.rs index aff6792a55f..87f24fa776c 100644 --- a/src/dbus_api/pool/pool_3_7/methods.rs +++ b/src/dbus_api/pool/pool_3_7/methods.rs @@ -13,7 +13,7 @@ use crate::{ types::{DbusErrorEnum, TData, OK_STRING}, util::{engine_to_dbus_err_tuple, get_next_arg}, }, - engine::{EngineAction, FilesystemUuid}, + engine::{EngineAction, FilesystemUuid, StratisUuid}, }; pub fn destroy_filesystems(m: &MethodInfo<'_, MTSync, TData>) -> MethodResult { @@ -65,20 +65,34 @@ pub fn destroy_filesystems(m: &MethodInfo<'_, MTSync, TData>) -> MethodRe Ok(uuids) => { // Only get changed values here as non-existent filesystems will have been filtered out // before calling destroy_filesystems - let uuid_vec: Vec = if let Some((ref changed_uuids, _)) = uuids.changed() { - for uuid in changed_uuids { - let op = filesystem_map - .get(uuid) - .expect("'uuids' is a subset of filesystem_map.keys()"); - dbus_context.push_remove(op, filesystem_interface_list()); - } - changed_uuids - .iter() - .map(|uuid| uuid_to_string!(uuid)) - .collect() - } else { - Vec::new() - }; + let uuid_vec: Vec = + if let Some((ref changed_uuids, ref updated_uuids)) = uuids.changed() { + for uuid in changed_uuids { + let op = filesystem_map + .get(uuid) + .expect("'uuids' is a subset of filesystem_map.keys()"); + dbus_context.push_remove(op, filesystem_interface_list()); + } + + for sn_op in m.tree.iter().filter(|op| { + op.get_data() + .as_ref() + .map(|data| match data.uuid { + StratisUuid::Fs(uuid) => updated_uuids.contains(&uuid), + _ => false, + }) + .unwrap_or(false) + }) { + dbus_context.push_filesystem_origin_change(sn_op.get_name()); + } + + changed_uuids + .iter() + .map(|uuid| uuid_to_string!(uuid)) + .collect() + } else { + Vec::new() + }; return_message.append3( (true, uuid_vec), DbusErrorEnum::OK as u16,