cleanup WorkerTaskContext
This commit is contained in:
parent
1ec0d70d09
commit
619cd5cbcb
@ -1,9 +1,20 @@
|
|||||||
use anyhow::Error;
|
use anyhow::{bail, Error};
|
||||||
|
|
||||||
/// `WorkerTask` methods commonly used from contexts otherwise not related to the API server.
|
/// Worker task abstraction
|
||||||
|
///
|
||||||
|
/// A worker task is a long running task, which usually logs output into a separate file.
|
||||||
pub trait WorkerTaskContext {
|
pub trait WorkerTaskContext {
|
||||||
|
|
||||||
|
/// Test if there was a request to abort the task.
|
||||||
|
fn abort_requested(&self) -> bool;
|
||||||
|
|
||||||
/// If the task should be aborted, this should fail with a reasonable error message.
|
/// If the task should be aborted, this should fail with a reasonable error message.
|
||||||
fn check_abort(&self) -> Result<(), Error>;
|
fn check_abort(&self) -> Result<(), Error> {
|
||||||
|
if self.abort_requested() {
|
||||||
|
bail!("abort requested - aborting task");
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a log message for this task.
|
/// Create a log message for this task.
|
||||||
fn log(&self, level: log::Level, message: &std::fmt::Arguments);
|
fn log(&self, level: log::Level, message: &std::fmt::Arguments);
|
||||||
@ -11,6 +22,10 @@ pub trait WorkerTaskContext {
|
|||||||
|
|
||||||
/// Convenience implementation:
|
/// Convenience implementation:
|
||||||
impl<T: WorkerTaskContext + ?Sized> WorkerTaskContext for std::sync::Arc<T> {
|
impl<T: WorkerTaskContext + ?Sized> WorkerTaskContext for std::sync::Arc<T> {
|
||||||
|
fn abort_requested(&self) -> bool {
|
||||||
|
<T as WorkerTaskContext>::abort_requested(&*self)
|
||||||
|
}
|
||||||
|
|
||||||
fn check_abort(&self) -> Result<(), Error> {
|
fn check_abort(&self) -> Result<(), Error> {
|
||||||
<T as WorkerTaskContext>::check_abort(&*self)
|
<T as WorkerTaskContext>::check_abort(&*self)
|
||||||
}
|
}
|
||||||
|
@ -829,19 +829,6 @@ impl WorkerTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Test if abort was requested.
|
|
||||||
pub fn abort_requested(&self) -> bool {
|
|
||||||
self.abort_requested.load(Ordering::SeqCst)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Fail if abort was requested.
|
|
||||||
pub fn check_abort(&self) -> Result<(), Error> {
|
|
||||||
if self.abort_requested() {
|
|
||||||
bail!("abort requested - aborting task");
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get a future which resolves on task abort
|
/// Get a future which resolves on task abort
|
||||||
pub fn abort_future(&self) -> oneshot::Receiver<()> {
|
pub fn abort_future(&self) -> oneshot::Receiver<()> {
|
||||||
let (tx, rx) = oneshot::channel::<()>();
|
let (tx, rx) = oneshot::channel::<()>();
|
||||||
@ -861,8 +848,9 @@ impl WorkerTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl WorkerTaskContext for WorkerTask {
|
impl WorkerTaskContext for WorkerTask {
|
||||||
fn check_abort(&self) -> Result<(), Error> {
|
|
||||||
self.check_abort()
|
fn abort_requested(&self) -> bool {
|
||||||
|
self.abort_requested.load(Ordering::SeqCst)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log(&self, level: log::Level, message: &std::fmt::Arguments) {
|
fn log(&self, level: log::Level, message: &std::fmt::Arguments) {
|
||||||
|
@ -22,7 +22,7 @@ use pbs_api_types::{
|
|||||||
|
|
||||||
use pbs_datastore::StoreProgress;
|
use pbs_datastore::StoreProgress;
|
||||||
use pbs_datastore::backup_info::{BackupDir, BackupInfo};
|
use pbs_datastore::backup_info::{BackupDir, BackupInfo};
|
||||||
use pbs_tools::{task_log, task_warn};
|
use pbs_tools::{task_log, task_warn, task::WorkerTaskContext};
|
||||||
use pbs_config::CachedUserInfo;
|
use pbs_config::CachedUserInfo;
|
||||||
use proxmox_rest_server::WorkerTask;
|
use proxmox_rest_server::WorkerTask;
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ use pbs_tape::{
|
|||||||
TapeRead, BlockReadError, MediaContentHeader,
|
TapeRead, BlockReadError, MediaContentHeader,
|
||||||
PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0,
|
PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0,
|
||||||
};
|
};
|
||||||
use pbs_tools::{task_log, task_warn};
|
use pbs_tools::{task_log, task_warn, task::WorkerTaskContext};
|
||||||
use proxmox_rest_server::WorkerTask;
|
use proxmox_rest_server::WorkerTask;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -30,13 +30,12 @@ use proxmox::{
|
|||||||
|
|
||||||
use pbs_api_types::{VirtualTapeDrive, LtoTapeDrive, Fingerprint};
|
use pbs_api_types::{VirtualTapeDrive, LtoTapeDrive, Fingerprint};
|
||||||
use pbs_config::key_config::KeyConfig;
|
use pbs_config::key_config::KeyConfig;
|
||||||
use pbs_tools::task_log;
|
use pbs_tools::{task_log, task::WorkerTaskContext};
|
||||||
|
|
||||||
use pbs_tape::{
|
use pbs_tape::{
|
||||||
TapeWrite, TapeRead, BlockReadError, MediaContentHeader,
|
TapeWrite, TapeRead, BlockReadError, MediaContentHeader,
|
||||||
sg_tape::TapeAlertFlags,
|
sg_tape::TapeAlertFlags,
|
||||||
};
|
};
|
||||||
use proxmox_rest_server::WorkerTask;
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
server::send_load_media_email,
|
server::send_load_media_email,
|
||||||
@ -355,7 +354,7 @@ impl std::fmt::Display for TapeRequestError {
|
|||||||
///
|
///
|
||||||
/// Returns a handle to the opened drive and the media labels.
|
/// Returns a handle to the opened drive and the media labels.
|
||||||
pub fn request_and_load_media(
|
pub fn request_and_load_media(
|
||||||
worker: &WorkerTask,
|
worker: &dyn WorkerTaskContext,
|
||||||
config: &SectionConfigData,
|
config: &SectionConfigData,
|
||||||
drive: &str,
|
drive: &str,
|
||||||
label: &MediaLabel,
|
label: &MediaLabel,
|
||||||
|
Loading…
Reference in New Issue
Block a user