[pLog-svn] Problem with cache
Mark Wu
markplace at gmail.com
Fri Apr 7 18:28:42 GMT 2006
Hi Paul:
I just take one hour the check the cache. I don't thinkt the "===" operator
did the right job of userInfo, blogInfo and Article category.
I just print out $dbobject and $tmpobj , and do the "Manually" comparision.
Both structures and data are exactly the same.
So, I don't know why it always return false.
BTW, I think we had two missing attribue when we map the blogInfo object. I
already fix.
About the articleCategory, userInfo,.... No idea. Need more check.
Mark
> -----Original Message-----
> From: plog-svn-bounces at devel.lifetype.net
> [mailto:plog-svn-bounces at devel.lifetype.net] On Behalf Of
> Paul Westbrook
> Sent: Friday, April 07, 2006 4:52 PM
> To: plog-svn at devel.lifetype.net
> Subject: Re: [pLog-svn] Problem with cache
>
> Hello,
> I was looking in to this problem tonight. I applied this
> patch to model.class.php
>
> Index: class/dao/model.class.php
> ===================================================================
> --- class/dao/model.class.php (revision 3194)
> +++ class/dao/model.class.php (working copy)
> @@ -190,12 +190,29 @@
> $dbObject = $this->mapRow( $row );
>
> $this->_cache->setData( $value,
> $cacheId, $dbObject );
> - if( $caches ) {
> - foreach( $caches as $cache =>
> $getter ) {
> - $this->_cache->setData
> ( $dbObject->$getter(), $cache, $dbObject );
> - }
> - }
> - }
> +
> + //
> + // Make sure that the data is the same as the
> original object
> + //
> + $tmpObj = $this->_cache->getData( $value, $cacheId );
> +
> + // This is relying on php comparing the objects by
> value,
> + // as described in http://php.mirrors.ilisys.com.au/
> manual/en/language.operators.comparison.php
> + if ( $tmpObj === $dbObject ) {
> + if( $caches ) {
> + foreach( $caches as $cache => $getter ) {
> + $this->_cache->setData( $dbObject->
> $getter(), $cache, $dbObject );
> + }
> + }
> + } else {
> + // Remove the entry from the cache, since it is bad
> + // And rely on the answer that we got directly
> from the
> + // database
> + error_log( "Found bad cached data Id:" . $value .
> " cache: " . $cacheId );
> + $this->_cache->removeData( $value, $cacheId );
> + }
> +
> + }
>
> return( $dbObject );
>
>
> What I was looking for was data that was corrupted when being
> store to the cache. I saw a bunch of log messages that
> showed where the cached data was different than the data from
> the database. (This differences could be legitimate. A
> different thread could have written to the cache before a
> thread had a chance to reread the cache.
>
> I have attached this log. In the log I see a lot of bloginfo
> changes. (Does the bloginfo db object change for every request?)
> But I also see some articles and article_categories.
>
>
> --Paul
>
>
>
More information about the pLog-svn
mailing list