Decline to cache preprocessor items larger than 1 Mb
authorOri Livneh <ori@wikimedia.org>
Thu, 3 Sep 2015 00:24:33 +0000 (17:24 -0700)
committerOri Livneh <ori@wikimedia.org>
Thu, 3 Sep 2015 00:27:28 +0000 (17:27 -0700)
This is a temporarily workaround for T111289. The data ought not be so large,
but it frequently is, and the problem is almost exclusive to this code path.
For now, just avoid attempting to cache the value if its size exceeds a million
bytes.

Bug: T111289
Change-Id: Idd1acd903193f0753cc5548bd32800705716dd9f

includes/parser/Preprocessor_Hash.php

index 8ddb401..9429e44 100644 (file)
@@ -734,8 +734,12 @@ class Preprocessor_Hash implements Preprocessor {
                // Cache
                if ( $cacheable ) {
                        $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );
-                       $wgMemc->set( $cacheKey, $cacheValue, 86400 );
-                       wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
+
+                       // T111289: Cache values should not exceed 1 Mb, but they do.
+                       if ( strlen( $cacheValue ) <= 1e6 ) {
+                               $wgMemc->set( $cacheKey, $cacheValue, 86400 );
+                               wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
+                       }
                }
 
                return $rootNode;