Cache foreign image descriptions in the transcache, saves an Http::get() on cache...
authorChad Horohoe <demon@users.mediawiki.org>
Thu, 3 Jul 2008 07:49:35 +0000 (07:49 +0000)
committerChad Horohoe <demon@users.mediawiki.org>
Thu, 3 Jul 2008 07:49:35 +0000 (07:49 +0000)
RELEASE-NOTES
includes/filerepo/File.php
includes/filerepo/FileRepo.php

index 5cec8db..bc60b96 100644 (file)
@@ -179,6 +179,8 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * Added blank special page Special:BlankPage for benchmarking, etc.
 * (bug 13862) Specialpages now has a horizontal TOC if there's three or more
   groups.
+* Foreign repo file descriptions via fetchDescription are now cached in the
+  transcache.
  
 === Bug fixes in 1.13 ===
 
index 7a1c68e..af5519c 100644 (file)
@@ -1067,13 +1067,53 @@ abstract class File {
                }
                $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName() );
                if ( $renderUrl ) {
+                       if ( $this->repo->useTransCache ) {
+                               wfDebug("Attempting to get the description from the transwiki cache...");
+                               $this->purgeTransCacheEntries();
+                               $dbr = wfGetDB(DB_SLAVE);
+                               $obj = $dbr->selectRow('transcache', array('tc_contents'),
+                                                                                       array('tc_url' => $renderUrl));
+                               if ($obj) {
+                                       wfDebug("success!\n");
+                                       return $obj->tc_contents;
+                               }
+                               wfDebug("miss\n");
+                       }
                        wfDebug( "Fetching shared description from $renderUrl\n" );
-                       return Http::get( $renderUrl );
+                       $res = Http::get( $renderUrl );
+                       if ( $res && $this->repo->useTransCache ) $this->addToTransCache( $res, $renderUrl );
+                       return $res;
                } else {
                        return false;
                }
        }
 
+       /**
+        * Purge expired transcache entries
+        */
+       function purgeTranscacheEntries() {
+               global $wgTranscludeCacheExpiry;
+               $dbw = wfGetDB( DB_MASTER );
+               $table = $dbw->tableName('transcache');
+               $expiry = $dbw->addQuotes(time() - $wgTranscludeCacheExpiry);
+               $res = $dbw->delete( $table, array("tc_time < $expiry"), __METHOD__ );
+               if ($res) wfDebug("purging old transcache entries...");         
+       }
+       
+       /**
+        * Add new transcache entry
+        * 
+        * @param string $text Text to add to the cache
+        * @param string $url Url we're caching
+        */
+       function addToTransCache( $text, $url ) {
+               $dbw = wfGetDB( DB_MASTER );
+                               $dbw->replace('transcache', array('tc_url'), array(
+                       'tc_url' => $url,
+                       'tc_time' => time(),
+                       'tc_contents' => $text));
+       }
+
        /**
         * Get discription of file revision
         * STUB
index 3606292..93089a8 100644 (file)
@@ -30,7 +30,7 @@ abstract class FileRepo {
                // Optional settings
                $this->initialCapital = true; // by default
                foreach ( array( 'descBaseUrl', 'scriptDirUrl', 'articleUrl', 'fetchDescription',
-                       'thumbScriptUrl', 'initialCapital', 'pathDisclosureProtection' ) as $var )
+                       'thumbScriptUrl', 'initialCapital', 'pathDisclosureProtection', 'useTransCache' ) as $var )
                {
                        if ( isset( $info[$var] ) ) {
                                $this->$var = $info[$var];