Skip to content

Commit

Permalink
Fix disk uage calculation when no quota source is defined
Browse files Browse the repository at this point in the history
  • Loading branch information
mvdbeek committed Jul 7, 2023
1 parent b2f044c commit 85284d3
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions lib/galaxy/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -566,9 +566,7 @@ def stderr(self, stderr):
LEFT OUTER JOIN library_dataset_dataset_association ON dataset.id = library_dataset_dataset_association.dataset_id
WHERE dataset.id IN (SELECT dataset_id FROM per_hist_hdas)
AND library_dataset_dataset_association.id IS NULL
AND (
{dataset_condition}
)
{and_dataset_condition}
"""


Expand All @@ -577,15 +575,17 @@ def calculate_user_disk_usage_statements(user_id, quota_source_map, for_sqlite=F
statements = []
default_quota_enabled = quota_source_map.default_quota_enabled
default_exclude_ids = quota_source_map.default_usage_excluded_ids()
default_cond = "dataset.object_store_id IS NULL" if default_quota_enabled else ""
default_cond = "dataset.object_store_id IS NULL" if default_quota_enabled and default_exclude_ids else ""
exclude_cond = "dataset.object_store_id NOT IN :exclude_object_store_ids" if default_exclude_ids else ""
use_or = " OR " if (default_cond != "" and exclude_cond != "") else ""
default_usage_dataset_condition = "{default_cond} {use_or} {exclude_cond}".format(
default_cond=default_cond,
exclude_cond=exclude_cond,
use_or=use_or,
)
default_usage = UNIQUE_DATASET_USER_USAGE.format(dataset_condition=default_usage_dataset_condition)
if default_usage_dataset_condition.strip():
default_usage_dataset_condition = f"AND ( {default_usage_dataset_condition} )"
default_usage = UNIQUE_DATASET_USER_USAGE.format(and_dataset_condition=default_usage_dataset_condition)
default_usage = (
"""
UPDATE galaxy_user SET disk_usage = (%s)
Expand All @@ -602,7 +602,7 @@ def calculate_user_disk_usage_statements(user_id, quota_source_map, for_sqlite=F
# the object_store_id to quota_source_label into a temp table of values
for quota_source_label, object_store_ids in source.items():
label_usage = UNIQUE_DATASET_USER_USAGE.format(
dataset_condition="dataset.object_store_id IN :include_object_store_ids"
and_dataset_condition="AND ( dataset.object_store_id IN :include_object_store_ids )"
)
if for_sqlite:
# hacky alternative for older sqlite
Expand Down Expand Up @@ -997,16 +997,21 @@ def calculate_disk_usage_default_source(self, object_store):
assert object_store is not None
quota_source_map = object_store.get_quota_source_map()
default_quota_enabled = quota_source_map.default_quota_enabled
default_cond = "dataset.object_store_id IS NULL OR" if default_quota_enabled else ""
exclude_objectstore_ids = quota_source_map.default_usage_excluded_ids()
default_cond = "dataset.object_store_id IS NULL OR" if default_quota_enabled and exclude_objectstore_ids else ""
default_usage_dataset_condition = (
"{default_cond} dataset.object_store_id NOT IN :exclude_object_store_ids".format(
default_cond=default_cond,
(
"AND ( {default_cond} dataset.object_store_id NOT IN :exclude_object_store_ids )".format(
default_cond=default_cond,
)
)
if exclude_objectstore_ids
else ""
)
default_usage = UNIQUE_DATASET_USER_USAGE.format(dataset_condition=default_usage_dataset_condition)
default_usage = UNIQUE_DATASET_USER_USAGE.format(and_dataset_condition=default_usage_dataset_condition)
sql_calc = text(default_usage)
sql_calc = sql_calc.bindparams(bindparam("id"), bindparam("exclude_object_store_ids", expanding=True))
params = {"id": self.id, "exclude_object_store_ids": quota_source_map.default_usage_excluded_ids()}
params = {"id": self.id, "exclude_object_store_ids": exclude_objectstore_ids}
sa_session = object_session(self)
usage = sa_session.scalar(sql_calc, params)
return usage
Expand Down

0 comments on commit 85284d3

Please sign in to comment.