traffic_control: use Memcom to track. config versions
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
This commit is contained in:
parent
bfd12e871f
commit
485b2438ac
@ -16,7 +16,7 @@ pub mod traffic_control;
|
||||
pub mod user;
|
||||
pub mod verify;
|
||||
|
||||
pub(crate) mod memcom;
|
||||
pub mod memcom;
|
||||
|
||||
use anyhow::{format_err, Error};
|
||||
|
||||
|
@ -23,6 +23,8 @@ pub struct Memcom {
|
||||
struct Head {
|
||||
// User (user.cfg) cache generation/version.
|
||||
user_cache_generation: AtomicUsize,
|
||||
// Traffic control (traffic-control.cfg) generation/version.
|
||||
traffic_control_generation: AtomicUsize,
|
||||
}
|
||||
|
||||
static INSTANCE: OnceCell<Arc<Memcom>> = OnceCell::new();
|
||||
@ -81,4 +83,16 @@ impl Memcom {
|
||||
.user_cache_generation
|
||||
.fetch_add(1, Ordering::AcqRel);
|
||||
}
|
||||
|
||||
/// Returns the traffic control generation number.
|
||||
pub fn traffic_control_generation(&self) -> usize {
|
||||
self.head().traffic_control_generation.load(Ordering::Acquire)
|
||||
}
|
||||
|
||||
/// Increase the traffic control generation number.
|
||||
pub fn increase_traffic_control_generation(&self) {
|
||||
self.head()
|
||||
.traffic_control_generation
|
||||
.fetch_add(1, Ordering::AcqRel);
|
||||
}
|
||||
}
|
||||
|
@ -10,9 +10,9 @@ use pbs_api_types::{TrafficControlRule, TRAFFIC_CONTROL_ID_SCHEMA};
|
||||
|
||||
use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin};
|
||||
|
||||
use crate::memcom::Memcom;
|
||||
use crate::{open_backup_lockfile, replace_backup_config, BackupLockGuard};
|
||||
|
||||
|
||||
lazy_static! {
|
||||
/// Static [`SectionConfig`] to access parser/writer functions.
|
||||
pub static ref CONFIG: SectionConfig = init();
|
||||
@ -55,7 +55,14 @@ pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> {
|
||||
/// Save the configuration file
|
||||
pub fn save_config(config: &SectionConfigData) -> Result<(), Error> {
|
||||
let raw = CONFIG.write(TRAFFIC_CONTROL_CFG_FILENAME, &config)?;
|
||||
replace_backup_config(TRAFFIC_CONTROL_CFG_FILENAME, raw.as_bytes())
|
||||
replace_backup_config(TRAFFIC_CONTROL_CFG_FILENAME, raw.as_bytes())?;
|
||||
|
||||
// increase traffic control generation
|
||||
// We use this in TrafficControlCache
|
||||
let memcom = Memcom::new()?;
|
||||
memcom.increase_traffic_control_generation();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user