From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 8A09B1FF13C for ; Thu, 19 Mar 2026 12:23:36 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 910C21BB3C; Thu, 19 Mar 2026 12:23:50 +0100 (CET) Message-ID: <6c3c411e-8dac-4ca5-ae62-daab7aed1f04@proxmox.com> Date: Thu, 19 Mar 2026 12:23:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH proxmox-backup v2 2/3] fix #7400: api: gracefully handle corrupted job statefiles To: =?UTF-8?Q?Michael_K=C3=B6ppl?= , pbs-devel@lists.proxmox.com References: <20260319110318.70346-1-m.koeppl@proxmox.com> <20260319110318.70346-3-m.koeppl@proxmox.com> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <20260319110318.70346-3-m.koeppl@proxmox.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1773919351962 X-SPAM-LEVEL: Spam detection results: 0 AWL -1.005 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.408 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.819 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.903 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 Message-ID-Hash: 4MUHO4RY4YY7PBASWJ357SZNTMCAVNUO X-Message-ID-Hash: 4MUHO4RY4YY7PBASWJ357SZNTMCAVNUO X-MailFrom: c.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: one nit inline. On 3/19/26 12:02 PM, Michael Köppl wrote: > Previously, if a job statefile was empty or corrupted (e.g. due to an > I/O error or an abrupt shutdown), the JobStatus::load method would > return an error that would be propagated up, causing the endpoint to > return an error to the user, meaning users would not see any of their > jobs if a single job had a corrupted statefile. > > Instead, handle the error explicitly, logging an error message and > returning a default JobScheduleStatus such that jobs lists can still be > fetched, displaying the affected job as configured but simply missing > its last run status. > > Signed-off-by: Michael Köppl > --- > src/server/jobstate.rs | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/src/server/jobstate.rs b/src/server/jobstate.rs > index cfb0b8945..638beac3e 100644 > --- a/src/server/jobstate.rs > +++ b/src/server/jobstate.rs > @@ -305,8 +305,17 @@ pub fn compute_schedule_status( > jobname: &str, > schedule: Option<&str>, > ) -> Result { > - let job_state = JobState::load(jobtype, jobname) > - .map_err(|err| format_err!("could not open statefile for {}: {}", jobname, err))?; > + let job_state = match JobState::load(jobtype, jobname) { > + Ok(job_state) => job_state, > + Err(err) => { > + log::error!( > + "could not open statefile for {}: {} - falling back to default job schedule status", > + jobname, > + err > + ); nit: please inline `jobname` and `err` into the format string directly. While there are still a lot of per-existing occurrences without in-lining, for new code in-lining is preferred.