[Beeframework-svn] SF.net SVN: beeframework:[146] trunk/framework/Bee
Brought to you by:
b_hartmann,
m_plomer
From: <m_p...@us...> - 2014-02-26 13:57:03
|
Revision: 146 http://sourceforge.net/p/beeframework/code/146 Author: m_plomer Date: 2014-02-26 13:56:55 +0000 (Wed, 26 Feb 2014) Log Message: ----------- - cache deserialization error handling by Bugs Modified Paths: -------------- trunk/framework/Bee/Cache/Manager.php trunk/framework/Bee/Cache/Provider/Base.php trunk/framework/Bee/Framework.php trunk/framework/Bee/MVC/Controller/Multiaction/MethodNameResolver/AnnotationBased.php Modified: trunk/framework/Bee/Cache/Manager.php =================================================================== --- trunk/framework/Bee/Cache/Manager.php 2014-02-17 12:35:01 UTC (rev 145) +++ trunk/framework/Bee/Cache/Manager.php 2014-02-26 13:56:55 UTC (rev 146) @@ -143,53 +143,78 @@ } } - /** - * Enter description here... - * - * @param Bee_Cache_ICachableResource $resource - * @return mixed - */ - public static function &retrieveCachable(Bee_Cache_ICachableResource $resource, $returnInfoArray = false) { - if(is_null(self::$provider)) { - // no cache provider found, no caching or unsupported cache type installed - $data =& $resource->createContent(); - $result = $returnInfoArray ? array(self::INFO_NO_CACHE_KEY => true, self::INFO_CACHE_HIT_KEY => false, self::INFO_IN_CACHE_SINCE_KEY => false, self::INFO_DATA_KEY => &$data) : $data; - return $result; - } - - // caching supported, check if in cache and not stale - $key = self::getQualifiedKey($resource->getKey()); - $ctimeKey = $key . self::CTIME_KEY_SUFFIX; + /** + * Enter description here... + * + * @param Bee_Cache_ICachableResource $resource + * @return mixed + */ + public static function &retrieveCachable(Bee_Cache_ICachableResource $resource, $returnInfoArray = false) { + if(is_null(self::$provider)) { + // no cache provider found, no caching or unsupported cache type installed + $data =& $resource->createContent(); + $result = $returnInfoArray ? array(self::INFO_NO_CACHE_KEY => true, self::INFO_CACHE_HIT_KEY => false, self::INFO_IN_CACHE_SINCE_KEY => false, self::INFO_DATA_KEY => &$data) : $data; + return $result; + } - $inCacheSince = self::$provider->retrieve($ctimeKey); - $inCacheSince = $inCacheSince === false ? -1 : $inCacheSince; + // caching supported, check if in cache and not stale + $key = self::getQualifiedKey($resource->getKey()); + $ctimeKey = $key . self::CTIME_KEY_SUFFIX; - $mtime = $resource->getModificationTimestamp(); + try { + $inCacheSince = self::$provider->retrieve($ctimeKey); + $inCacheSince = $inCacheSince === false ? -1 : $inCacheSince; - if($inCacheSince < $mtime) { - // @todo: provide logging - // resource not found in cache or stale, re-create and store in cache + } catch (Exception $e) { + $inCacheSince = -1; + } - $etime = 0; - $data =& $resource->createContent($etime); + $mtime = $resource->getModificationTimestamp(); - self::$provider->store($ctimeKey, $mtime, $etime); - self::$provider->store($key, $data, $etime); + if($inCacheSince < $mtime) { + // @todo: provide logging + // resource not found in cache or stale, re-create and store in cache - $cacheHit = false; - } else { - // @todo: provide logging - // resource in cache is current, fetch from cache - $data = self::$provider->retrieve($key); - $cacheHit = true; - } + $etime = 0; + $data =& $resource->createContent($etime); - if($returnInfoArray) { - $data = array(self::INFO_CACHE_HIT_KEY => $cacheHit, self::INFO_IN_CACHE_SINCE_KEY => $inCacheSince, self::INFO_DATA_KEY => &$data); - } - return $data; - } + self::$provider->store($ctimeKey, $mtime, $etime); + self::$provider->store($key, $data, $etime); + $cacheHit = false; + } else { + // @todo: provide logging + // resource in cache is current, fetch from cache + try { + $data = self::$provider->retrieve($key); + $cacheHit = true; + + } catch (Exception $e) { + // ACHTUNG!!!!!!!! + // ACHTUNG!!!!!!!! + // ACHTUNG!!!!!!!! + // ACHTUNG!!!!!!!! + // + // hier habe ich einfach ein stück code aus dem if ... zweig dupliziert + // + // @todo: provide logging + // resource not found in cache or stale, re-create and store in cache + $etime = 0; + $data =& $resource->createContent($etime); + + self::$provider->store($ctimeKey, $mtime, $etime); + self::$provider->store($key, $data, $etime); + + $cacheHit = false; + } + } + + if($returnInfoArray) { + $data = array(self::INFO_CACHE_HIT_KEY => $cacheHit, self::INFO_IN_CACHE_SINCE_KEY => $inCacheSince, self::INFO_DATA_KEY => &$data); + } + return $data; + } + public static function retrieve($key) { return self::$provider->retrieve(self::getQualifiedKey($key)); } Modified: trunk/framework/Bee/Cache/Provider/Base.php =================================================================== --- trunk/framework/Bee/Cache/Provider/Base.php 2014-02-17 12:35:01 UTC (rev 145) +++ trunk/framework/Bee/Cache/Provider/Base.php 2014-02-26 13:56:55 UTC (rev 146) @@ -44,9 +44,14 @@ return $this->doStore($key, serialize($value), $etime); } - protected function doRetrieveSerialized($key) { - return unserialize($this->doRetrieve($key)); - } + protected function doRetrieveSerialized($key) { + $serialized = $this->doRetrieve($key); + $data = @unserialize($serialized); + if ($data === false && $serialized !== serialize(false)) { + throw new Exception('unserialize failed for key: '.$key); + } + return $data; + } protected final function getTTL($etime) { return $etime - time(); Modified: trunk/framework/Bee/Framework.php =================================================================== --- trunk/framework/Bee/Framework.php 2014-02-17 12:35:01 UTC (rev 145) +++ trunk/framework/Bee/Framework.php 2014-02-26 13:56:55 UTC (rev 146) @@ -126,7 +126,10 @@ if(self::$productionMode) { if(!is_array(self::$classFileMap)) { - self::$classFileMap = Bee_Cache_Manager::retrieve(self::CLASS_FILE_CACHE_PREFIX); + try { + self::$classFileMap = Bee_Cache_Manager::retrieve(self::CLASS_FILE_CACHE_PREFIX); + } catch (Exception $e) { + } if(!is_array(self::$classFileMap)) { self::$classFileMap = array(); } Modified: trunk/framework/Bee/MVC/Controller/Multiaction/MethodNameResolver/AnnotationBased.php =================================================================== --- trunk/framework/Bee/MVC/Controller/Multiaction/MethodNameResolver/AnnotationBased.php 2014-02-17 12:35:01 UTC (rev 145) +++ trunk/framework/Bee/MVC/Controller/Multiaction/MethodNameResolver/AnnotationBased.php 2014-02-26 13:56:55 UTC (rev 146) @@ -70,7 +70,10 @@ $delegateClassName = get_class($this->getController()->getDelegate()); if(Bee_Framework::getProductionMode()) { - $this->methodResolvers = Bee_Cache_Manager::retrieve(self::CACHE_KEY_PREFIX.$delegateClassName); + try { + $this->methodResolvers = Bee_Cache_Manager::retrieve(self::CACHE_KEY_PREFIX . $delegateClassName); + } catch (Exception $e) { + } } if(!$this->methodResolvers) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |