diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index de1c32538bc..1bb036495de 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -1251,7 +1251,7 @@ class JobWrapper(object, HasResourceParameters): if job.states.ERROR == final_job_state: dataset.blurb = "error" dataset.mark_unhidden() - elif not purged and dataset.has_data(): + elif not purged: # If the tool was expected to set the extension, attempt to retrieve it if dataset.ext == 'auto': dataset.extension = context.get('ext', 'data') @@ -1299,7 +1299,7 @@ class JobWrapper(object, HasResourceParameters): except Exception: dataset.set_peek() else: - # Handle an empty dataset. + # Handle purged datasets. dataset.blurb = "empty" if dataset.ext == 'auto': dataset.extension = context.get('ext', 'txt') diff --git a/lib/galaxy/objectstore/__init__.py b/lib/galaxy/objectstore/__init__.py index dc0c25668b6..8144f8167df 100644 --- a/lib/galaxy/objectstore/__init__.py +++ b/lib/galaxy/objectstore/__init__.py @@ -10,6 +10,7 @@ import os import random import shutil import threading +import time from xml.etree import ElementTree try: @@ -358,7 +359,7 @@ class DiskObjectStore(ObjectStore): def empty(self, obj, **kwargs): """Override `ObjectStore`'s stub by checking file size on disk.""" - return os.path.getsize(self.get_filename(obj, **kwargs)) == 0 + return self.size(obj, **kwargs) == 0 def size(self, obj, **kwargs): """Override `ObjectStore`'s stub by return file size on disk. @@ -367,7 +368,14 @@ class DiskObjectStore(ObjectStore): """ if self.exists(obj, **kwargs): try: - return os.path.getsize(self.get_filename(obj, **kwargs)) + filepath = self.get_filename(obj, **kwargs) + for _ in range(0, 2): + size = os.path.getsize(filepath) + if size != 0: + break + # May be legitimately 0, or there may be an issue with the FS / kernel, so we try again + time.sleep(0.01) + return size except OSError: return 0 else: