Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15421116
D18146.id43661.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
15 KB
Referenced Files
None
Subscribers
None
D18146.id43661.diff
View Options
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
@@ -2171,6 +2171,7 @@
'PhabricatorCacheManagementPurgeWorkflow' => 'applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php',
'PhabricatorCacheManagementWorkflow' => 'applications/cache/management/PhabricatorCacheManagementWorkflow.php',
'PhabricatorCacheMarkupGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php',
+ 'PhabricatorCachePurger' => 'applications/cache/purger/PhabricatorCachePurger.php',
'PhabricatorCacheSchemaSpec' => 'applications/cache/storage/PhabricatorCacheSchemaSpec.php',
'PhabricatorCacheSetupCheck' => 'applications/config/check/PhabricatorCacheSetupCheck.php',
'PhabricatorCacheSpec' => 'applications/cache/spec/PhabricatorCacheSpec.php',
@@ -2320,6 +2321,7 @@
'PhabricatorCelerityApplication' => 'applications/celerity/application/PhabricatorCelerityApplication.php',
'PhabricatorCelerityTestCase' => '__tests__/PhabricatorCelerityTestCase.php',
'PhabricatorChangeParserTestCase' => 'applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php',
+ 'PhabricatorChangesetCachePurger' => 'applications/cache/purger/PhabricatorChangesetCachePurger.php',
'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php',
'PhabricatorChatLogApplication' => 'applications/chatlog/application/PhabricatorChatLogApplication.php',
'PhabricatorChatLogChannel' => 'applications/chatlog/storage/PhabricatorChatLogChannel.php',
@@ -2930,6 +2932,7 @@
'PhabricatorGarbageCollectorManagementCollectWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementCollectWorkflow.php',
'PhabricatorGarbageCollectorManagementSetPolicyWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementSetPolicyWorkflow.php',
'PhabricatorGarbageCollectorManagementWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementWorkflow.php',
+ 'PhabricatorGeneralCachePurger' => 'applications/cache/purger/PhabricatorGeneralCachePurger.php',
'PhabricatorGestureUIExample' => 'applications/uiexample/examples/PhabricatorGestureUIExample.php',
'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php',
'PhabricatorGitHubAuthProvider' => 'applications/auth/provider/PhabricatorGitHubAuthProvider.php',
@@ -3748,6 +3751,7 @@
'PhabricatorRegistrationProfile' => 'applications/people/storage/PhabricatorRegistrationProfile.php',
'PhabricatorReleephApplication' => 'applications/releeph/application/PhabricatorReleephApplication.php',
'PhabricatorReleephApplicationConfigOptions' => 'applications/releeph/config/PhabricatorReleephApplicationConfigOptions.php',
+ 'PhabricatorRemarkupCachePurger' => 'applications/cache/purger/PhabricatorRemarkupCachePurger.php',
'PhabricatorRemarkupControl' => 'view/form/control/PhabricatorRemarkupControl.php',
'PhabricatorRemarkupCowsayBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php',
'PhabricatorRemarkupCustomBlockRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomBlockRule.php',
@@ -4202,6 +4206,7 @@
'PhabricatorUserBadgesCacheType' => 'applications/people/cache/PhabricatorUserBadgesCacheType.php',
'PhabricatorUserBlurbField' => 'applications/people/customfield/PhabricatorUserBlurbField.php',
'PhabricatorUserCache' => 'applications/people/storage/PhabricatorUserCache.php',
+ 'PhabricatorUserCachePurger' => 'applications/cache/purger/PhabricatorUserCachePurger.php',
'PhabricatorUserCacheType' => 'applications/people/cache/PhabricatorUserCacheType.php',
'PhabricatorUserCardView' => 'applications/people/view/PhabricatorUserCardView.php',
'PhabricatorUserConfigOptions' => 'applications/people/config/PhabricatorUserConfigOptions.php',
@@ -7366,6 +7371,7 @@
'PhabricatorCacheManagementPurgeWorkflow' => 'PhabricatorCacheManagementWorkflow',
'PhabricatorCacheManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorCacheMarkupGarbageCollector' => 'PhabricatorGarbageCollector',
+ 'PhabricatorCachePurger' => 'Phobject',
'PhabricatorCacheSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCacheSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorCacheSpec' => 'Phobject',
@@ -7551,6 +7557,7 @@
'PhabricatorCelerityApplication' => 'PhabricatorApplication',
'PhabricatorCelerityTestCase' => 'PhabricatorTestCase',
'PhabricatorChangeParserTestCase' => 'PhabricatorWorkingCopyTestCase',
+ 'PhabricatorChangesetCachePurger' => 'PhabricatorCachePurger',
'PhabricatorChangesetResponse' => 'AphrontProxyResponse',
'PhabricatorChatLogApplication' => 'PhabricatorApplication',
'PhabricatorChatLogChannel' => array(
@@ -8253,6 +8260,7 @@
'PhabricatorGarbageCollectorManagementCollectWorkflow' => 'PhabricatorGarbageCollectorManagementWorkflow',
'PhabricatorGarbageCollectorManagementSetPolicyWorkflow' => 'PhabricatorGarbageCollectorManagementWorkflow',
'PhabricatorGarbageCollectorManagementWorkflow' => 'PhabricatorManagementWorkflow',
+ 'PhabricatorGeneralCachePurger' => 'PhabricatorCachePurger',
'PhabricatorGestureUIExample' => 'PhabricatorUIExample',
'PhabricatorGitGraphStream' => 'PhabricatorRepositoryGraphStream',
'PhabricatorGitHubAuthProvider' => 'PhabricatorOAuth2AuthProvider',
@@ -9204,6 +9212,7 @@
'PhabricatorRegistrationProfile' => 'Phobject',
'PhabricatorReleephApplication' => 'PhabricatorApplication',
'PhabricatorReleephApplicationConfigOptions' => 'PhabricatorApplicationConfigOptions',
+ 'PhabricatorRemarkupCachePurger' => 'PhabricatorCachePurger',
'PhabricatorRemarkupControl' => 'AphrontFormTextAreaControl',
'PhabricatorRemarkupCowsayBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
'PhabricatorRemarkupCustomBlockRule' => 'PhutilRemarkupBlockRule',
@@ -9756,6 +9765,7 @@
'PhabricatorUserBadgesCacheType' => 'PhabricatorUserCacheType',
'PhabricatorUserBlurbField' => 'PhabricatorUserCustomField',
'PhabricatorUserCache' => 'PhabricatorUserDAO',
+ 'PhabricatorUserCachePurger' => 'PhabricatorCachePurger',
'PhabricatorUserCacheType' => 'Phobject',
'PhabricatorUserCardView' => 'AphrontTagView',
'PhabricatorUserConfigOptions' => 'PhabricatorApplicationConfigOptions',
diff --git a/src/applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php b/src/applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php
--- a/src/applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php
+++ b/src/applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php
@@ -6,119 +6,75 @@
protected function didConstruct() {
$this
->setName('purge')
- ->setSynopsis(pht('Drop data from caches. APC-based caches can be '.
- 'purged from the web interface.'))
+ ->setSynopsis(pht('Drop data from readthrough caches.'))
->setArguments(
array(
array(
- 'name' => 'purge-all',
- 'help' => pht('Purge all caches.'),
+ 'name' => 'all',
+ 'help' => pht('Purge all caches.'),
),
array(
- 'name' => 'purge-remarkup',
- 'help' => pht('Purge the remarkup cache.'),
- ),
- array(
- 'name' => 'purge-changeset',
- 'help' => pht('Purge the Differential changeset cache.'),
- ),
- array(
- 'name' => 'purge-general',
- 'help' => pht('Purge the general cache.'),
- ),
- array(
- 'name' => 'purge-user',
- 'help' => pht('Purge the user cache.'),
+ 'name' => 'caches',
+ 'param' => 'keys',
+ 'help' => pht('Purge a specific set of caches.'),
),
));
}
public function execute(PhutilArgumentParser $args) {
- $console = PhutilConsole::getConsole();
-
- $purge_all = $args->getArg('purge-all');
+ $all_purgers = PhabricatorCachePurger::getAllPurgers();
- $purge = array(
- 'remarkup' => $purge_all || $args->getArg('purge-remarkup'),
- 'changeset' => $purge_all || $args->getArg('purge-changeset'),
- 'general' => $purge_all || $args->getArg('purge-general'),
- 'user' => $purge_all || $args->getArg('purge-user'),
- );
-
- if (!array_filter($purge)) {
- $list = array();
- foreach ($purge as $key => $ignored) {
- $list[] = "'--purge-".$key."'";
- }
+ $is_all = $args->getArg('all');
+ $key_list = $args->getArg('caches');
+ if ($is_all && strlen($key_list)) {
throw new PhutilArgumentUsageException(
pht(
- "Specify which cache or caches to purge, or use '%s'. Available ".
- "caches are: %s. Use '%s' for more information.",
- '--purge-all',
- implode(', ', $list),
- '--help'));
- }
-
- if ($purge['remarkup']) {
- $console->writeOut(pht('Purging remarkup cache...'));
- $this->purgeRemarkupCache();
- $console->writeOut("%s\n", pht('Done.'));
+ 'Specify either "--all" or "--caches", not both.'));
+ } else if (!$is_all && !strlen($key_list)) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Select caches to purge with "--all" or "--caches". Available '.
+ 'caches are: %s.',
+ implode(', ', array_keys($all_purgers))));
}
- if ($purge['changeset']) {
- $console->writeOut(pht('Purging changeset cache...'));
- $this->purgeChangesetCache();
- $console->writeOut("%s\n", pht('Done.'));
+ if ($is_all) {
+ $purgers = $all_purgers;
+ } else {
+ $key_list = preg_split('/[\s,]+/', $key_list);
+ $purgers = array();
+ foreach ($key_list as $key) {
+ if (isset($all_purgers[$key])) {
+ $purgers[$key] = $all_purgers[$key];
+ } else {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Cache purger "%s" is not recognized. Available caches '.
+ 'are: %s.',
+ $key,
+ implode(', ', array_keys($all_purgers))));
+ }
+ }
+ if (!$purgers) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'When using "--caches", you must select at least one valid '.
+ 'cache to purge.'));
+ }
}
- if ($purge['general']) {
- $console->writeOut(pht('Purging general cache...'));
- $this->purgeGeneralCache();
- $console->writeOut("%s\n", pht('Done.'));
- }
+ foreach ($purgers as $key => $purger) {
+ echo tsprintf(
+ "%s\n",
+ pht(
+ 'Purging "%s" cache...',
+ $key));
- if ($purge['user']) {
- $console->writeOut(pht('Purging user cache...'));
- $this->purgeUserCache();
- $console->writeOut("%s\n", pht('Done.'));
+ $purger->purgeCache();
}
- }
-
- private function purgeRemarkupCache() {
- $conn_w = id(new PhabricatorMarkupCache())->establishConnection('w');
-
- queryfx(
- $conn_w,
- 'TRUNCATE TABLE %T',
- id(new PhabricatorMarkupCache())->getTableName());
- }
-
- private function purgeChangesetCache() {
- $conn_w = id(new DifferentialChangeset())->establishConnection('w');
- queryfx(
- $conn_w,
- 'TRUNCATE TABLE %T',
- DifferentialChangeset::TABLE_CACHE);
- }
-
- private function purgeGeneralCache() {
- $conn_w = id(new PhabricatorMarkupCache())->establishConnection('w');
-
- queryfx(
- $conn_w,
- 'TRUNCATE TABLE %T',
- 'cache_general');
- }
-
- private function purgeUserCache() {
- $table = new PhabricatorUserCache();
- $conn_w = $table->establishConnection('w');
- queryfx(
- $conn_w,
- 'TRUNCATE TABLE %T',
- $table->getTableName());
+ return 0;
}
}
diff --git a/src/applications/cache/purger/PhabricatorCachePurger.php b/src/applications/cache/purger/PhabricatorCachePurger.php
new file mode 100644
--- /dev/null
+++ b/src/applications/cache/purger/PhabricatorCachePurger.php
@@ -0,0 +1,30 @@
+<?php
+
+abstract class PhabricatorCachePurger
+ extends Phobject {
+
+ private $viewer;
+
+ abstract public function purgeCache();
+
+ final public function setViewer(PhabricatorUser $viewer) {
+ $this->viewer = $viewer;
+ return $this;
+ }
+
+ final public function getViewer() {
+ return $this->viewer;
+ }
+
+ final public function getPurgerKey() {
+ return $this->getPhobjectClassConstant('PURGERKEY');
+ }
+
+ final public static function getAllPurgers() {
+ return id(new PhutilClassMapQuery())
+ ->setAncestorClass(__CLASS__)
+ ->setUniqueMethod('getPurgerKey')
+ ->execute();
+ }
+
+}
diff --git a/src/applications/cache/purger/PhabricatorChangesetCachePurger.php b/src/applications/cache/purger/PhabricatorChangesetCachePurger.php
new file mode 100644
--- /dev/null
+++ b/src/applications/cache/purger/PhabricatorChangesetCachePurger.php
@@ -0,0 +1,18 @@
+<?php
+
+final class PhabricatorChangesetCachePurger
+ extends PhabricatorCachePurger {
+
+ const PURGERKEY = 'changeset';
+
+ public function purgeCache() {
+ $table = new DifferentialChangeset();
+ $conn = $table->establishConnection('w');
+
+ queryfx(
+ $conn,
+ 'TRUNCATE TABLE %T',
+ DifferentialChangeset::TABLE_CACHE);
+ }
+
+}
diff --git a/src/applications/cache/purger/PhabricatorGeneralCachePurger.php b/src/applications/cache/purger/PhabricatorGeneralCachePurger.php
new file mode 100644
--- /dev/null
+++ b/src/applications/cache/purger/PhabricatorGeneralCachePurger.php
@@ -0,0 +1,18 @@
+<?php
+
+final class PhabricatorGeneralCachePurger
+ extends PhabricatorCachePurger {
+
+ const PURGERKEY = 'general';
+
+ public function purgeCache() {
+ $table = new PhabricatorMarkupCache();
+ $conn = $table->establishConnection('w');
+
+ queryfx(
+ $conn,
+ 'TRUNCATE TABLE %T',
+ 'cache_general');
+ }
+
+}
diff --git a/src/applications/cache/purger/PhabricatorRemarkupCachePurger.php b/src/applications/cache/purger/PhabricatorRemarkupCachePurger.php
new file mode 100644
--- /dev/null
+++ b/src/applications/cache/purger/PhabricatorRemarkupCachePurger.php
@@ -0,0 +1,18 @@
+<?php
+
+final class PhabricatorRemarkupCachePurger
+ extends PhabricatorCachePurger {
+
+ const PURGERKEY = 'remarkup';
+
+ public function purgeCache() {
+ $table = new PhabricatorMarkupCache();
+ $conn = $table->establishConnection('w');
+
+ queryfx(
+ $conn,
+ 'TRUNCATE TABLE %T',
+ $table->getTableName());
+ }
+
+}
diff --git a/src/applications/cache/purger/PhabricatorUserCachePurger.php b/src/applications/cache/purger/PhabricatorUserCachePurger.php
new file mode 100644
--- /dev/null
+++ b/src/applications/cache/purger/PhabricatorUserCachePurger.php
@@ -0,0 +1,18 @@
+<?php
+
+final class PhabricatorUserCachePurger
+ extends PhabricatorCachePurger {
+
+ const PURGERKEY = 'user';
+
+ public function purgeCache() {
+ $table = new PhabricatorUserCache();
+ $conn = $table->establishConnection('w');
+
+ queryfx(
+ $conn,
+ 'TRUNCATE TABLE %T',
+ $table->getTableName());
+ }
+
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 22, 9:08 PM (2 d, 19 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7578870
Default Alt Text
D18146.id43661.diff (15 KB)
Attached To
Mode
D18146: Modularize "bin/cache" purgers
Attached
Detach File
Event Timeline
Log In to Comment