From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 6A5711FF135 for ; Thu, 02 Jul 2026 17:00:17 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 0057521461; Thu, 02 Jul 2026 17:00:17 +0200 (CEST) From: Robert Obkircher To: pbs-devel@lists.proxmox.com Subject: [PATCH proxmox v2 01/13] pbs-api-types: propagate maintenance mode parse errors Date: Thu, 2 Jul 2026 16:58:58 +0200 Message-ID: <20260702145916.360488-2-r.obkircher@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260702145916.360488-1-r.obkircher@proxmox.com> References: <20260702145916.360488-1-r.obkircher@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1783004406637 X-SPAM-LEVEL: Spam detection results: 0 DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) 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: TU72QISBTPHZH4BLTY44BG22G43M7R4F X-Message-ID-Hash: TU72QISBTPHZH4BLTY44BG22G43M7R4F X-MailFrom: r.obkircher@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: Do not silently ignore errors if the config file is invalid or contains an unrecognized mode from a future version. This also applies to set_maintenance_mode, which could previously override such modes if the enum-fallback feature was disabled. Upgrades to the new GarbageCollection maintenance mode should be fine even without this change, because it is unlikely that someone can enable it before older processes stop initiating new backups or S3 refreshes. There is however a risk that a sync job could unmount the datastore. Signed-off-by: Robert Obkircher Reviewed-by: Christian Ebner Tested-by: Christian Ebner --- pbs-api-types/src/datastore.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs index 7643b0de..8450e69f 100644 --- a/pbs-api-types/src/datastore.rs +++ b/pbs-api-types/src/datastore.rs @@ -629,18 +629,22 @@ impl DataStoreConfig { } } - pub fn get_maintenance_mode(&self) -> Option { - self.maintenance_mode.as_ref().and_then(|str| { - MaintenanceMode::deserialize(proxmox_schema::de::SchemaDeserializer::new( - str, - &MaintenanceMode::API_SCHEMA, - )) - .ok() - }) + pub fn get_maintenance_mode(&self) -> Result, Error> { + self.maintenance_mode + .as_ref() + .map(|str| { + MaintenanceMode::deserialize(proxmox_schema::de::SchemaDeserializer::new( + str, + &MaintenanceMode::API_SCHEMA, + )) + .map_err(|e| format_err!("failed to parse maintenance mode: {e}")) + }) + .transpose() } pub fn set_maintenance_mode(&mut self, new_mode: Option) -> Result<(), Error> { - let current_type = self.get_maintenance_mode().map(|mode| mode.ty); + // propagate parse errors because they could indicate a new type variant + let current_type = self.get_maintenance_mode()?.map(|mode| mode.ty); let new_type = new_mode.as_ref().map(|mode| mode.ty); match current_type { -- 2.47.3