Optimize the logs archiving worker to not issue extremely long queries
Fixes https://jira.coreos.com/browse/QUAY-1371
This commit is contained in:
parent
2bebea23f7
commit
91e9fe8050
3 changed files with 79 additions and 32 deletions
60
workers/test/test_logrotateworker.py
Normal file
60
workers/test/test_logrotateworker.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from data import model
|
||||
from data.database import LogEntry3
|
||||
from workers.logrotateworker import LogRotateWorker
|
||||
|
||||
from test.fixtures import *
|
||||
|
||||
|
||||
def test_logrotateworker(initialized_db):
|
||||
worker = LogRotateWorker()
|
||||
logs = list(LogEntry3.select())
|
||||
|
||||
# Ensure there are logs.
|
||||
assert logs
|
||||
|
||||
# Ensure we don't find any to archive that are new.
|
||||
assert not worker._perform_archiving(LogEntry3, datetime.utcnow() - timedelta(weeks=6))
|
||||
assert len(list(LogEntry3.select())) == len(logs)
|
||||
|
||||
# Archive all the logs.
|
||||
assert worker._perform_archiving(LogEntry3, datetime.utcnow() + timedelta(days=1))
|
||||
|
||||
# Ensure all the logs were archived.
|
||||
assert not list(LogEntry3.select())
|
||||
|
||||
|
||||
def test_logrotateworker_withcutoff(initialized_db):
|
||||
# Delete all existing logs.
|
||||
LogEntry3.delete().execute()
|
||||
|
||||
# Create a new set of logs.
|
||||
start_timestamp = datetime.now()
|
||||
for day in range(0, 100):
|
||||
model.log.log_action('push_repo', 'devtable', timestamp=start_timestamp + timedelta(days=day))
|
||||
|
||||
logs = list(LogEntry3.select())
|
||||
|
||||
# Sort and find a midpoint in the logs.
|
||||
logs.sort(key=lambda l: l.datetime)
|
||||
|
||||
midpoint = logs[0:len(logs)/2]
|
||||
assert midpoint
|
||||
assert len(midpoint) < len(logs)
|
||||
|
||||
# Archive the earlier logs.
|
||||
worker = LogRotateWorker()
|
||||
assert worker._perform_archiving(LogEntry3, midpoint[-1].datetime)
|
||||
|
||||
# Ensure the earlier logs were archived.
|
||||
for log in midpoint:
|
||||
try:
|
||||
LogEntry3.get(id=log.id)
|
||||
assert False, "Found unexpected log"
|
||||
except LogEntry3.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Ensure the later logs were not.
|
||||
for log in logs[len(logs)/2:]:
|
||||
LogEntry3.get(id=log.id)
|
Reference in a new issue