all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox-backup] fix #4823: datastore: ignore vanished files when walking directory
@ 2023-09-05  9:37 Gabriel Goller
  2023-09-07 15:05 ` Thomas Lamprecht
  0 siblings, 1 reply; 5+ messages in thread
From: Gabriel Goller @ 2023-09-05  9:37 UTC (permalink / raw)
  To: pbs-devel

When walking through a datastore on a GC run, it can
happen that the snapshot is deleted, and then walked over.
For example:
- read dir entry for group
- walk entries (snapshots)
- snapshot X is removed/pruned
- walking reaches snapshot X, but ENOENT
Previously we bailed here, now we just ignore it.

Signed-off-by: Gabriel Goller <g.goller@proxmox.com>
---
 pbs-datastore/src/datastore.rs | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs
index fe75d9b5..d135ad90 100644
--- a/pbs-datastore/src/datastore.rs
+++ b/pbs-datastore/src/datastore.rs
@@ -869,18 +869,24 @@ impl DataStore {
         let handle_entry_err = |err: walkdir::Error| {
             if let Some(inner) = err.io_error() {
                 if let Some(path) = err.path() {
-                    if inner.kind() == io::ErrorKind::PermissionDenied {
-                        // only allow to skip ext4 fsck directory, avoid GC if, for example,
-                        // a user got file permissions wrong on datastore rsync to new server
-                        if err.depth() > 1 || !path.ends_with("lost+found") {
-                            bail!("cannot continue garbage-collection safely, permission denied on: {:?}", path)
+                    match inner.kind() {
+                        io::ErrorKind::PermissionDenied => {
+                            // only allow to skip ext4 fsck directory, avoid GC if, for example,
+                            // a user got file permissions wrong on datastore rsync to new server
+                            if err.depth() > 1 || !path.ends_with("lost+found") {
+                                bail!("cannot continue garbage-collection safely, permission denied on: {:?}", path)
+                            }
+                        }
+                        io::ErrorKind::NotFound => {
+                            // ignore vanished file
+                        }
+                        _ => {
+                            bail!(
+                                "unexpected error on datastore traversal: {} - {:?}",
+                                inner,
+                                path
+                            )
                         }
-                    } else {
-                        bail!(
-                            "unexpected error on datastore traversal: {} - {:?}",
-                            inner,
-                            path
-                        )
                     }
                 } else {
                     bail!("unexpected error on datastore traversal: {}", inner)
-- 
2.39.2





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-09-08 12:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-05  9:37 [pbs-devel] [PATCH proxmox-backup] fix #4823: datastore: ignore vanished files when walking directory Gabriel Goller
2023-09-07 15:05 ` Thomas Lamprecht
2023-09-08  7:41   ` Gabriel Goller
2023-09-08  9:36     ` Thomas Lamprecht
2023-09-08 12:56       ` Gabriel Goller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal