1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-24 06:20:56 +01:00

Cache README content for repositories

Summary:
Ref T11954. Especially with higher-latency file stores like S3, we can spend a lot of time reading README data and then pulling it out of file storage.

Instead, cache it.

Test Plan: Browsed a repostory with a README, saw faster pages.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T11954

Differential Revision: https://secure.phabricator.com/D17002
This commit is contained in:
epriestley 2016-12-06 09:34:01 -08:00
parent e6ddd6d0e9
commit b869e742b9

View file

@ -340,7 +340,18 @@ abstract class DiffusionController extends PhabricatorController {
$drequest = $this->getDiffusionRequest(); $drequest = $this->getDiffusionRequest();
$viewer = $this->getViewer(); $viewer = $this->getViewer();
$repository = $drequest->getRepository();
$repository_phid = $repository->getPHID();
$stable_commit = $drequest->getStableCommit();
$cache = PhabricatorCaches::getMutableStructureCache();
$cache_key = "diffusion".
".repository({$repository_phid})".
".commit({$stable_commit})".
".readme({$readme_path})";
$readme_cache = $cache->getKey($cache_key);
if (!$readme_cache) {
try { try {
$result = $this->callConduitWithDiffusionRequest( $result = $this->callConduitWithDiffusionRequest(
'diffusion.filecontentquery', 'diffusion.filecontentquery',
@ -367,14 +378,22 @@ abstract class DiffusionController extends PhabricatorController {
$corpus = $file->loadFileData(); $corpus = $file->loadFileData();
if (!strlen($corpus)) { $readme_cache = array(
'corpus' => $corpus,
);
$cache->setKey($cache_key, $readme_cache);
}
$readme_corpus = $readme_cache['corpus'];
if (!strlen($readme_corpus)) {
return null; return null;
} }
return id(new DiffusionReadmeView()) return id(new DiffusionReadmeView())
->setUser($this->getViewer()) ->setUser($this->getViewer())
->setPath($readme_path) ->setPath($readme_path)
->setContent($corpus); ->setContent($readme_corpus);
} }
} }