From fc8594aee551a90e86dd70a7f895e269456efa2a Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Mon, 11 Jul 2022 11:46:51 +0300 Subject: [PATCH] Avoid race condition in disk object store delete Fixes https://sentry.galaxyproject.org/share/issue/f48a997e238e46519b67d455ac9bf8bd/: ``` /corral4/main/objects/b/e/1/dataset_be145ee3-580b-48c3-8a40-e55929d3bb81.dat delete error [Errno 2] No such file or directory: '/corral4/main/objects/b/e/1/dataset_be145ee3-580b-48c3-8a40-e55929d3bb81.dat' ``` --- lib/galaxy/objectstore/__init__.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/objectstore/__init__.py b/lib/galaxy/objectstore/__init__.py index 62c531ffaae..2455132fa10 100644 --- a/lib/galaxy/objectstore/__init__.py +++ b/lib/galaxy/objectstore/__init__.py @@ -653,9 +653,11 @@ class DiskObjectStore(ConcreteObjectStore): if entire_dir and (extra_dir or obj_dir): shutil.rmtree(path) return True - if self._exists(obj, **kwargs): - os.remove(path) - return True + os.remove(path) + return True + except FileNotFoundError: + # Absolutely possible that a delete request races, but that's "fine". + return True except OSError as ex: log.critical(f"{self.__get_filename(obj, **kwargs)} delete error {ex}") return False