Merge pull request #14340 from mvdbeek/dont_hit_disk_in_serializer

[22.05] Don't hit object store when getting size
This commit is contained in:
Dannon
2022-07-21 16:13:44 -04:00
committed by GitHub
5 changed files with 16 additions and 11 deletions
+3 -3
View File
@@ -190,7 +190,7 @@ class DatasetSerializer(base.ModelSerializer[DatasetManager], deletable.Purgable
"extra_files_path": self.serialize_extra_files_path,
"permissions": self.serialize_permissions,
"total_size": lambda item, key, **context: int(item.get_total_size()),
"file_size": lambda item, key, **context: int(item.get_size()),
"file_size": lambda item, key, **context: int(item.get_size(calculate_size=False)),
}
self.serializers.update(serializers)
@@ -522,9 +522,9 @@ class _UnflattenedMetadataDatasetAssociationSerializer(base.ModelSerializer[T],
"extra_files_path": self._proxy_to_dataset(serializer=self.dataset_serializer.serialize_extra_files_path),
"permissions": self._proxy_to_dataset(serializer=self.dataset_serializer.serialize_permissions),
# TODO: do the sizes proxy accurately/in the same way?
"size": lambda item, key, **context: int(item.get_size()),
"size": lambda item, key, **context: int(item.get_size(calculate_size=False)),
"file_size": lambda item, key, **context: self.serializers["size"](item, key, **context),
"nice_size": lambda item, key, **context: item.get_size(nice_size=True),
"nice_size": lambda item, key, **context: item.get_size(nice_size=True, calculate_size=False),
# common to lddas and hdas - from mapping.py
"copied_from_history_dataset_association_id": self.serialize_id,
"copied_from_library_dataset_dataset_association_id": self.serialize_id,
+1 -1
View File
@@ -242,7 +242,7 @@ class LibraryDatasetsManager(datasets.DatasetAssociationManager):
rval["deleted"] = ld.deleted
rval["folder_id"] = f"F{rval['folder_id']}"
rval["full_path"] = full_path
rval["file_size"] = util.nice_size(int(ldda.get_size()))
rval["file_size"] = util.nice_size(int(ldda.get_size(calculate_size=False)))
rval["date_uploaded"] = ldda.create_time.isoformat()
rval["update_time"] = ldda.update_time.isoformat()
rval["can_user_modify"] = trans.user_is_admin or trans.app.security_agent.can_modify_library_item(
+8 -5
View File
@@ -3568,18 +3568,21 @@ class Dataset(Base, StorableObject, Serializable, _HasTable):
else:
return self.object_store.size(self)
def get_size(self, nice_size=False):
def get_size(self, nice_size=False, calculate_size=True):
"""Returns the size of the data on disk"""
if self.file_size:
if nice_size:
return galaxy.util.nice_size(self.file_size)
else:
return self.file_size
else:
elif calculate_size:
# Hopefully we only reach this branch in sessionless mode
if nice_size:
return galaxy.util.nice_size(self._calculate_size())
else:
return self._calculate_size()
else:
return self.file_size or 0
def set_size(self, no_extra_files=False):
"""Sets the size of the data on disk.
@@ -4018,11 +4021,11 @@ class DatasetInstance(UsesCreateAndUpdateTime, _HasTable):
self.clear_associated_files()
_get_datatypes_registry().change_datatype(self, new_ext)
def get_size(self, nice_size=False):
def get_size(self, nice_size=False, calculate_size=True):
"""Returns the size of the data on disk"""
if nice_size:
return galaxy.util.nice_size(self.dataset.get_size())
return self.dataset.get_size()
return galaxy.util.nice_size(self.dataset.get_size(calculate_size=calculate_size))
return self.dataset.get_size(calculate_size=calculate_size)
def set_size(self, **kwds):
"""Sets and gets the size of the data on disk"""
@@ -357,7 +357,9 @@ class LibraryDatasetsController(BaseGalaxyAPIController, UsesVisualizationMixin,
trans.sa_session.flush()
rval = trans.security.encode_all_ids(library_dataset.to_dict())
nice_size = util.nice_size(int(library_dataset.library_dataset_dataset_association.get_size()))
nice_size = util.nice_size(
int(library_dataset.library_dataset_dataset_association.get_size(calculate_size=False))
)
rval["file_size"] = nice_size
rval["update_time"] = library_dataset.update_time.strftime("%Y-%m-%d %I:%M %p")
rval["deleted"] = library_dataset.deleted
@@ -128,7 +128,7 @@ class LibraryFolderContentsService(ServiceBase, UsesLibraryMixinItems):
current_user_roles, content_item.library_dataset_dataset_association.dataset
)
)
raw_size = int(content_item.library_dataset_dataset_association.get_size())
raw_size = int(content_item.library_dataset_dataset_association.get_size(calculate_size=False))
nice_size = util.nice_size(raw_size)
update_time = content_item.library_dataset_dataset_association.update_time.isoformat()