migrations/versions/e5c7a4e2df4d_remove_query_tracker_keys.py (29 lines of code) (raw):

"""remove_query_tracker_keys Revision ID: e5c7a4e2df4d Revises: 98af61feea92 Create Date: 2019-02-27 11:30:15.375318 """ from alembic import op import sqlalchemy as sa from redash import redis_connection # revision identifiers, used by Alembic. revision = "e5c7a4e2df4d" down_revision = "98af61feea92" branch_labels = None depends_on = None DONE_LIST = "query_task_trackers:done" WAITING_LIST = "query_task_trackers:waiting" IN_PROGRESS_LIST = "query_task_trackers:in_progress" def prune(list_name, keep_count, max_keys=100): count = redis_connection.zcard(list_name) if count <= keep_count: return 0 remove_count = min(max_keys, count - keep_count) keys = redis_connection.zrange(list_name, 0, remove_count - 1) redis_connection.delete(*keys) redis_connection.zremrangebyrank(list_name, 0, remove_count - 1) return remove_count def prune_all(list_name): removed = 1000 while removed > 0: removed = prune(list_name, 0) def upgrade(): prune_all(DONE_LIST) prune_all(WAITING_LIST) prune_all(IN_PROGRESS_LIST) def downgrade(): pass