[pdm-devel] [RFC datacenter-manager 8/8] remote task cache: handle PBS tasks correctly
Lukas Wagner
l.wagner at proxmox.com
Tue Nov 11 11:50:59 CET 2025
The remote task cache assumed in some cases that all UPIDs were PVE
UPIDs; mostly for simplicity, since PBS remotes were not implemented yet
at the time of implementation of the task cache.
The new remote_type and native_upid functions for the RemoteUpid struct
makes it pretty simple to add support for PBS.
Signed-off-by: Lukas Wagner <l.wagner at proxmox.com>
---
server/src/remote_tasks/mod.rs | 21 ++++++++++++++++-----
server/src/remote_tasks/task_cache.rs | 19 ++++++++++++-------
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/server/src/remote_tasks/mod.rs b/server/src/remote_tasks/mod.rs
index 37e689e0..f39d0b77 100644
--- a/server/src/remote_tasks/mod.rs
+++ b/server/src/remote_tasks/mod.rs
@@ -2,7 +2,7 @@ use std::path::Path;
use anyhow::Error;
-use pdm_api_types::{RemoteUpid, TaskFilters, TaskListItem, TaskStateType};
+use pdm_api_types::{NativeUpid, RemoteUpid, TaskFilters, TaskListItem, TaskStateType};
use pve_api_types::PveUpid;
pub mod task_cache;
@@ -52,10 +52,9 @@ pub async fn get_tasks(
return None;
}
}
- // TODO: Handle PBS tasks
- let pve_upid: Result<PveUpid, Error> = task.upid.upid().parse();
- match pve_upid {
- Ok(pve_upid) => Some(TaskListItem {
+
+ match task.upid.native_upid() {
+ Ok(NativeUpid::PveUpid(pve_upid)) => Some(TaskListItem {
upid: task.upid.to_string(),
node: pve_upid.node,
pid: pve_upid.pid as i64,
@@ -67,6 +66,18 @@ pub async fn get_tasks(
endtime: task.endtime,
status: task.status,
}),
+ Ok(NativeUpid::PbsUpid(pbs_upid)) => Some(TaskListItem {
+ upid: task.upid.to_string(),
+ node: pbs_upid.node,
+ pid: pbs_upid.pid as i64,
+ pstart: pbs_upid.pstart,
+ starttime: pbs_upid.starttime,
+ worker_type: pbs_upid.worker_type,
+ worker_id: pbs_upid.worker_id,
+ user: pbs_upid.auth_id,
+ endtime: task.endtime,
+ status: task.status,
+ }),
Err(err) => {
log::error!("could not parse UPID: {err:#}");
None
diff --git a/server/src/remote_tasks/task_cache.rs b/server/src/remote_tasks/task_cache.rs
index cb3b6687..1eee46a6 100644
--- a/server/src/remote_tasks/task_cache.rs
+++ b/server/src/remote_tasks/task_cache.rs
@@ -15,8 +15,7 @@ use serde::{Deserialize, Serialize};
use proxmox_sys::fs::CreateOptions;
-use pdm_api_types::RemoteUpid;
-use pve_api_types::PveUpid;
+use pdm_api_types::{NativeUpid, RemoteUpid};
/// Filename for the file containing running tasks.
const ACTIVE_FILENAME: &str = "active";
@@ -405,15 +404,21 @@ impl WritableTaskCache {
// Remove this finished task from our set of active tasks.
active_tasks.remove(&task.upid);
- // TODO:: Handle PBS tasks correctly.
- // TODO: This is awkward, maybe overhaul RemoteUpid type to make this easier
- match task.upid.upid().parse::<PveUpid>() {
- Ok(upid) => {
+ match task.upid.native_upid() {
+ Ok(NativeUpid::PveUpid(upid)) => {
let node = &upid.node;
let remote = task.upid.remote();
if node_success_map.node_successful(remote, node) {
- state.update_cutoff_timestamp(task.upid.remote(), node, task.starttime);
+ state.update_cutoff_timestamp(remote, node, task.starttime);
+ }
+ }
+ Ok(NativeUpid::PbsUpid(upid)) => {
+ let node = &upid.node;
+ let remote = task.upid.remote();
+
+ if node_success_map.node_successful(remote, node) {
+ state.update_cutoff_timestamp(remote, node, task.starttime);
}
}
Err(error) => {
--
2.47.3
More information about the pdm-devel
mailing list