]> git.proxmox.com Git - proxmox-backup.git/blame - tests/worker-task-abort.rs
proxmox-rest-server: improve logging
[proxmox-backup.git] / tests / worker-task-abort.rs
CommitLineData
f7d4e4b5 1use anyhow::{bail, Error};
f3832b63 2
f3832b63
DM
3extern crate proxmox_backup;
4
5extern crate tokio;
6extern crate nix;
7
51f0ab1e 8use proxmox::try_block;
b9700a9f 9use proxmox::tools::fs::CreateOptions;
17ff2cb0 10
67a5cf47 11use pbs_api_types::{Authid, UPID};
0fd55b08 12use pbs_tools::{task_log, task::WorkerTaskContext};
67a5cf47 13
1ec0d70d 14use proxmox_rest_server::{CommandoSocket, WorkerTask};
f3832b63 15
b9700a9f 16fn garbage_collection(worker: &WorkerTask) -> Result<(), Error> {
f3832b63 17
1ec0d70d 18 task_log!(worker, "start garbage collection");
f3832b63
DM
19
20 for i in 0..50 {
c8449217 21 worker.check_abort()?;
f3832b63 22
1ec0d70d 23 task_log!(worker, "progress {}", i);
f3832b63
DM
24
25 std::thread::sleep(std::time::Duration::from_millis(10));
26 }
27
1ec0d70d 28 task_log!(worker, "end garbage collection");
f3832b63 29
44288184 30 Ok(())
f3832b63
DM
31}
32
33
36c6e7bb
DM
34#[test]
35#[ignore]
f3832b63 36fn worker_task_abort() -> Result<(), Error> {
b9700a9f
DM
37 let uid = nix::unistd::Uid::current();
38 let gid = nix::unistd::Gid::current();
1ec0d70d 39
b9700a9f
DM
40 let file_opts = CreateOptions::new().owner(uid).group(gid);
41 proxmox_rest_server::init_worker_tasks("./target/tasklogtestdir".into(), file_opts.clone())?;
1ec0d70d 42
f3832b63
DM
43 use std::sync::{Arc, Mutex};
44
45 let errmsg: Arc<Mutex<Option<String>>> = Arc::new(Mutex::new(None));
46 let errmsg1 = errmsg.clone();
47
0bfcea6a 48 let rt = tokio::runtime::Runtime::new().unwrap();
96839893 49 rt.block_on(async move {
f3832b63 50
b9700a9f
DM
51 let mut commando_sock = CommandoSocket::new(
52 proxmox_rest_server::our_ctrl_sock(), nix::unistd::Gid::current());
a68768cf 53
f3832b63 54 let init_result: Result<(), Error> = try_block!({
b9700a9f 55 proxmox_rest_server::register_task_control_commands(&mut commando_sock)?;
38da8ca1 56 proxmox_rest_server::catch_shutdown_and_reload_signals()?;
f3832b63
DM
57 Ok(())
58 });
59
60 if let Err(err) = init_result {
61 eprintln!("unable to start daemon - {}", err);
96839893 62 return;
f3832b63
DM
63 }
64
36c6e7bb
DM
65 if let Err(err) = commando_sock.spawn() {
66 eprintln!("unable to spawn command socket - {}", err);
67 return;
68 }
69
f3832b63 70 let errmsg = errmsg1.clone();
b9700a9f 71 let res = WorkerTask::new_thread(
e7cb4dc5
WB
72 "garbage_collection",
73 None,
b9700a9f 74 Authid::root_auth_id().to_string(),
e7cb4dc5
WB
75 true,
76 move |worker| {
77 println!("WORKER {}", worker);
78
79 let result = garbage_collection(&worker);
fd6d2438 80 proxmox_rest_server::request_shutdown();
e7cb4dc5
WB
81
82 if let Err(err) = result {
83 println!("got expected error: {}", err);
84 } else {
85 let mut data = errmsg.lock().unwrap();
86 *data = Some(String::from("thread finished - seems abort did not work as expected"));
87 }
88
89 Ok(())
90 },
91 );
f3832b63
DM
92
93 match res {
94 Err(err) => {
95 println!("unable to start worker - {}", err);
96 }
97 Ok(wid) => {
98 println!("WORKER: {}", wid);
b9700a9f
DM
99 proxmox_rest_server::abort_worker_async(wid.parse::<UPID>().unwrap());
100 proxmox_rest_server::wait_for_local_worker(&wid).await.unwrap();
36c6e7bb 101 }
f3832b63 102 }
96839893 103 });
f3832b63
DM
104
105 let data = errmsg.lock().unwrap();
106 match *data {
107 Some(ref err) => bail!("Error: {}", err),
108 None => {},
109 }
110
111 Ok(())
112}