Homec4science

Add a "setup" cache

Authored by epriestley <git@epriestley.com> on Dec 25 2012, 15:09.

Description

Add a "setup" cache

Summary:
See T2062. This cache allows us to essentially implement this sort of block:

if (this_code_has_not_run_since_the_last_server_restart()) {
  ...
}

This will let us do setup checks automatically (i.e., without a specialized setup mode) without imposing hundreds of milliseconds of git submodule status and similar checks on every page load, even if an install does not have APC.

Broadly, the major goals here are:

  • Reduce user errors and support costs related to misconfiguration (e.g., failure to update submodules).
  • Simplify setup and configuration (remove 'phabricator.setup', remove/reduce PHABRICATOR_ENV).
  • Move as much configuration to the web as possible (required for SaaS).

Test Plan:
Added this block to webroot/index.php:

$cache = PhabricatorCaches::getSetupCache();
$result = $cache->getKeys(array('x'));
if (empty($result['x'])) {
  phlog('Cache miss + set.');
  $cache->setKeys(array('x' => 'y'));
} else {
  phlog('Cache hit.');
}

Verified it used APC correctly.
Disabled APC and verified it degraded to a reasonable disk-based behavior.

If we miss both of these we end up with no actual caching, but that's the best we can do. This code will also run too early in setup for it to be appropriate to raise exceptions out of this pathway -- later on, we can raise a warning that APC is not installed.

Reviewers: btrahan, vrana

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2227, T2062

Differential Revision: https://secure.phabricator.com/D4281

Details

Committed
epriestley <git@epriestley.com>Dec 25 2012, 15:09
Pushed
aubortJan 31 2017, 17:16
Parents
rPHe05d8d7061f3: Let datepicker jump one month forward
Branches
Unknown
Tags
Unknown

Event Timeline

epriestley <git@epriestley.com> committed rPHa88b69a4b67c: Add a "setup" cache (authored by epriestley <git@epriestley.com>).Dec 25 2012, 15:09