@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+24
+2
src/__phutil_library_map__.php
··· 845 845 'DrydockLeaseWorker' => 'applications/drydock/worker/DrydockLeaseWorker.php', 846 846 'DrydockLog' => 'applications/drydock/storage/DrydockLog.php', 847 847 'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php', 848 + 'DrydockLogGarbageCollector' => 'applications/drydock/garbagecollector/DrydockLogGarbageCollector.php', 848 849 'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php', 849 850 'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php', 850 851 'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php', ··· 4586 4587 'PhabricatorPolicyInterface', 4587 4588 ), 4588 4589 'DrydockLogController' => 'DrydockController', 4590 + 'DrydockLogGarbageCollector' => 'PhabricatorGarbageCollector', 4589 4591 'DrydockLogListController' => 'DrydockLogController', 4590 4592 'DrydockLogListView' => 'AphrontView', 4591 4593 'DrydockLogQuery' => 'DrydockQuery',
+22
src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php
··· 1 + <?php 2 + 3 + final class DrydockLogGarbageCollector 4 + extends PhabricatorGarbageCollector { 5 + 6 + public function collectGarbage() { 7 + $log_table = new DrydockLog(); 8 + $conn_w = $log_table->establishConnection('w'); 9 + 10 + $now = PhabricatorTime::getNow(); 11 + $ttl = phutil_units('30 days in seconds'); 12 + 13 + queryfx( 14 + $conn_w, 15 + 'DELETE FROM %T WHERE epoch <= %d LIMIT 100', 16 + $log_table->getTableName(), 17 + $now - $ttl); 18 + 19 + return ($conn_w->getAffectedRows() == 100); 20 + } 21 + 22 + }