Make makeKeyInternal() limit more conservative
authorAaron Schulz <aschulz@wikimedia.org>
Mon, 2 Nov 2015 03:19:38 +0000 (19:19 -0800)
committerAaron Schulz <aschulz@wikimedia.org>
Mon, 2 Nov 2015 03:37:21 +0000 (19:37 -0800)
This should avoid error log entries for long WAN cache keys

Change-Id: I401482d25dd5bf47052a3c6729c5f8bc9fd68770

includes/libs/objectcache/MemcachedBagOStuff.php
tests/phpunit/includes/objectcache/MemcachedBagOStuffTest.php

index ef6b3c7..162a531 100644 (file)
@@ -103,8 +103,9 @@ class MemcachedBagOStuff extends BagOStuff {
        public function makeKeyInternal( $keyspace, $args ) {
                // Memcached keys have a maximum length of 255 characters. From that,
                // subtract the number of characters we need for the keyspace and for
-               // the separator character needed for each argument.
-               $charsLeft = 255 - strlen( $keyspace ) - count( $args );
+               // the separator character needed for each argument. To handle some
+               // custom prefixes used by thing like WANObjectCache, limit to 205.
+               $charsLeft = 205 - strlen( $keyspace ) - count( $args );
 
                $args = array_map(
                        function ( $arg ) use ( &$charsLeft ) {
index 3e3bac3..904ddbb 100644 (file)
@@ -42,7 +42,7 @@ class MemcachedBagOStuffTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals(
-                       'test:##5820ad1d105aa4dc698585c39df73e19',
+                       'test:##dc89dcb43b28614da27660240af478b5',
                        $this->cache->makeKey( '𝕖𝕧𝕖𝕟', '𝕚𝕗', '𝕨𝕖', '𝕄𝔻𝟝', '𝕖𝕒𝕔𝕙',
                                '𝕒𝕣𝕘𝕦𝕞𝕖𝕟𝕥', '𝕥𝕙𝕚𝕤', '𝕜𝕖𝕪', '𝕨𝕠𝕦𝕝𝕕', '𝕤𝕥𝕚𝕝𝕝', '𝕓𝕖', '𝕥𝕠𝕠', '𝕝𝕠𝕟𝕘' )
                );