mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Move history audit pruning to HistroyAudit class
This commit is contained in:
@@ -1,9 +1,4 @@
|
||||
from lagom import magic_bind_to_container
|
||||
from sqlalchemy import (
|
||||
and_,
|
||||
func,
|
||||
tuple_
|
||||
)
|
||||
from sqlalchemy.orm.scoping import (
|
||||
scoped_session,
|
||||
)
|
||||
@@ -85,17 +80,6 @@ def export_history(
|
||||
@galaxy_task
|
||||
def prune_history_audit_table(sa_session: scoped_session):
|
||||
"""Prune ever growing history_audit table."""
|
||||
history_audit_table = model.HistoryAudit.table
|
||||
latest_subq = sa_session.query(
|
||||
history_audit_table.c.history_id,
|
||||
func.max(history_audit_table.c.update_time).label('max_update_time')).group_by(history_audit_table.c.history_id).subquery()
|
||||
not_latest_query = sa_session.query(
|
||||
history_audit_table.c.history_id, history_audit_table.c.update_time
|
||||
).select_from(latest_subq).join(
|
||||
history_audit_table, and_(
|
||||
history_audit_table.c.update_time < latest_subq.columns.max_update_time,
|
||||
history_audit_table.c.history_id == latest_subq.columns.history_id))
|
||||
d = history_audit_table.delete()
|
||||
timer = ExecutionTimer()
|
||||
sa_session.execute(d.where(tuple_(history_audit_table.c.history_id, history_audit_table.c.update_time).in_(not_latest_query)))
|
||||
model.HistoryAudit.prune(sa_session)
|
||||
log.debug(f"Successfully pruned history_audit table {timer}")
|
||||
|
||||
@@ -35,6 +35,7 @@ from sqlalchemy import (
|
||||
select,
|
||||
text,
|
||||
true,
|
||||
tuple_,
|
||||
type_coerce,
|
||||
types)
|
||||
from sqlalchemy.exc import OperationalError
|
||||
@@ -1850,6 +1851,21 @@ class HistoryAudit(RepresentById):
|
||||
self.history = history
|
||||
self.update_time = update_time
|
||||
|
||||
@classmethod
|
||||
def prune(cls, sa_session):
|
||||
history_audit_table = cls.table
|
||||
latest_subq = sa_session.query(
|
||||
history_audit_table.c.history_id,
|
||||
func.max(history_audit_table.c.update_time).label('max_update_time')).group_by(history_audit_table.c.history_id).subquery()
|
||||
not_latest_query = sa_session.query(
|
||||
history_audit_table.c.history_id, history_audit_table.c.update_time
|
||||
).select_from(latest_subq).join(
|
||||
history_audit_table, and_(
|
||||
history_audit_table.c.update_time < latest_subq.columns.max_update_time,
|
||||
history_audit_table.c.history_id == latest_subq.columns.history_id))
|
||||
d = history_audit_table.delete()
|
||||
sa_session.execute(d.where(tuple_(history_audit_table.c.history_id, history_audit_table.c.update_time).in_(not_latest_query)))
|
||||
|
||||
|
||||
class History(HasTags, Dictifiable, UsesAnnotations, HasName, RepresentById):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user