1 use anyhow
::{bail, Error}
;
3 extern crate proxmox_backup
;
8 use proxmox
::try_block
;
9 use proxmox
::tools
::fs
::CreateOptions
;
11 use pbs_api_types
::{Authid, UPID}
;
12 use pbs_tools
::{task_log, task::WorkerTaskContext}
;
14 use proxmox_rest_server
::{CommandoSocket, WorkerTask}
;
16 fn garbage_collection(worker
: &WorkerTask
) -> Result
<(), Error
> {
18 task_log
!(worker
, "start garbage collection");
21 worker
.check_abort()?
;
23 task_log
!(worker
, "progress {}", i
);
25 std
::thread
::sleep(std
::time
::Duration
::from_millis(10));
28 task_log
!(worker
, "end garbage collection");
36 fn worker_task_abort() -> Result
<(), Error
> {
37 let uid
= nix
::unistd
::Uid
::current();
38 let gid
= nix
::unistd
::Gid
::current();
40 let file_opts
= CreateOptions
::new().owner(uid
).group(gid
);
41 proxmox_rest_server
::init_worker_tasks("./target/tasklogtestdir".into(), file_opts
.clone())?
;
43 use std
::sync
::{Arc, Mutex}
;
45 let errmsg
: Arc
<Mutex
<Option
<String
>>> = Arc
::new(Mutex
::new(None
));
46 let errmsg1
= errmsg
.clone();
48 let rt
= tokio
::runtime
::Runtime
::new().unwrap();
49 rt
.block_on(async
move {
51 let mut commando_sock
= CommandoSocket
::new(
52 proxmox_rest_server
::our_ctrl_sock(), nix
::unistd
::Gid
::current());
54 let init_result
: Result
<(), Error
> = try_block
!({
55 proxmox_rest_server
::register_task_control_commands(&mut commando_sock
)?
;
56 proxmox_rest_server
::server_state_init()?
;
60 if let Err(err
) = init_result
{
61 eprintln
!("unable to start daemon - {}", err
);
65 if let Err(err
) = commando_sock
.spawn() {
66 eprintln
!("unable to spawn command socket - {}", err
);
70 let errmsg
= errmsg1
.clone();
71 let res
= WorkerTask
::new_thread(
74 Authid
::root_auth_id().to_string(),
77 println
!("WORKER {}", worker
);
79 let result
= garbage_collection(&worker
);
80 proxmox_rest_server
::request_shutdown();
82 if let Err(err
) = result
{
83 println
!("got expected error: {}", err
);
85 let mut data
= errmsg
.lock().unwrap();
86 *data
= Some(String
::from("thread finished - seems abort did not work as expected"));
95 println
!("unable to start worker - {}", err
);
98 println
!("WORKER: {}", wid
);
99 proxmox_rest_server
::abort_worker_async(wid
.parse
::<UPID
>().unwrap());
100 proxmox_rest_server
::wait_for_local_worker(&wid
).await
.unwrap();
105 let data
= errmsg
.lock().unwrap();
107 Some(ref err
) => bail
!("Error: {}", err
),