]>
Commit | Line | Data |
---|---|---|
f7d4e4b5 | 1 | use anyhow::{bail, Error}; |
f3832b63 | 2 | |
f3832b63 DM |
3 | extern crate proxmox_backup; |
4 | ||
5 | extern crate tokio; | |
6 | extern crate nix; | |
7 | ||
51f0ab1e | 8 | use proxmox::try_block; |
b9700a9f | 9 | use proxmox::tools::fs::CreateOptions; |
17ff2cb0 | 10 | |
67a5cf47 | 11 | use pbs_api_types::{Authid, UPID}; |
0fd55b08 | 12 | use pbs_tools::{task_log, task::WorkerTaskContext}; |
67a5cf47 | 13 | |
1ec0d70d | 14 | use proxmox_rest_server::{CommandoSocket, WorkerTask}; |
f3832b63 | 15 | |
b9700a9f | 16 | fn 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 | 36 | fn 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 | } |