use new atomic_open_or_create_file
Factor out open_backup_lockfile() method to acquire locks owned by user backup with permission 0660. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
committed by
Thomas Lamprecht
parent
a00888e93f
commit
7526d86419
@ -37,18 +37,17 @@
|
||||
//! # }
|
||||
//!
|
||||
//! ```
|
||||
use std::fs::File;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::time::Duration;
|
||||
|
||||
use anyhow::{bail, format_err, Error};
|
||||
use proxmox::tools::fs::{
|
||||
create_path, file_read_optional_string, open_file_locked, replace_file, CreateOptions,
|
||||
create_path, file_read_optional_string, replace_file, CreateOptions,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
tools::systemd::time::{
|
||||
backup::{open_backup_lockfile, BackupLockGuard},
|
||||
tools::systemd::time::{
|
||||
parse_calendar_event,
|
||||
compute_next_event,
|
||||
},
|
||||
@ -83,7 +82,7 @@ pub struct Job {
|
||||
jobname: String,
|
||||
/// The State of the job
|
||||
pub state: JobState,
|
||||
_lock: File,
|
||||
_lock: BackupLockGuard,
|
||||
}
|
||||
|
||||
const JOB_STATE_BASEDIR: &str = "/var/lib/proxmox-backup/jobstates";
|
||||
@ -107,16 +106,13 @@ fn get_path(jobtype: &str, jobname: &str) -> PathBuf {
|
||||
path
|
||||
}
|
||||
|
||||
fn get_lock<P>(path: P) -> Result<File, Error>
|
||||
fn get_lock<P>(path: P) -> Result<BackupLockGuard, Error>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let mut path = path.as_ref().to_path_buf();
|
||||
path.set_extension("lck");
|
||||
let lock = open_file_locked(&path, Duration::new(10, 0), true)?;
|
||||
let backup_user = crate::backup::backup_user()?;
|
||||
nix::unistd::chown(&path, Some(backup_user.uid), Some(backup_user.gid))?;
|
||||
Ok(lock)
|
||||
open_backup_lockfile(&path, None, true)
|
||||
}
|
||||
|
||||
/// Removes the statefile of a job, this is useful if we delete a job
|
||||
|
@ -14,7 +14,7 @@ use tokio::sync::oneshot;
|
||||
|
||||
use proxmox::sys::linux::procfs;
|
||||
use proxmox::try_block;
|
||||
use proxmox::tools::fs::{create_path, open_file_locked, replace_file, CreateOptions};
|
||||
use proxmox::tools::fs::{create_path, replace_file, CreateOptions};
|
||||
|
||||
use super::{UPID, UPIDExt};
|
||||
|
||||
@ -24,6 +24,7 @@ use crate::server;
|
||||
use crate::tools::logrotate::{LogRotate, LogRotateFiles};
|
||||
use crate::tools::{FileLogger, FileLogOptions};
|
||||
use crate::api2::types::{Authid, TaskStateType};
|
||||
use crate::backup::{open_backup_lockfile, BackupLockGuard};
|
||||
|
||||
macro_rules! taskdir {
|
||||
($subdir:expr) => (concat!(pbs_buildcfg::PROXMOX_BACKUP_LOG_DIR_M!(), "/tasks", $subdir))
|
||||
@ -313,13 +314,8 @@ pub struct TaskListInfo {
|
||||
pub state: Option<TaskState>, // endtime, status
|
||||
}
|
||||
|
||||
fn lock_task_list_files(exclusive: bool) -> Result<std::fs::File, Error> {
|
||||
let backup_user = crate::backup::backup_user()?;
|
||||
|
||||
let lock = open_file_locked(PROXMOX_BACKUP_TASK_LOCK_FN, std::time::Duration::new(10, 0), exclusive)?;
|
||||
nix::unistd::chown(PROXMOX_BACKUP_TASK_LOCK_FN, Some(backup_user.uid), Some(backup_user.gid))?;
|
||||
|
||||
Ok(lock)
|
||||
fn lock_task_list_files(exclusive: bool) -> Result<BackupLockGuard, Error> {
|
||||
open_backup_lockfile(PROXMOX_BACKUP_TASK_LOCK_FN, None, exclusive)
|
||||
}
|
||||
|
||||
/// checks if the Task Archive is bigger that 'size_threshold' bytes, and
|
||||
@ -481,7 +477,7 @@ pub struct TaskListInfoIterator {
|
||||
list: VecDeque<TaskListInfo>,
|
||||
end: bool,
|
||||
archive: Option<LogRotateFiles>,
|
||||
lock: Option<File>,
|
||||
lock: Option<BackupLockGuard>,
|
||||
}
|
||||
|
||||
impl TaskListInfoIterator {
|
||||
|
Reference in New Issue
Block a user