From 6a250fe5180e45da568c03ae4f62a503b542d465 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 20 Nov 2023 11:19:59 +0200 Subject: [PATCH] Deleting old versions on versionless add_scores endpoint. --- engineapi/engineapi/actions.py | 22 ++++++++++++++++++++++ engineapi/engineapi/routes/leaderboard.py | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/engineapi/engineapi/actions.py b/engineapi/engineapi/actions.py index 375e1468..c700b172 100644 --- a/engineapi/engineapi/actions.py +++ b/engineapi/engineapi/actions.py @@ -1935,3 +1935,25 @@ def get_leaderboard_version_scores( query = query.offset(offset) return query + + +def delete_previous_versions( + db_session: Session, + leaderboard_id: uuid.UUID, + threshold_version_number: int, +) -> int: + """ + Delete old leaderboard versions + """ + + versions_to_delete = ( + db_session.query(LeaderboardVersion) + .filter(LeaderboardVersion.leaderboard_id == leaderboard_id) + .filter(LeaderboardVersion.version_number < threshold_version_number) + ) + + num_deleted = versions_to_delete.delete(synchronize_session=False) + + db_session.commit() + + return num_deleted diff --git a/engineapi/engineapi/routes/leaderboard.py b/engineapi/engineapi/routes/leaderboard.py index f9bc4ef1..b3ac2508 100644 --- a/engineapi/engineapi/routes/leaderboard.py +++ b/engineapi/engineapi/routes/leaderboard.py @@ -675,6 +675,16 @@ async def leaderboard_push_scores( logger.error(f"Error while updating leaderboard version: {e}") raise EngineHTTPException(status_code=500, detail="Internal server error") + try: + actions.delete_previous_versions( + db_session=db_session, + leaderboard_id=leaderboard_id, + threshold_version_number=new_version.version_number, + ) + except Exception as e: + logger.error(f"Error while deleting leaderboard versions: {e}") + raise EngineHTTPException(status_code=500, detail="Internal server error") + result = [ data.LeaderboardScore( leaderboard_id=score["leaderboard_id"],