diff --git a/lib/SimpleSAML/Memcache.php b/lib/SimpleSAML/Memcache.php index 1089afa6e94d8a499eb8c4ca8e87347af14395fb..60d55a1ba189f7a16b24d34cead873dd8b72cfb0 100644 --- a/lib/SimpleSAML/Memcache.php +++ b/lib/SimpleSAML/Memcache.php @@ -31,7 +31,9 @@ class SimpleSAML_Memcache { * @return The data stored with the given key, or NULL if no data matching the key was found. */ public static function get($key) { + SimpleSAML_Logger::debug("loading key $key from memcache"); + $latestInfo = NULL; $latestTime = 0.0; $latestData = NULL; $mustUpdate = FALSE; @@ -69,15 +71,15 @@ class SimpleSAML_Memcache { continue; } - - if($latestTime === 0.0) { - /* First data found. */ + if($latestInfo === NULL) { + /* First info found. */ + $latestInfo = $serializedInfo; $latestTime = $info['timestamp']; $latestData = $info['data']; continue; } - if($info['timestamp'] === $latestTime && $info['data'] === $latestData) { + if($info['timestamp'] === $latestTime && $serializedInfo === $latestInfo) { /* This data matches the data from the other server(s). */ continue; } @@ -91,18 +93,21 @@ class SimpleSAML_Memcache { /* Update if data in $info is newer than $latestData. */ if($latestTime < $info['timestamp']) { + $latestInfo = $serializedInfo; $latestTime = $info['timestamp']; $latestData = $info['data']; } } - if($latestTime === 0.0) { + if($latestData === NULL) { /* We didn't find any data matching the key. */ + SimpleSAML_Logger::debug("key $key not found in memcache"); return NULL; } if($mustUpdate) { /* We found data matching the key, but some of the servers need updating. */ + SimpleSAML_Logger::debug("Memcache servers out of sync for $key, forcing sync"); self::set($key, $latestData); } @@ -118,6 +123,7 @@ class SimpleSAML_Memcache { * @param int|NULL $expire The expiration timestamp of the data. */ public static function set($key, $value, $expire = NULL) { + SimpleSAML_Logger::debug("saving key $key to memcache"); $savedInfo = array( 'timestamp' => microtime(TRUE), 'data' => $value @@ -143,6 +149,7 @@ class SimpleSAML_Memcache { */ public static function delete($key) { assert('is_string($key)'); + SimpleSAML_Logger::debug("deleting key $key from memcache"); /* Store this object to all groups of memcache servers. */ foreach(self::getMemcacheServers() as $server) {