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 user;
|
||||||
pub mod verify;
|
pub mod verify;
|
||||||
|
|
||||||
pub(crate) mod memcom;
|
pub mod memcom;
|
||||||
|
|
||||||
use anyhow::{format_err, Error};
|
use anyhow::{format_err, Error};
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@ pub struct Memcom {
|
|||||||
struct Head {
|
struct Head {
|
||||||
// User (user.cfg) cache generation/version.
|
// User (user.cfg) cache generation/version.
|
||||||
user_cache_generation: AtomicUsize,
|
user_cache_generation: AtomicUsize,
|
||||||
|
// Traffic control (traffic-control.cfg) generation/version.
|
||||||
|
traffic_control_generation: AtomicUsize,
|
||||||
}
|
}
|
||||||
|
|
||||||
static INSTANCE: OnceCell<Arc<Memcom>> = OnceCell::new();
|
static INSTANCE: OnceCell<Arc<Memcom>> = OnceCell::new();
|
||||||
@ -81,4 +83,16 @@ impl Memcom {
|
|||||||
.user_cache_generation
|
.user_cache_generation
|
||||||
.fetch_add(1, Ordering::AcqRel);
|
.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 proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin};
|
||||||
|
|
||||||
|
use crate::memcom::Memcom;
|
||||||
use crate::{open_backup_lockfile, replace_backup_config, BackupLockGuard};
|
use crate::{open_backup_lockfile, replace_backup_config, BackupLockGuard};
|
||||||
|
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
/// Static [`SectionConfig`] to access parser/writer functions.
|
/// Static [`SectionConfig`] to access parser/writer functions.
|
||||||
pub static ref CONFIG: SectionConfig = init();
|
pub static ref CONFIG: SectionConfig = init();
|
||||||
@ -55,7 +55,14 @@ pub fn config() -> Result<(SectionConfigData, [u8;32]), Error> {
|
|||||||
/// Save the configuration file
|
/// Save the configuration file
|
||||||
pub fn save_config(config: &SectionConfigData) -> Result<(), Error> {
|
pub fn save_config(config: &SectionConfigData) -> Result<(), Error> {
|
||||||
let raw = CONFIG.write(TRAFFIC_CONTROL_CFG_FILENAME, &config)?;
|
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