From 06f92725029070efe3518c9f2f193fec3576ec98 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 1 Oct 2015 08:09:27 -0700 Subject: [PATCH] Garbage collect Drydock logs after 30 days Summary: Ref T9252. Drydock logs are almost exclusively useful as a diagnostic tool for debugging immediate problems, so GC them fairly aggressively. (I expect 99% of the usefulness of these logs to be within the first 24 hours, basically "why isn't my thing working". I can't really think of any cases where having old logs would be useful.) Test Plan: - Ran GC, saw it hit the log table (with no effect). - Changed TTL from 30 days to 30 seconds, ran GC, saw it wipe recent logs. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9252 Differential Revision: https://secure.phabricator.com/D14197 --- src/__phutil_library_map__.php | 2 ++ .../DrydockLogGarbageCollector.php | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 064d80740a..804147e248 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -845,6 +845,7 @@ phutil_register_library_map(array( 'DrydockLeaseWorker' => 'applications/drydock/worker/DrydockLeaseWorker.php', 'DrydockLog' => 'applications/drydock/storage/DrydockLog.php', 'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php', + 'DrydockLogGarbageCollector' => 'applications/drydock/garbagecollector/DrydockLogGarbageCollector.php', 'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php', 'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php', 'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php', @@ -4586,6 +4587,7 @@ phutil_register_library_map(array( 'PhabricatorPolicyInterface', ), 'DrydockLogController' => 'DrydockController', + 'DrydockLogGarbageCollector' => 'PhabricatorGarbageCollector', 'DrydockLogListController' => 'DrydockLogController', 'DrydockLogListView' => 'AphrontView', 'DrydockLogQuery' => 'DrydockQuery', diff --git a/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php b/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php new file mode 100644 index 0000000000..6cae627a74 --- /dev/null +++ b/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php @@ -0,0 +1,22 @@ +establishConnection('w'); + + $now = PhabricatorTime::getNow(); + $ttl = phutil_units('30 days in seconds'); + + queryfx( + $conn_w, + 'DELETE FROM %T WHERE epoch <= %d LIMIT 100', + $log_table->getTableName(), + $now - $ttl); + + return ($conn_w->getAffectedRows() == 100); + } + +}