Last modified: 2011-01-06 15:15:31 UTC
Found this interesting backtrace in our error log. The trace looks sane until it hits #2 ../MessageBlobStore.php(311): wfMsgExt(17, Array) [30-Dec-2010 21:33:36] /w/i.php?title=Special:Nuke&action=delete: Exception: Non-string key given #0 /www/w/includes/GlobalFunctions.php(751): MessageCache->get(17, true, Object(Language)) #1 /www/w/includes/GlobalFunctions.php(872): wfMsgGetKey(17, true, Object(Language), false) #2 /www/w/includes/MessageBlobStore.php(311): wfMsgExt(17, Array) #3 /www/w/includes/MessageBlobStore.php(294): MessageBlobStore::reencodeBlob('{"collapsible-e...', 17, 'af') #4 /www/w/includes/MessageBlobStore.php(211): MessageBlobStore::getUpdatesForMessage(17, Array) #5 /www/w/includes/MessageCache.php(461): MessageBlobStore::updateMessage('collapsible-col...') #6 /www/w/includes/Article.php(4119): MessageCache->replace('Collapsible-col...', false) #7 /www/w/includes/Article.php(3286): Article::onArticleDelete(Object(Title)) #8 /www/w/includes/Article.php(3123): Article->doDeleteArticle('Mass deletion o...', false, 1781209) #9 /www/w/extensions/Nuke/Nuke_body.php(190): Article->doDelete('Mass deletion o...') #10 /www/w/extensions/Nuke/Nuke_body.php(37): SpecialNuke->doDelete(Array, 'Mass deletion o...') #11 /www/w/includes/SpecialPage.php(587): SpecialNuke->execute(NULL) #12 /www/w/includes/Wiki.php(245): SpecialPage::executePath(Object(Title)) #13 /www/w/includes/Wiki.php(63): MediaWiki->handleSpecialCases(Object(Title), Object(OutputPage), Object(WebRequest)) #14 /www/w/index.php(104): MediaWiki->performRequestForTitle(Object(Title), NULL, Object(OutputPage), Object(User), Object(WebRequest)) #15 {main}
There is variable collision in MessageBlobStore::updateMessage(), foreach overwrites the method parameter.
(In reply to comment #1) > There is variable collision in MessageBlobStore::updateMessage(), foreach > overwrites the method parameter. Thanks for tracking this down, I'll fix this when I get the chance.
Fixed the variable collision in r79722. This is virtually certain to have been the cause of the bug, but because it only happens for conflicted updates (i.e. when two processes are updating the same blob concurrently), it's virtually impossible to test. Closing as FIXED anyway, reopen if the error appears again.