From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 99E516539B for ; Mon, 7 Mar 2022 09:13:36 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8B58C248B3 for ; Mon, 7 Mar 2022 09:13:36 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 6583E248A9 for ; Mon, 7 Mar 2022 09:13:32 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 3A82D46280 for ; Mon, 7 Mar 2022 09:13:32 +0100 (CET) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Mon, 7 Mar 2022 09:13:30 +0100 Message-Id: <20220307081331.714295-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.153 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pbs-devel] [PATCH proxmox-backup 1/2] tools: zfs_dataset_stats: remove dataset <-> obset file mapping on error 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: , X-List-Received-Date: Mon, 07 Mar 2022 08:13:36 -0000 this can only real fail for two reasons: * the format is wrong: this should not happen unless the format changed, then it will happen every time * the file can't be read: this can happen if a user deletes and recreates a dataset manually, since the mapped file does not exist anymore but the dataset does for the second case, delete the mapping from the hashmap, so that the next call will refresh the mapping with the correct file Signed-off-by: Dominik Csapak --- src/tools/disks/zfs.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/tools/disks/zfs.rs b/src/tools/disks/zfs.rs index 9bca0297..a02baa00 100644 --- a/src/tools/disks/zfs.rs +++ b/src/tools/disks/zfs.rs @@ -198,6 +198,14 @@ pub fn zfs_dataset_stats(dataset: &str) -> Result { } let (pool, objset_id) = mapping.ok_or_else(|| format_err!("could not find objset id for dataset"))?; - let (_, stat) = parse_objset_stat(&pool, &objset_id)?; - Ok(stat) + + match parse_objset_stat(&pool, &objset_id) { + Ok((_, stat)) => Ok(stat), + Err(err) => { + // on error remove dataset from map, it probably vanished or the + // mapping was incorrect + ZFS_DATASET_OBJSET_MAP.lock().unwrap().remove(dataset); + Err(err) + } + } } -- 2.30.2