[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.
|