Last modified: 2014-09-30 17:11:47 UTC
There is an inconsistency in how hhvm handles / [de]serializes items (specifically statements) vs. php5. We have test.wikidata on hhvm only We have test2.wikipedia which has hhvm as a beta feature, so you can have hhvm or not. If I use the property parser function on a connected page, then the entity is loaded via CachingEntityRevisionLookup (memcached). If I am using hhvm, then it works. If I use php5 then I get a stacktrace. If I remove the statements from the associated item, then then no stacktrace on the test2 page. Unexpected non-MediaWiki exception encountered, of type "UnexpectedValueException" [b084b1ad] /wiki/Kitten Exception from line 124 of /srv/mediawiki/php-1.25wmf1/includes/objectcache/MemcachedPeclBagOStuff.php: Error at offset 0 of 6 bytes Backtrace: #0 [internal function]: SplObjectStorage->unserialize(string) #1 /srv/mediawiki/php-1.25wmf1/includes/objectcache/MemcachedPeclBagOStuff.php(124): Memcached->get(string, NULL, NULL) #2 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/CachingEntityRevisionLookup.php(107): MemcachedPeclBagOStuff->get(string) #3 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/CachingEntityRevisionLookup.php(146): Wikibase\Lib\Store\CachingEntityRevisionLookup->getEntityRevision(Wikibase\DataModel\Entity\ItemId, integer) #4 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/CachingEntityRevisionLookup.php(126): Wikibase\Lib\Store\CachingEntityRevisionLookup->fetchEntityRevision(Wikibase\DataModel\Entity\ItemId, integer) #5 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/RevisionBasedEntityLookup.php(41): Wikibase\Lib\Store\CachingEntityRevisionLookup->getEntityRevision(Wikibase\DataModel\Entity\ItemId) #6 [internal function]: Wikibase\Lib\Store\RevisionBasedEntityLookup->getEntity(Wikibase\DataModel\Entity\ItemId) #7 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/EntityRedirectResolvingDecorator.php(79): call_user_func_array(array, array) #8 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/RedirectResolvingEntityLookup.php(50): Wikibase\Lib\Store\EntityRedirectResolvingDecorator->__call(string, array) #9 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/RedirectResolvingEntityLookup.php(50): Wikibase\Lib\Store\EntityRedirectResolvingDecorator->getEntity(Wikibase\DataModel\Entity\ItemId) #10 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/SnaksFinder.php(55): Wikibase\Lib\Store\RedirectResolvingEntityLookup->getEntity(Wikibase\DataModel\Entity\ItemId) #11 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php(107): Wikibase\DataAccess\PropertyParserFunction\SnaksFinder->findSnaks(Wikibase\DataModel\Entity\ItemId, string, string) #12 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php(49): Wikibase\DataAccess\PropertyParserFunction\LanguageAwareRenderer->getStatus(Wikibase\DataModel\Entity\ItemId, string) #13 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/Runner.php(73): Wikibase\DataAccess\PropertyParserFunction\LanguageAwareRenderer->render(Wikibase\DataModel\Entity\ItemId, string) #14 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/Runner.php(120): Wikibase\DataAccess\PropertyParserFunction\Runner->runPropertyParserFunction(Parser, string) #15 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/client/includes/hooks/ParserFunctionRegistrant.php(46): Wikibase\DataAccess\PropertyParserFunction\Runner::render(Parser, string) #16 [internal function]: Wikibase\Client\Hooks\{closure}(Parser, string) #17 /srv/mediawiki/php-1.25wmf1/includes/parser/Parser.php(3768): call_user_func_array(Closure, array) #18 /srv/mediawiki/php-1.25wmf1/includes/parser/Parser.php(3486): Parser->callParserFunction(PPFrame_DOM, string, array) #19 /srv/mediawiki/php-1.25wmf1/includes/parser/Preprocessor_DOM.php(1179): Parser->braceSubstitution(array, PPFrame_DOM) #20 /srv/mediawiki/php-1.25wmf1/includes/parser/Parser.php(3296): PPFrame_DOM->expand(PPNode_DOM, integer) #21 /srv/mediawiki/php-1.25wmf1/includes/parser/Parser.php(1254): Parser->replaceVariables(string) #22 /srv/mediawiki/php-1.25wmf1/includes/parser/Parser.php(420): Parser->internalParse(string) #23 /srv/mediawiki/php-1.25wmf1/includes/content/WikitextContent.php(338): Parser->parse(string, Title, ParserOptions, boolean, boolean, integer) #24 /srv/mediawiki/php-1.25wmf1/includes/content/AbstractContent.php(490): WikitextContent->fillParserOutput(Title, integer, ParserOptions, boolean, ParserOutput) #25 /srv/mediawiki/php-1.25wmf1/includes/poolcounter/PoolWorkArticleView.php(139): AbstractContent->getParserOutput(Title, integer, ParserOptions) #26 /srv/mediawiki/php-1.25wmf1/includes/poolcounter/PoolCounterWork.php(123): PoolWorkArticleView->doWork() #27 /srv/mediawiki/php-1.25wmf1/includes/page/Article.php(688): PoolCounterWork->execute() #28 /srv/mediawiki/php-1.25wmf1/includes/actions/ViewAction.php(44): Article->view() #29 /srv/mediawiki/php-1.25wmf1/includes/MediaWiki.php(414): ViewAction->show() #30 /srv/mediawiki/php-1.25wmf1/includes/MediaWiki.php(282): MediaWiki->performAction(Article, Title) #31 /srv/mediawiki/php-1.25wmf1/includes/MediaWiki.php(584): MediaWiki->performRequest() #32 /srv/mediawiki/php-1.25wmf1/includes/MediaWiki.php(435): MediaWiki->main() #33 /srv/mediawiki/php-1.25wmf1/index.php(46): MediaWiki->run() #34 /srv/mediawiki/w/index.php(3): require(string)
also, this was not a problem before we switched to DataModel 1.0
We actually put full EntityRevision objects into memcached, including the contained Entity objects. I can very well imagine that hhvm's implementation of "native" object serialization differs from vanilla php's. For further analysis, it would be useful to get our hands on the actual blob. However, I fear native serialization will remain a problem if fundamentally different versions of php keep sharing a memcached instance. This may mean we have to serialize/unserialize explicitly.
Change 163842 had a related patch set uploaded by Hoo man: Split Wikibase's entity cache for HHVM/Zend https://gerrit.wikimedia.org/r/163842
Change 163842 merged by jenkins-bot: Split Wikibase's entity cache for HHVM/Zend https://gerrit.wikimedia.org/r/163842
Dupe of 70747, which contains an actual blob, too. *** This bug has been marked as a duplicate of bug 70747 ***