From 63601400e476c6cf43d985f3e7b9864681695ed4 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 18 Jan 2013 16:46:04 +0100 Subject: Update to MediaWiki 1.20.2 this update includes: * adjusted Arch Linux skin * updated FluxBBAuthPlugin * patch for https://bugzilla.wikimedia.org/show_bug.cgi?id=44024 --- includes/objectcache/BagOStuff.php | 119 +++++++++++++++++++++++++++++++------ 1 file changed, 100 insertions(+), 19 deletions(-) (limited to 'includes/objectcache/BagOStuff.php') diff --git a/includes/objectcache/BagOStuff.php b/includes/objectcache/BagOStuff.php index 81ad6621..7bbaff93 100644 --- a/includes/objectcache/BagOStuff.php +++ b/includes/objectcache/BagOStuff.php @@ -56,8 +56,7 @@ abstract class BagOStuff { /** * Get an item with the given key. Returns false if it does not exist. * @param $key string - * - * @return bool|Object + * @return mixed Returns false on failure */ abstract public function get( $key ); @@ -66,6 +65,7 @@ abstract class BagOStuff { * @param $key string * @param $value mixed * @param $exptime int Either an interval in seconds or a unix timestamp for expiry + * @return bool success */ abstract public function set( $key, $value, $exptime = 0 ); @@ -73,19 +73,33 @@ abstract class BagOStuff { * Delete an item. * @param $key string * @param $time int Amount of time to delay the operation (mostly memcached-specific) + * @return bool True if the item was deleted or not found, false on failure */ abstract public function delete( $key, $time = 0 ); + /** + * @param $key string + * @param $timeout integer + * @return bool success + */ public function lock( $key, $timeout = 0 ) { /* stub */ return true; } + /** + * @param $key string + * @return bool success + */ public function unlock( $key ) { /* stub */ return true; } + /** + * @todo: what is this? + * @return Array + */ public function keys() { /* stub */ return array(); @@ -93,12 +107,12 @@ abstract class BagOStuff { /** * Delete all objects expiring before a certain date. - * @param $date The reference date in MW format - * @param $progressCallback Optional, a function which will be called + * @param $date string The reference date in MW format + * @param $progressCallback callback|bool Optional, a function which will be called * regularly during long-running operations with the percentage progress * as the first parameter. * - * @return true on success, false if unimplemented + * @return bool on success, false if unimplemented */ public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) { // stub @@ -107,45 +121,83 @@ abstract class BagOStuff { /* *** Emulated functions *** */ - public function add( $key, $value, $exptime = 0 ) { - if ( !$this->get( $key ) ) { - $this->set( $key, $value, $exptime ); + /** + * Get an associative array containing the item for each of the keys that have items. + * @param $keys Array List of strings + * @return Array + */ + public function getMulti( array $keys ) { + $res = array(); + foreach ( $keys as $key ) { + $val = $this->get( $key ); + if ( $val !== false ) { + $res[$key] = $val; + } + } + return $res; + } - return true; + /** + * @param $key string + * @param $value mixed + * @param $exptime integer + * @return bool success + */ + public function add( $key, $value, $exptime = 0 ) { + if ( $this->get( $key ) === false ) { + return $this->set( $key, $value, $exptime ); } + return false; // key already set } + /** + * @param $key string + * @param $value mixed + * @param $exptime int + * @return bool success + */ public function replace( $key, $value, $exptime = 0 ) { if ( $this->get( $key ) !== false ) { - $this->set( $key, $value, $exptime ); + return $this->set( $key, $value, $exptime ); } + return false; // key not already set } /** + * Increase stored value of $key by $value while preserving its TTL * @param $key String: Key to increase * @param $value Integer: Value to add to $key (Default 1) - * @return null if lock is not possible else $key value increased by $value + * @return integer|bool New value or false on failure */ public function incr( $key, $value = 1 ) { if ( !$this->lock( $key ) ) { - return null; + return false; } - - $value = intval( $value ); - - if ( ( $n = $this->get( $key ) ) !== false ) { - $n += $value; - $this->set( $key, $n ); // exptime? + $n = $this->get( $key ); + if ( $this->isInteger( $n ) ) { // key exists? + $n += intval( $value ); + $this->set( $key, max( 0, $n ) ); // exptime? + } else { + $n = false; } $this->unlock( $key ); return $n; } + /** + * Decrease stored value of $key by $value while preserving its TTL + * @param $key String + * @param $value Integer + * @return integer + */ public function decr( $key, $value = 1 ) { return $this->incr( $key, - $value ); } + /** + * @param $text string + */ public function debug( $text ) { if ( $this->debugMode ) { $class = get_class( $this ); @@ -155,6 +207,8 @@ abstract class BagOStuff { /** * Convert an optionally relative time to an absolute time + * @param $exptime integer + * @return int */ protected function convertExpiry( $exptime ) { if ( ( $exptime != 0 ) && ( $exptime < 86400 * 3650 /* 10 years */ ) ) { @@ -163,6 +217,33 @@ abstract class BagOStuff { return $exptime; } } -} + /** + * Convert an optionally absolute expiry time to a relative time. If an + * absolute time is specified which is in the past, use a short expiry time. + * + * @param $exptime integer + * @return integer + */ + protected function convertToRelative( $exptime ) { + if ( $exptime >= 86400 * 3650 /* 10 years */ ) { + $exptime -= time(); + if ( $exptime <= 0 ) { + $exptime = 1; + } + return $exptime; + } else { + return $exptime; + } + } + /** + * Check if a value is an integer + * + * @param $value mixed + * @return bool + */ + protected function isInteger( $value ) { + return ( is_int( $value ) || ctype_digit( $value ) ); + } +} -- cgit v1.2.3-54-g00ecf