use anyhow::{bail, format_err, Error};
+use proxmox_sys::{task_log, worker_task_context::WorkerTaskContext};
+
+use pbs_api_types::{Authid, CryptMode, VerifyState, UPID, SnapshotVerifyState};
+use pbs_datastore::{DataStore, DataBlob, StoreProgress};
+use pbs_datastore::backup_info::{BackupGroup, BackupDir, BackupInfo};
+use pbs_datastore::index::IndexFile;
+use pbs_datastore::manifest::{archive_type, ArchiveType, BackupManifest, FileInfo};
use pbs_tools::fs::lock_dir_noblock_shared;
-use crate::{
- api2::types::*,
- backup::{
- DataStore,
- StoreProgress,
- DataBlob,
- BackupGroup,
- BackupDir,
- BackupInfo,
- BackupManifest,
- IndexFile,
- CryptMode,
- FileInfo,
- ArchiveType,
- archive_type,
- },
- server::UPID,
- task::TaskState,
- task_log,
- tools::ParallelHandler,
-};
+use crate::tools::ParallelHandler;
/// A VerifyWorker encapsulates a task worker, datastore and information about which chunks have
/// already been verified or detected as corrupt.
pub struct VerifyWorker {
- worker: Arc<dyn TaskState + Send + Sync>,
+ worker: Arc<dyn WorkerTaskContext>,
datastore: Arc<DataStore>,
verified_chunks: Arc<Mutex<HashSet<[u8; 32]>>>,
corrupt_chunks: Arc<Mutex<HashSet<[u8; 32]>>>,
impl VerifyWorker {
/// Creates a new VerifyWorker for a given task worker and datastore.
- pub fn new(worker: Arc<dyn TaskState + Send + Sync>, datastore: Arc<DataStore>) -> Self {
+ pub fn new(worker: Arc<dyn WorkerTaskContext>, datastore: Arc<DataStore>) -> Self {
Self {
worker,
datastore,
fn rename_corrupted_chunk(
datastore: Arc<DataStore>,
digest: &[u8;32],
- worker: &dyn TaskState,
+ worker: &dyn WorkerTaskContext,
) {
let (path, digest_str) = datastore.chunk_path(digest);
let check_abort = |pos: usize| -> Result<(), Error> {
if pos & 1023 == 0 {
verify_worker.worker.check_abort()?;
- crate::tools::fail_on_shutdown()?;
+ verify_worker.worker.fail_on_shutdown()?;
}
Ok(())
};
for (pos, _) in chunk_list {
verify_worker.worker.check_abort()?;
- crate::tools::fail_on_shutdown()?;
+ verify_worker.worker.fail_on_shutdown()?;
let info = index.chunk_info(pos).unwrap();
let mut verify_result = VerifyState::Ok;
for info in manifest.files() {
- let result = proxmox::try_block!({
+ let result = proxmox_lang::try_block!({
task_log!(verify_worker.worker, " check {}", info.filename);
match archive_type(&info.filename)? {
ArchiveType::FixedIndex => verify_fixed_index(verify_worker, &backup_dir, info),
});
verify_worker.worker.check_abort()?;
- crate::tools::fail_on_shutdown()?;
+ verify_worker.worker.fail_on_shutdown()?;
if let Err(err) = result {
task_log!(
match outdated_after {
None => false, // never re-verify if ignored and no max age
Some(max_age) => {
- let now = proxmox::tools::time::epoch_i64();
+ let now = proxmox_time::epoch_i64();
let days_since_last_verify = (now - last_verify.upid.starttime) / 86400;
days_since_last_verify > max_age