]> git.proxmox.com Git - proxmox-backup.git/commitdiff
cleanup WorkerTaskContext
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 24 Sep 2021 09:39:30 +0000 (11:39 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 24 Sep 2021 09:39:30 +0000 (11:39 +0200)
pbs-tools/src/task.rs
proxmox-rest-server/src/worker_task.rs
src/api2/tape/backup.rs
src/api2/tape/restore.rs
src/tape/drive/mod.rs

index e8648a49d0a1f31f7407ad767ae548f713b037ca..1d096575037805bc7fcc55fca08d8e0e6b3be167 100644 (file)
@@ -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 {
+
+    /// 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.
-    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.
     fn log(&self, level: log::Level, message: &std::fmt::Arguments);
@@ -11,6 +22,10 @@ pub trait WorkerTaskContext {
 
 /// Convenience implementation:
 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> {
         <T as WorkerTaskContext>::check_abort(&*self)
     }
index bea43573f80ced7c7245bfd870a04ed6a17575a6..7a2bb11cccac70c7be7de9950519dd02724a9670 100644 (file)
@@ -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
     pub fn abort_future(&self) ->  oneshot::Receiver<()> {
         let (tx, rx) = oneshot::channel::<()>();
@@ -861,8 +848,9 @@ impl 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) {
index 9529eca305abf17e9bd06647fc1eb9980d8a91ae..c5588ddcdd9d794cdadfe60084a2183e80466814 100644 (file)
@@ -22,7 +22,7 @@ use pbs_api_types::{
 
 use pbs_datastore::StoreProgress;
 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 proxmox_rest_server::WorkerTask;
 
index 8feed754fc046fd83129afe7995b4359d1e20550..a62bb27962114d3d7f25ea70883e83c2108b8e40 100644 (file)
@@ -45,7 +45,7 @@ use pbs_tape::{
     TapeRead, BlockReadError, MediaContentHeader,
     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 crate::{
index 660255d295f1548d6a64733cb9c1cbae18d409fb..1780fe2d10abd3e5136095f37782060d2dff8e79 100644 (file)
@@ -30,13 +30,12 @@ use proxmox::{
 
 use pbs_api_types::{VirtualTapeDrive, LtoTapeDrive, Fingerprint};
 use pbs_config::key_config::KeyConfig;
-use pbs_tools::task_log;
+use pbs_tools::{task_log, task::WorkerTaskContext};
 
 use pbs_tape::{
     TapeWrite, TapeRead, BlockReadError, MediaContentHeader,
     sg_tape::TapeAlertFlags,
 };
-use proxmox_rest_server::WorkerTask;
 
 use crate::{
     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.
 pub fn request_and_load_media(
-    worker: &WorkerTask,
+    worker: &dyn WorkerTaskContext,
     config: &SectionConfigData,
     drive: &str,
     label: &MediaLabel,