[pbs-devel] [PATCH proxmox-backup v2 2/9] server/worker_task: refactor locking of the task list
Dominik Csapak
d.csapak at proxmox.com
Mon Sep 28 15:32:05 CEST 2020
also add the functionality of having a 'shared' (read) lock for the list
we will need this later
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* rebase on master (use open_file_locked)
src/server/worker_task.rs | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/server/worker_task.rs b/src/server/worker_task.rs
index a24e59b4..34d31f99 100644
--- a/src/server/worker_task.rs
+++ b/src/server/worker_task.rs
@@ -325,6 +325,15 @@ 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)
+}
+
// atomically read/update the task list, update status of finished tasks
// new_upid is added to the list when specified.
// Returns a sorted list of known tasks,
@@ -332,8 +341,7 @@ fn update_active_workers(new_upid: Option<&UPID>) -> Result<Vec<TaskListInfo>, E
let backup_user = crate::backup::backup_user()?;
- let lock = open_file_locked(PROXMOX_BACKUP_TASK_LOCK_FN, std::time::Duration::new(10, 0), true)?;
- nix::unistd::chown(PROXMOX_BACKUP_TASK_LOCK_FN, Some(backup_user.uid), Some(backup_user.gid))?;
+ let lock = lock_task_list_files(true)?;
let reader = match File::open(PROXMOX_BACKUP_ACTIVE_TASK_FN) {
Ok(f) => Some(BufReader::new(f)),
--
2.20.1
More information about the pbs-devel
mailing list