diff --git a/services/identity/src/database/device_list.rs b/services/identity/src/database/device_list.rs --- a/services/identity/src/database/device_list.rs +++ b/services/identity/src/database/device_list.rs @@ -1554,10 +1554,23 @@ ) -> Result<DeviceListRow, Error> { let mut devices_being_removed: Vec<String> = Vec::new(); let update_result = self - .transact_update_devicelist(user_id, |current_list, _| { + .transact_update_devicelist(user_id, |current_list, devices_data| { + debug!("Resetting device list"); devices_being_removed.extend(current_list.clone()); - debug!("Resetting device list"); + if let Some(keyserver) = devices_data + .into_iter() + .find(|device| device.device_type() == &DeviceType::Keyserver) + { + let keyserver_device_id = &keyserver.device_id; + debug!( + "Found keyserver device: {}. It will not be removed.", + keyserver_device_id + ); + devices_being_removed + .retain(|device_id| device_id != keyserver_device_id); + } + *current_list = Vec::new(); Ok(UpdateOperationInfo::identity_generated())