Page MenuHomePhabricator

D14218.diff
No OneTemporary

D14218.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1829,6 +1829,7 @@
'PhabricatorConfigAllController' => 'applications/config/controller/PhabricatorConfigAllController.php',
'PhabricatorConfigApplication' => 'applications/config/application/PhabricatorConfigApplication.php',
'PhabricatorConfigCacheController' => 'applications/config/controller/PhabricatorConfigCacheController.php',
+ 'PhabricatorConfigCollectorsModule' => 'applications/config/module/PhabricatorConfigCollectorsModule.php',
'PhabricatorConfigColumnSchema' => 'applications/config/schema/PhabricatorConfigColumnSchema.php',
'PhabricatorConfigConfigPHIDType' => 'applications/config/phid/PhabricatorConfigConfigPHIDType.php',
'PhabricatorConfigController' => 'applications/config/controller/PhabricatorConfigController.php',
@@ -5761,6 +5762,7 @@
'PhabricatorConfigAllController' => 'PhabricatorConfigController',
'PhabricatorConfigApplication' => 'PhabricatorApplication',
'PhabricatorConfigCacheController' => 'PhabricatorConfigController',
+ 'PhabricatorConfigCollectorsModule' => 'PhabricatorConfigModule',
'PhabricatorConfigColumnSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigConfigPHIDType' => 'PhabricatorPHIDType',
'PhabricatorConfigController' => 'PhabricatorController',
diff --git a/src/applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php b/src/applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php
--- a/src/applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php
+++ b/src/applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorAuthSessionGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'auth.sessions';
+
+ public function getCollectorName() {
+ return pht('Auth Sessions');
+ }
+
+ public function hasAutomaticPolicy() {
+ return true;
+ }
+
public function collectGarbage() {
$session_table = new PhabricatorAuthSession();
$conn_w = $session_table->establishConnection('w');
diff --git a/src/applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php b/src/applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php
--- a/src/applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php
+++ b/src/applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorAuthTemporaryTokenGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'auth.tokens';
+
+ public function getCollectorName() {
+ return pht('Auth Tokens');
+ }
+
+ public function hasAutomaticPolicy() {
+ return true;
+ }
+
public function collectGarbage() {
$session_table = new PhabricatorAuthTemporaryToken();
$conn_w = $session_table->establishConnection('w');
diff --git a/src/applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php b/src/applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php
--- a/src/applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php
+++ b/src/applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorCacheGeneralGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'cache.general';
+
+ public function getCollectorName() {
+ return pht('General Cache');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('30 days in seconds');
+ }
+
public function collectGarbage() {
$key = 'gcdaemon.ttl.general-cache';
$ttl = PhabricatorEnv::getEnvConfig($key);
diff --git a/src/applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php b/src/applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php
--- a/src/applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php
+++ b/src/applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorCacheMarkupGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'cache.markup';
+
+ public function getCollectorName() {
+ return pht('Markup Cache');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('30 days in seconds');
+ }
+
public function collectGarbage() {
$key = 'gcdaemon.ttl.markup-cache';
$ttl = PhabricatorEnv::getEnvConfig($key);
diff --git a/src/applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php b/src/applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php
--- a/src/applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php
+++ b/src/applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorCacheTTLGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'cache.general.ttl';
+
+ public function getCollectorName() {
+ return pht('General Cache (TTL)');
+ }
+
+ public function hasAutomaticPolicy() {
+ return true;
+ }
+
public function collectGarbage() {
$cache = new PhabricatorKeyValueDatabaseCache();
$conn_w = $cache->establishConnection('w');
diff --git a/src/applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php b/src/applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php
--- a/src/applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php
+++ b/src/applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php
@@ -3,6 +3,16 @@
final class ConduitConnectionGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'conduit.connections';
+
+ public function getCollectorName() {
+ return pht('Conduit Connections');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('180 days in seconds');
+ }
+
public function collectGarbage() {
$key = 'gcdaemon.ttl.conduit-logs';
$ttl = PhabricatorEnv::getEnvConfig($key);
diff --git a/src/applications/conduit/garbagecollector/ConduitLogGarbageCollector.php b/src/applications/conduit/garbagecollector/ConduitLogGarbageCollector.php
--- a/src/applications/conduit/garbagecollector/ConduitLogGarbageCollector.php
+++ b/src/applications/conduit/garbagecollector/ConduitLogGarbageCollector.php
@@ -3,6 +3,16 @@
final class ConduitLogGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'conduit.logs';
+
+ public function getCollectorName() {
+ return pht('Conduit Logs');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('180 days in seconds');
+ }
+
public function collectGarbage() {
$key = 'gcdaemon.ttl.conduit-logs';
$ttl = PhabricatorEnv::getEnvConfig($key);
diff --git a/src/applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php b/src/applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php
--- a/src/applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php
+++ b/src/applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php
@@ -3,6 +3,16 @@
final class ConduitTokenGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'conduit.tokens';
+
+ public function getCollectorName() {
+ return pht('Conduit Tokens');
+ }
+
+ public function hasAutomaticPolicy() {
+ return true;
+ }
+
public function collectGarbage() {
$table = new PhabricatorConduitToken();
$conn_w = $table->establishConnection('w');
diff --git a/src/applications/config/module/PhabricatorConfigCollectorsModule.php b/src/applications/config/module/PhabricatorConfigCollectorsModule.php
new file mode 100644
--- /dev/null
+++ b/src/applications/config/module/PhabricatorConfigCollectorsModule.php
@@ -0,0 +1,61 @@
+<?php
+
+final class PhabricatorConfigCollectorsModule extends PhabricatorConfigModule {
+
+ public function getModuleKey() {
+ return 'collectors';
+ }
+
+ public function getModuleName() {
+ return pht('Garbage Collectors');
+ }
+
+ public function renderModuleStatus(AphrontRequest $request) {
+ $viewer = $request->getViewer();
+
+ $collectors = PhabricatorGarbageCollector::getAllCollectors();
+ $collectors = msort($collectors, 'getCollectorConstant');
+
+ $rows = array();
+ foreach ($collectors as $key => $collector) {
+ if ($collector->hasAutomaticPolicy()) {
+ $policy_view = phutil_tag('em', array(), pht('Automatic'));
+ } else {
+ $policy = $collector->getDefaultRetentionPolicy();
+ if ($policy === null) {
+ $policy_view = pht('Indefinite');
+ } else {
+ $days = ceil($policy / phutil_units('1 day in seconds'));
+ $policy_view = pht(
+ '%s Day(s)',
+ new PhutilNumber($days));
+ }
+ }
+
+ $rows[] = array(
+ $collector->getCollectorConstant(),
+ $collector->getCollectorName(),
+ $policy_view,
+ );
+ }
+
+ $table = id(new AphrontTableView($rows))
+ ->setHeaders(
+ array(
+ pht('Constant'),
+ pht('Name'),
+ pht('Retention Policy'),
+ ))
+ ->setColumnClasses(
+ array(
+ null,
+ 'pri wide',
+ null,
+ ));
+
+ return id(new PHUIObjectBoxView())
+ ->setHeaderText(pht('Garbage Collectors'))
+ ->setTable($table);
+ }
+
+}
diff --git a/src/applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php b/src/applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php
--- a/src/applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php
+++ b/src/applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorDaemonLogEventGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'daemon.processes';
+
+ public function getCollectorName() {
+ return pht('Daemon Processes');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('7 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = PhabricatorEnv::getEnvConfig('gcdaemon.ttl.daemon-logs');
if ($ttl <= 0) {
diff --git a/src/applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php b/src/applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php
--- a/src/applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php
+++ b/src/applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorDaemonLogGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'daemon.logs';
+
+ public function getCollectorName() {
+ return pht('Daemon Logs');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('7 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = PhabricatorEnv::getEnvConfig('gcdaemon.ttl.daemon-logs');
if ($ttl <= 0) {
diff --git a/src/applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php b/src/applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php
--- a/src/applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php
+++ b/src/applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorDaemonTaskGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'worker.tasks';
+
+ public function getCollectorName() {
+ return pht('Archived Tasks');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('14 days in seconds');
+ }
+
public function collectGarbage() {
$key = 'gcdaemon.ttl.task-archive';
$ttl = PhabricatorEnv::getEnvConfig($key);
diff --git a/src/applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php b/src/applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php
--- a/src/applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php
+++ b/src/applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php
@@ -3,6 +3,16 @@
final class DifferentialParseCacheGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'differential.parse';
+
+ public function getCollectorName() {
+ return pht('Differential Parse Cache');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('14 days in seconds');
+ }
+
public function collectGarbage() {
$key = 'gcdaemon.ttl.differential-parse-cache';
$ttl = PhabricatorEnv::getEnvConfig($key);
diff --git a/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php b/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php
--- a/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php
+++ b/src/applications/drydock/garbagecollector/DrydockLogGarbageCollector.php
@@ -3,6 +3,16 @@
final class DrydockLogGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'drydock.logs';
+
+ public function getCollectorName() {
+ return pht('Drydock Logs');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('30 days in seconds');
+ }
+
public function collectGarbage() {
$log_table = new DrydockLog();
$conn_w = $log_table->establishConnection('w');
diff --git a/src/applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php b/src/applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php
--- a/src/applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php
+++ b/src/applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorFileTemporaryGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'files.ttl';
+
+ public function getCollectorName() {
+ return pht('Files (TTL)');
+ }
+
+ public function hasAutomaticPolicy() {
+ return true;
+ }
+
public function collectGarbage() {
$files = id(new PhabricatorFile())->loadAllWhere(
'ttl < %d LIMIT 100',
diff --git a/src/applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php b/src/applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php
--- a/src/applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php
+++ b/src/applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php
@@ -3,6 +3,16 @@
final class HeraldTranscriptGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'herald.transcripts';
+
+ public function getCollectorName() {
+ return pht('Herald Transcripts');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('30 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = PhabricatorEnv::getEnvConfig('gcdaemon.ttl.herald-transcripts');
if ($ttl <= 0) {
diff --git a/src/applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php b/src/applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php
--- a/src/applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php
+++ b/src/applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php
@@ -3,6 +3,16 @@
final class MetaMTAMailReceivedGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'metamta.received';
+
+ public function getCollectorName() {
+ return pht('Mail (Received)');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('90 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = phutil_units('90 days in seconds');
diff --git a/src/applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php b/src/applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php
--- a/src/applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php
+++ b/src/applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php
@@ -3,6 +3,16 @@
final class MetaMTAMailSentGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'metamta.sent';
+
+ public function getCollectorName() {
+ return pht('Mail (Sent)');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('90 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = phutil_units('90 days in seconds');
diff --git a/src/applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php b/src/applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php
--- a/src/applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php
+++ b/src/applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php
@@ -3,6 +3,16 @@
final class MultimeterEventGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'multimeter.events';
+
+ public function getCollectorName() {
+ return pht('Multimeter Events');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('90 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = phutil_units('90 days in seconds');
diff --git a/src/applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php b/src/applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php
--- a/src/applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php
+++ b/src/applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php
@@ -3,6 +3,16 @@
final class FeedStoryNotificationGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'feed.notifications';
+
+ public function getCollectorName() {
+ return pht('Notifications');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('90 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = 90 * 24 * 60 * 60;
diff --git a/src/applications/people/garbagecollector/PeopleUserLogGarbageCollector.php b/src/applications/people/garbagecollector/PeopleUserLogGarbageCollector.php
--- a/src/applications/people/garbagecollector/PeopleUserLogGarbageCollector.php
+++ b/src/applications/people/garbagecollector/PeopleUserLogGarbageCollector.php
@@ -3,6 +3,16 @@
final class PeopleUserLogGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'user.logs';
+
+ public function getCollectorName() {
+ return pht('User Activity Logs');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('180 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = phutil_units('180 days in seconds');
diff --git a/src/applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php b/src/applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php
--- a/src/applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php
+++ b/src/applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorSystemActionGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'system.actions';
+
+ public function getCollectorName() {
+ return pht('Rate Limiting Actions');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('3 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = phutil_units('3 days in seconds');
diff --git a/src/applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php b/src/applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php
--- a/src/applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php
+++ b/src/applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php
@@ -3,6 +3,16 @@
final class PhabricatorSystemDestructionGarbageCollector
extends PhabricatorGarbageCollector {
+ const COLLECTORCONST = 'system.destruction.logs';
+
+ public function getCollectorName() {
+ return pht('Destruction Logs');
+ }
+
+ public function getDefaultRetentionPolicy() {
+ return phutil_units('90 days in seconds');
+ }
+
public function collectGarbage() {
$ttl = phutil_units('90 days in seconds');
diff --git a/src/infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php b/src/infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php
--- a/src/infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php
+++ b/src/infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php
@@ -1,12 +1,85 @@
<?php
+/**
+ * @task info Getting Collector Information
+ * @task collect Collecting Garbage
+ */
abstract class PhabricatorGarbageCollector extends Phobject {
+
+/* -( Getting Collector Information )-------------------------------------- */
+
+
+ /**
+ * Get a human readable name for what this collector cleans up, like
+ * "User Activity Logs".
+ *
+ * @return string Human-readable collector name.
+ * @task info
+ */
+ abstract public function getCollectorName();
+
+
+ /**
+ * Specify that the collector has an automatic retention policy and
+ * is not configurable.
+ *
+ * @return bool True if the collector has an automatic retention policy.
+ * @task info
+ */
+ public function hasAutomaticPolicy() {
+ return false;
+ }
+
+
+ /**
+ * Get the default retention policy for this collector.
+ *
+ * Return the age (in seconds) when resources start getting collected, or
+ * `null` to retain resources indefinitely.
+ *
+ * @return int|null Lifetime, or `null` for indefinite retention.
+ * @task info
+ */
+ public function getDefaultRetentionPolicy() {
+ throw new PhutilMethodNotImplementedException();
+ }
+
+
+ /**
+ * Get a unique string constant identifying this collector.
+ *
+ * @return string Collector constant.
+ * @task info
+ */
+ final public function getCollectorConstant() {
+ return $this->getPhobjectClassConstant('COLLECTORCONST', 64);
+ }
+
+
+/* -( Collecting Garbage )------------------------------------------------- */
+
+
/**
* Collect garbage from whatever source this GC handles.
*
* @return bool True if there is more garbage to collect.
+ * @task collect
*/
abstract public function collectGarbage();
+
+ /**
+ * Load all of the available garbage collectors.
+ *
+ * @return list<PhabricatorGarbageCollector> Garbage collectors.
+ * @task collect
+ */
+ final public static function getAllCollectors() {
+ return id(new PhutilClassMapQuery())
+ ->setAncestorClass(__CLASS__)
+ ->setUniqueMethod('getCollectorConstant')
+ ->execute();
+ }
+
}
diff --git a/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php b/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php
--- a/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php
+++ b/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php
@@ -348,7 +348,9 @@
$next = $this->nextCollection;
if ($next && (PhabricatorTime::getNow() >= $next)) {
$this->nextCollection = null;
- $this->garbageCollectors = $this->loadGarbageCollectors();
+
+ $all_collectors = PhabricatorGarbageCollector::getAllCollectors();
+ $this->garbageCollectors = $all_collectors;
}
// If we're in a collection cycle, continue collection.
@@ -377,18 +379,4 @@
return false;
}
-
- /**
- * Load all of the available garbage collectors.
- *
- * @return list<PhabricatorGarbageCollector> Garbage collectors.
- * @task garbage
- */
- private function loadGarbageCollectors() {
- return id(new PhutilClassMapQuery())
- ->setAncestorClass('PhabricatorGarbageCollector')
- ->execute();
- }
-
-
}
diff --git a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php
--- a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php
+++ b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php
@@ -1388,6 +1388,11 @@
'Mail sent in the last %s days.',
),
+ '%s Day(s)' => array(
+ '%s Day',
+ '%s Days',
+ ),
+
);
}

File Metadata

Mime Type
text/plain
Expires
Sun, May 12, 3:27 AM (3 w, 10 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6288049
Default Alt Text
D14218.diff (24 KB)

Event Timeline