From b90036dadd0a9cfcb3b478532f2e9964a7ce012c Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Fri, 4 Jun 2021 08:59:52 +0200 Subject: [PATCH] cleanup: factor out config::datastore::lock_config() --- src/api2/config/datastore.rs | 7 +++---- src/api2/node/disks/directory.rs | 2 +- src/api2/node/disks/zfs.rs | 1 - src/config/datastore.rs | 11 ++++++++++- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs index baa8bf98..8032a190 100644 --- a/src/api2/config/datastore.rs +++ b/src/api2/config/datastore.rs @@ -7,7 +7,6 @@ use ::serde::{Deserialize, Serialize}; use proxmox::api::{api, Router, RpcEnvironment, Permission}; use proxmox::api::section_config::SectionConfigData; use proxmox::api::schema::parse_property_string; -use proxmox::tools::fs::open_file_locked; use crate::api2::types::*; use crate::backup::*; @@ -141,7 +140,7 @@ pub fn create_datastore( rpcenv: &mut dyn RpcEnvironment, ) -> Result { - let lock = open_file_locked(datastore::DATASTORE_CFG_LOCKFILE, std::time::Duration::new(10, 0), true)?; + let lock = datastore::lock_config()?; let datastore: datastore::DataStoreConfig = serde_json::from_value(param)?; @@ -315,7 +314,7 @@ pub fn update_datastore( digest: Option, ) -> Result<(), Error> { - let _lock = open_file_locked(datastore::DATASTORE_CFG_LOCKFILE, std::time::Duration::new(10, 0), true)?; + let _lock = datastore::lock_config()?; // pass/compare digest let (mut config, expected_digest) = datastore::config()?; @@ -424,7 +423,7 @@ pub fn update_datastore( /// Remove a datastore configuration. pub async fn delete_datastore(name: String, digest: Option) -> Result<(), Error> { - let _lock = open_file_locked(datastore::DATASTORE_CFG_LOCKFILE, std::time::Duration::new(10, 0), true)?; + let _lock = datastore::lock_config()?; let (mut config, expected_digest) = datastore::config()?; diff --git a/src/api2/node/disks/directory.rs b/src/api2/node/disks/directory.rs index 006e9522..829699ca 100644 --- a/src/api2/node/disks/directory.rs +++ b/src/api2/node/disks/directory.rs @@ -190,7 +190,7 @@ pub fn create_datastore_disk( bail!("datastore '{}' already exists.", datastore.name); } - crate::api2::config::datastore::create_datastore_impl(lock, config, datastore)?; + crate::api2::config::datastore::do_create_datastore(lock, config, datastore)?; } Ok(()) diff --git a/src/api2/node/disks/zfs.rs b/src/api2/node/disks/zfs.rs index ae411f32..75c53c83 100644 --- a/src/api2/node/disks/zfs.rs +++ b/src/api2/node/disks/zfs.rs @@ -14,7 +14,6 @@ use proxmox::api::{ }, }; use proxmox::api::router::Router; -use proxmox::tools::fs::open_file_locked; use crate::config::acl::{PRIV_SYS_AUDIT, PRIV_SYS_MODIFY}; use crate::tools::disks::{ diff --git a/src/config/datastore.rs b/src/config/datastore.rs index 673033a0..d22fa316 100644 --- a/src/config/datastore.rs +++ b/src/config/datastore.rs @@ -13,7 +13,11 @@ use proxmox::api::{ } }; -use proxmox::tools::{fs::replace_file, fs::CreateOptions}; +use proxmox::tools::fs::{ + open_file_locked, + replace_file, + CreateOptions, +}; use crate::api2::types::*; @@ -133,6 +137,11 @@ fn init() -> SectionConfig { pub const DATASTORE_CFG_FILENAME: &str = "/etc/proxmox-backup/datastore.cfg"; pub const DATASTORE_CFG_LOCKFILE: &str = "/etc/proxmox-backup/.datastore.lck"; +/// Get exclusive lock +pub fn lock_config() -> Result { + open_file_locked(DATASTORE_CFG_LOCKFILE, std::time::Duration::new(10, 0), true) +} + pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> { let content = proxmox::tools::fs::file_read_optional_string(DATASTORE_CFG_FILENAME)?