X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FCacheDependency.php;h=11e707380d67bd07355b87e00632aff87222a0f6;hb=05879eeb55b2412918b0b29509807a1d456336fe;hp=6a591767d4bff94bd0291aca9991df4b5b6ecc80;hpb=07940059beedada6e5b93708bf783e88a75da239;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/CacheDependency.php b/includes/CacheDependency.php index 6a591767d4..11e707380d 100644 --- a/includes/CacheDependency.php +++ b/includes/CacheDependency.php @@ -1,9 +1,9 @@ deps = $deps; } - /** + /** * Returns true if any of the dependencies have expired */ function isExpired() { @@ -61,27 +61,27 @@ class DependencyWrapper { } /** - * Attempt to get a value from the cache. If the value is expired or missing, + * Attempt to get a value from the cache. If the value is expired or missing, * it will be generated with the callback function (if present), and the newly - * calculated value will be stored to the cache in a wrapper. + * calculated value will be stored to the cache in a wrapper. * - * @param object $cache A cache object such as $wgMemc - * @param string $key The cache key - * @param integer $expiry The expiry timestamp or interval in seconds - * @param mixed $callback The callback for generating the value, or false - * @param array $callbackParams The function parameters for the callback - * @param array $deps The dependencies to store on a cache miss. Note: these + * @param $cache Object: a cache object such as $wgMemc + * @param $key String: the cache key + * @param $expiry Integer: the expiry timestamp or interval in seconds + * @param $callback Mixed: the callback for generating the value, or false + * @param $callbackParams Array: the function parameters for the callback + * @param $deps Array: the dependencies to store on a cache miss. Note: these * are not the dependencies used on a cache hit! Cache hits use the stored * dependency array. * * @return mixed The value, or null if it was not present in the cache and no * callback was defined. */ - static function getValueFromCache( $cache, $key, $expiry = 0, $callback = false, - $callbackParams = array(), $deps = array() ) + static function getValueFromCache( $cache, $key, $expiry = 0, $callback = false, + $callbackParams = array(), $deps = array() ) { $obj = $cache->get( $key ); - if ( $obj && !$obj->isExpired() ) { + if ( is_object( $obj ) && $obj instanceof DependencyWrapper && !$obj->isExpired() ) { $value = $obj->value; } elseif ( $callback ) { $value = call_user_func_array( $callback, $callbackParams ); @@ -95,6 +95,9 @@ class DependencyWrapper { } } +/** + * @ingroup Cache + */ abstract class CacheDependency { /** * Returns true if the dependency is expired, false otherwise @@ -104,22 +107,25 @@ abstract class CacheDependency { /** * Hook to perform any expensive pre-serialize loading of dependency values. */ - function loadDependencyValues() {} + function loadDependencyValues() { } } +/** + * @ingroup Cache + */ class FileDependency extends CacheDependency { var $filename, $timestamp; /** * Create a file dependency * - * @param string $filename The name of the file, preferably fully qualified - * @param mixed $timestamp The unix last modified timestamp, or false if the - * file does not exist. If omitted, the timestamp will be loaded from + * @param $filename String: the name of the file, preferably fully qualified + * @param $timestamp Mixed: the unix last modified timestamp, or false if the + * file does not exist. If omitted, the timestamp will be loaded from * the file. * - * A dependency on a nonexistent file will be triggered when the file is - * created. A dependency on an existing file will be triggered when the + * A dependency on a nonexistent file will be triggered when the file is + * created. A dependency on an existing file will be triggered when the * file is changed. */ function __construct( $filename, $timestamp = null ) { @@ -127,6 +133,11 @@ class FileDependency extends CacheDependency { $this->timestamp = $timestamp; } + function __sleep() { + $this->loadDependencyValues(); + return array( 'filename', 'timestamp' ); + } + function loadDependencyValues() { if ( is_null( $this->timestamp ) ) { if ( !file_exists( $this->filename ) ) { @@ -163,6 +174,9 @@ class FileDependency extends CacheDependency { } } +/** + * @ingroup Cache + */ class TitleDependency extends CacheDependency { var $titleObj; var $ns, $dbk; @@ -170,7 +184,7 @@ class TitleDependency extends CacheDependency { /** * Construct a title dependency - * @param Title $title + * @param $title Title */ function __construct( Title $title ) { $this->titleObj = $title; @@ -181,7 +195,7 @@ class TitleDependency extends CacheDependency { function loadDependencyValues() { $this->touched = $this->getTitle()->getTouched(); } - + /** * Get rid of bulky Title object for sleep */ @@ -192,12 +206,13 @@ class TitleDependency extends CacheDependency { function getTitle() { if ( !isset( $this->titleObj ) ) { $this->titleObj = Title::makeTitle( $this->ns, $this->dbk ); - } + } return $this->titleObj; } function isExpired() { $touched = $this->getTitle()->getTouched(); + if ( $this->touched === false ) { if ( $touched === false ) { # Still missing @@ -219,10 +234,13 @@ class TitleDependency extends CacheDependency { } } +/** + * @ingroup Cache + */ class TitleListDependency extends CacheDependency { var $linkBatch; var $timestamps; - + /** * Construct a dependency on a list of titles */ @@ -233,6 +251,7 @@ class TitleListDependency extends CacheDependency { function calculateTimestamps() { # Initialise values to false $timestamps = array(); + foreach ( $this->getLinkBatch()->data as $ns => $dbks ) { if ( count( $dbks ) > 0 ) { $timestamps[$ns] = array(); @@ -244,11 +263,15 @@ class TitleListDependency extends CacheDependency { # Do the query if ( count( $timestamps ) ) { - $dbr =& wfGetDB( DB_SLAVE ); + $dbr = wfGetDB( DB_SLAVE ); $where = $this->getLinkBatch()->constructSet( 'page', $dbr ); - $res = $dbr->select( 'page', + $res = $dbr->select( + 'page', array( 'page_namespace', 'page_title', 'page_touched' ), - $where, __METHOD__ ); + $where, + __METHOD__ + ); + while ( $row = $dbr->fetchObject( $res ) ) { $timestamps[$row->page_namespace][$row->page_title] = $row->page_touched; } @@ -265,7 +288,7 @@ class TitleListDependency extends CacheDependency { } function getLinkBatch() { - if ( !isset( $this->linkBatch ) ){ + if ( !isset( $this->linkBatch ) ) { $this->linkBatch = new LinkBatch; $this->linkBatch->setArray( $this->timestamps ); } @@ -277,6 +300,7 @@ class TitleListDependency extends CacheDependency { foreach ( $this->timestamps as $ns => $dbks ) { foreach ( $dbks as $dbk => $oldTimestamp ) { $newTimestamp = $newTimestamps[$ns][$dbk]; + if ( $oldTimestamp === false ) { if ( $newTimestamp === false ) { # Still missing @@ -299,9 +323,12 @@ class TitleListDependency extends CacheDependency { } } +/** + * @ingroup Cache + */ class GlobalDependency extends CacheDependency { var $name, $value; - + function __construct( $name ) { $this->name = $name; $this->value = $GLOBALS[$name]; @@ -312,6 +339,9 @@ class GlobalDependency extends CacheDependency { } } +/** + * @ingroup Cache + */ class ConstantDependency extends CacheDependency { var $name, $value; @@ -324,5 +354,3 @@ class ConstantDependency extends CacheDependency { return constant( $this->name ) != $this->value; } } - -?>