diff --git a/client/src/components/Libraries/LibraryFolder/TopToolbar/FolderTopBar.vue b/client/src/components/Libraries/LibraryFolder/TopToolbar/FolderTopBar.vue index cfdd97f1c429..41353ebb30d0 100644 --- a/client/src/components/Libraries/LibraryFolder/TopToolbar/FolderTopBar.vue +++ b/client/src/components/Libraries/LibraryFolder/TopToolbar/FolderTopBar.vue @@ -210,6 +210,9 @@ export default { // logic from legacy code return !!(this.contains_file_or_folder && Galaxy.user); }, + totalRows: function () { + return this.metadata?.total_rows ?? 0; + }, }, created() { const Galaxy = getGalaxyInstance(); @@ -241,7 +244,8 @@ export default { const selected = await this.services.getFilteredFolderContents( this.folder_id, this.unselected, - this.$parent.searchText + this.$parent.searchText, + this.totalRows ); this.$emit("setBusy", false); return selected; diff --git a/client/src/components/Libraries/LibraryFolder/services.js b/client/src/components/Libraries/LibraryFolder/services.js index 7b59d871bbde..c94c76135eeb 100644 --- a/client/src/components/Libraries/LibraryFolder/services.js +++ b/client/src/components/Libraries/LibraryFolder/services.js @@ -30,12 +30,13 @@ export class Services { } } - async getFilteredFolderContents(id, excluded, searchText) { + async getFilteredFolderContents(id, excluded, searchText, limit) { // The intent of this method is to get folder contents applying - // seachText filters only; we explicitly set limit to 0 + // seachText filters only; limit should match the total number of + // items in the folder, so that all items are returned. const config = { params: { - limit: 0, + limit, }, }; searchText = searchText?.trim(); diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index df9a6fafa687..d63ba30916df 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -2005,13 +2005,13 @@ def fail(message=job.info, exception=None): # Once datasets are collected, set the total dataset size (includes extra files) for dataset_assoc in job.output_datasets: dataset = dataset_assoc.dataset.dataset - if not dataset.purged: - # assume all datasets in a job get written to the same objectstore - quota_source_info = dataset.quota_source_info - collected_bytes += dataset.set_total_size() - else: + # assume all datasets in a job get written to the same objectstore + quota_source_info = dataset.quota_source_info + collected_bytes += dataset.set_total_size() + if dataset.purged: # Purge, in case job wrote directly to object store dataset.full_delete() + collected_bytes = 0 user = job.user if user and collected_bytes > 0 and quota_source_info is not None and quota_source_info.use: diff --git a/lib/galaxy/model/store/__init__.py b/lib/galaxy/model/store/__init__.py index 59438bd5d920..d093e3c24838 100644 --- a/lib/galaxy/model/store/__init__.py +++ b/lib/galaxy/model/store/__init__.py @@ -668,9 +668,9 @@ def handle_dataset_object_edit(dataset_instance, dataset_attrs): assert file_source_root dataset_extra_files_path = os.path.join(file_source_root, dataset_extra_files_path) persist_extra_files(self.object_store, dataset_extra_files_path, dataset_instance) - # Don't trust serialized file size - dataset_instance.dataset.file_size = None - dataset_instance.dataset.set_total_size() # update the filesize record in the database + # Only trust file size if the dataset is purged. If we keep the data we should check the file size. + dataset_instance.dataset.file_size = None + dataset_instance.dataset.set_total_size() # update the filesize record in the database if dataset_instance.deleted: dataset_instance.dataset.deleted = True