From c01de4a916dd2089a8f844991580ef5bd538d012 Mon Sep 17 00:00:00 2001 From: Jake Moshenko Date: Fri, 12 Sep 2014 13:13:14 -0400 Subject: [PATCH] Set redis logs entries to expire rather than to immediately delete them to make the logs archiver idempotent. --- data/buildlogs.py | 11 ++++++++--- test/testlogs.py | 4 ++-- workers/buildlogsarchiver.py | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/data/buildlogs.py b/data/buildlogs.py index 924f0cb85..9128390af 100644 --- a/data/buildlogs.py +++ b/data/buildlogs.py @@ -2,6 +2,11 @@ import redis import json from util.dynamic import import_class +from datetime import timedelta + + +ONE_DAY = timedelta(days=1) + class BuildStatusRetrievalError(Exception): pass @@ -54,11 +59,11 @@ class RedisBuildLogs(object): except redis.ConnectionError: raise BuildStatusRetrievalError('Cannot retrieve build logs') - def delete_log_entries(self, build_id): + def expire_log_entries(self, build_id): """ - Deletes the logs and status keys completely. + Sets the log entry to expire in 1 day. """ - self._redis.delete(self._logs_key(build_id)) + self._redis.expire(self._logs_key(build_id), ONE_DAY) @staticmethod diff --git a/test/testlogs.py b/test/testlogs.py index 023fd159d..7fd9eac21 100644 --- a/test/testlogs.py +++ b/test/testlogs.py @@ -199,10 +199,10 @@ class TestBuildLogs(RedisBuildLogs): else: return super(TestBuildLogs, self).get_status(build_id) - def delete_log_entries(self, build_id): + def expire_log_entries(self, build_id): if build_id == self.test_build_id: return if not self.allow_delegate: return None else: - return super(TestBuildLogs, self).delete_log_entries(build_id) + return super(TestBuildLogs, self).expire_log_entries(build_id) diff --git a/workers/buildlogsarchiver.py b/workers/buildlogsarchiver.py index f79132ab5..213481eed 100644 --- a/workers/buildlogsarchiver.py +++ b/workers/buildlogsarchiver.py @@ -44,7 +44,7 @@ def archive_redis_buildlogs(): to_archive.logs_archived = True to_archive.save() - build_logs.delete_log_entries(to_archive.uuid) + build_logs.expire_log_entries(to_archive.uuid) except RepositoryBuild.DoesNotExist: logger.debug('No more builds to archive')