From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 1B8F51FF17C for ; Wed, 3 Sep 2025 16:14:13 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 29EA6F532; Wed, 3 Sep 2025 16:14:28 +0200 (CEST) From: Gabriel Goller To: pbs-devel@lists.proxmox.com Date: Wed, 3 Sep 2025 16:13:46 +0200 Message-ID: <20250903141349.268228-3-g.goller@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250903141349.268228-1-g.goller@proxmox.com> References: <20250903141349.268228-1-g.goller@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756908818638 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.006 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox 2/2] worker_task: print worker starting message and upid X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" In addition to forcing the task result (last message) to the tasklog file and syslog, also force a start message to file and syslog. When printing to syslog, also add the upid (in the tasklog the upid is already visible in th window header or the status tab). This allows us to always see the start and end log of a task in the syslog and tasklog regardless of the task's result (failure or success) and the tracing filtering. Suggested-by: Friedrich Weber Signed-off-by: Gabriel Goller --- proxmox-rest-server/src/worker_task.rs | 30 +++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/proxmox-rest-server/src/worker_task.rs b/proxmox-rest-server/src/worker_task.rs index 6840938bdb2a..e036c54f78dd 100644 --- a/proxmox-rest-server/src/worker_task.rs +++ b/proxmox-rest-server/src/worker_task.rs @@ -921,7 +921,7 @@ impl WorkerTask { let res = setup.update_active_workers(Some(&upid)); if res.is_err() { // needed to undo the insertion into WORKER_TASK_LIST above - worker.log_result(&res); + worker.log_result(&res, &upid.to_string()); res? } @@ -942,11 +942,14 @@ impl WorkerTask { { let (worker, logger) = WorkerTask::new(worker_type, worker_id, auth_id, to_stdout)?; let upid_str = worker.upid.to_string(); + let inner_upid_str = upid_str.clone(); + let inner_worker_type = worker_type.to_string(); let f = f(worker.clone()); tokio::spawn(LogContext::new(logger).scope(async move { + worker.log_start(&inner_upid_str, &inner_worker_type); let result = f.await; - worker.log_result(&result); + worker.log_result(&result, &inner_upid_str); })); Ok(upid_str) @@ -965,12 +968,15 @@ impl WorkerTask { { let (worker, logger) = WorkerTask::new(worker_type, worker_id, auth_id, to_stdout)?; let upid_str = worker.upid.to_string(); + let inner_upid_str = upid_str.clone(); + let inner_worker_type = worker_type.to_string(); let _child = std::thread::Builder::new() .name(upid_str.clone()) .spawn(move || { LogContext::new(logger).sync_scope(|| { let worker1 = worker.clone(); + worker1.log_start(&inner_upid_str, &inner_worker_type); let result = match std::panic::catch_unwind(move || f(worker1)) { Ok(r) => r, @@ -985,7 +991,7 @@ impl WorkerTask { }, }; - worker.log_result(&result); + worker.log_result(&result, &inner_upid_str); }); }); @@ -1016,8 +1022,22 @@ impl WorkerTask { } } + /// Log task start message + pub fn log_start(&self, upid: &str, worker_type: &str) { + // Write the result manually to the workertask file. We don't want to filter or process + // this message by the logging system. This also guarantees the start message will be in + // the file, regardless of the logging level. + match LogContext::current() { + Some(context) => { + context.log_unfiltered(&format!("TASK: starting {worker_type} task")); + eprintln!("TASK: starting {worker_type} task - {upid}"); + } + None => error!("error writing task start to the tasklog"), + } + } + /// Log task result, remove task from running list - pub fn log_result(&self, result: &Result<(), Error>) { + pub fn log_result(&self, result: &Result<(), Error>, upid: &str) { let state = self.create_state(result); // Write the result manually to the workertask file. We don't want to filter or process @@ -1026,7 +1046,7 @@ impl WorkerTask { match LogContext::current() { Some(context) => { context.log_unfiltered(&state.result_text()); - eprintln!("{}", &state.result_text()); + eprintln!("{} - {upid}", &state.result_text()); } None => error!("error writing task result to the tasklog"), } -- 2.47.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel