From d05d8f65589654448861225c3ec3f349d09c2354 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 23 Apr 2020 13:54:34 -0700 Subject: [PATCH] Add a very forgiving GC for Differential viewstate information Summary: Ref T13455. Viewstates are fairly small and will probably grow less quickly than the changeset table, but the data is also not important to retain in the long term: if you revisit a change several months after hiding some files, it's fine if we've forgotten that you adjusted the view parameters. Add a GC with a long default collection policy (180 days) so installs can manage the size of this table if it becomes necessary. Test Plan: Ran via `bin/garbage` to adjust the GC policy and collect viewstates. Maniphest Tasks: T13455 Differential Revision: https://secure.phabricator.com/D21164 --- src/__phutil_library_map__.php | 2 ++ .../DifferentialViewStateGarbageCollector.php | 29 +++++++++++++++++++ .../storage/DifferentialViewState.php | 3 ++ 3 files changed, 34 insertions(+) create mode 100644 src/applications/differential/garbagecollector/DifferentialViewStateGarbageCollector.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 0ef10f04ea..1618f2078c 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -715,6 +715,7 @@ phutil_register_library_map(array( 'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php', 'DifferentialUpdateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialUpdateRevisionConduitAPIMethod.php', 'DifferentialViewState' => 'applications/differential/storage/DifferentialViewState.php', + 'DifferentialViewStateGarbageCollector' => 'applications/differential/garbagecollector/DifferentialViewStateGarbageCollector.php', 'DifferentialViewStateQuery' => 'applications/differential/query/DifferentialViewStateQuery.php', 'DiffusionAuditorDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorDatasource.php', 'DiffusionAuditorFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorFunctionDatasource.php', @@ -6803,6 +6804,7 @@ phutil_register_library_map(array( 'DifferentialDAO', 'PhabricatorPolicyInterface', ), + 'DifferentialViewStateGarbageCollector' => 'PhabricatorGarbageCollector', 'DifferentialViewStateQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'DiffusionAuditorDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 'DiffusionAuditorFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', diff --git a/src/applications/differential/garbagecollector/DifferentialViewStateGarbageCollector.php b/src/applications/differential/garbagecollector/DifferentialViewStateGarbageCollector.php new file mode 100644 index 0000000000..e862de22f1 --- /dev/null +++ b/src/applications/differential/garbagecollector/DifferentialViewStateGarbageCollector.php @@ -0,0 +1,29 @@ +establishConnection('w'); + + queryfx( + $conn, + 'DELETE FROM %R WHERE dateModified < %d LIMIT 100', + $table, + $this->getGarbageEpoch()); + + return ($conn->getAffectedRows() == 100); + } + +} diff --git a/src/applications/differential/storage/DifferentialViewState.php b/src/applications/differential/storage/DifferentialViewState.php index 763edd8460..101061f379 100644 --- a/src/applications/differential/storage/DifferentialViewState.php +++ b/src/applications/differential/storage/DifferentialViewState.php @@ -23,6 +23,9 @@ final class DifferentialViewState 'key_object' => array( 'columns' => array('objectPHID'), ), + 'key_modified' => array( + 'columns' => array('dateModified'), + ), ), ) + parent::getConfiguration(); } -- 2.51.2