Page MenuHomePhabricator

Type mismatch exceptions in various Serializers
Closed, ResolvedPublic

Description

mw1196 wikidatawiki: [26dffaf0] /w/api.php Exception from line 429 of /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/HashArray.php: Can only add Wikibase\DataModel\Snak\Snak implementing objects to Wikibase\DataModel\Snak\SnakList.
#0 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/HashArray.php(393): Wikibase\DataModel\HashArray->setElement('P143', Array)
#1 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/HashArray.php(81): Wikibase\DataModel\HashArray->offsetSet('P143', Array)
#2 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/Reference.php(67): Wikibase\DataModel\HashArray->__construct(Array)
#3 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ClaimHtmlGenerator.php(187): Wikibase\DataModel\Reference->getHash()
#4 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ClaimHtmlGenerator.php(151): Wikibase\ClaimHtmlGenerator->getHtmlForReference(Object(Wikibase\DataModel\Reference), Array)
#5 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ClaimHtmlGenerator.php(98): Wikibase\ClaimHtmlGenerator->getHtmlForReferences(Object(Wikibase\DataModel\ReferenceList), Array)
#6 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/View/ClaimsView.php(206): Wikibase\ClaimHtmlGenerator->getHtmlForClaim(Object(Wikibase\DataModel\Statement\Statement), Array, '<span class="wb...')
#7 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/View/ClaimsView.php(87): Wikibase\Repo\View\ClaimsView->getHtmlForClaimGroup(Array, Array)
#8 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ItemView.php(34): Wikibase\Repo\View\ClaimsView->getHtml(Array, 'wikibase-statem...')
#9 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EntityView.php(115): Wikibase\ItemView->getInnerHtml(Object(Wikibase\EntityRevision), true)
#10 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php(142): Wikibase\EntityView->getHtml(Object(Wikibase\EntityRevision), true)
#11 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php(90): Wikibase\EntityParserOutputGenerator->addHtmlToParserOutput(Object(ParserOutput), Object(Wikibase\EntityRevision), true)
#12 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityContent.php(264): Wikibase\EntityParserOutputGenerator->getParserOutput(Object(Wikibase\EntityRevision), true, true)
#13 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityContent.php(210): Wikibase\EntityContent->getParserOutputFromEntityView(Object(Title), NULL, Object(ParserOptions), true)
#14 /srv/mediawiki/php-1.25wmf1/includes/page/WikiPage.php(2145): Wikibase\EntityContent->getParserOutput(Object(Title), NULL, Object(ParserOptions))
#15 /srv/mediawiki/php-1.25wmf1/extensions/TemplateData/TemplateData.hooks.php(71): WikiPage->prepareContentForEdit(Object(Wikibase\ItemContent), NULL, Object(User), 'application/jso...')
#16 [internal function]: TemplateDataHooks::onPageContentSave(Object(WikiPage), Object(User), Object(Wikibase\ItemContent), '/* wbsetclaim-c...', 0, NULL, NULL, 66, Object(Status))
#20 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php(247): WikiPage->doEditContent(Object(Wikibase\ItemContent), '/* wbsetclaim-c...', 66, 160850544, Object(User))
#21 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php(148): Wikibase\Repo\Store\WikiPageEntityStore->saveEntityContent(Object(Wikibase\ItemContent), '/* wbsetclaim-c...', Object(User), 66, 160850544)
#22 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EditEntity.php(720): Wikibase\Repo\Store\WikiPageEntityStore->saveEntity(Object(Wikibase\DataModel\Entity\Item), '/* wbsetclaim-c...', Object(User), 66, 160850544)
#23 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/ApiWikibase.php(446): Wikibase\EditEntity->attemptSave('/* wbsetclaim-c...', 2, '1614f8f17bc608f...')
#24 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/ModifyClaim.php(68): Wikibase\Api\ApiWikibase->attemptSaveEntity(Object(Wikibase\DataModel\Entity\Item), Object(Wikibase\Summary), 2)
#25 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/SetClaim.php(82): Wikibase\Api\ModifyClaim->saveChanges(Object(Wikibase\DataModel\Entity\Item), Object(Wikibase\Summary))
#26 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(932): Wikibase\Api\SetClaim->execute()


Version: unspecified
Severity: major
Whiteboard: u=dev c=backend p=8 s=2014-10-28

Details

Reference
bz71479

Related Objects

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 22 2014, 3:51 AM
bzimport set Reference to bz71479.
bzimport added a subscriber: Unknown Object (MLST).

2014-10-01 09:15:28 mw1122 wikidatawiki: [846d5661] /w/api.php Exception from line 145 of /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/EntityContentDataCodec.php: SnaksSerializer can only serialize Snaks objects
#0 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityHandler.php(356): Wikibase\Lib\Store\EntityContentDataCodec->encodeEntity(Object(Wikibase\DataModel\Entity\Item), 'application/jso...')
#1 /srv/mediawiki/php-1.25wmf1/includes/content/AbstractContent.php(151): Wikibase\Repo\Content\EntityHandler->serializeContent(Object(Wikibase\ItemContent), 'application/jso...')
#2 /srv/mediawiki/php-1.25wmf1/includes/page/WikiPage.php(2154): AbstractContent->serialize('application/jso...')
#3 /srv/mediawiki/php-1.25wmf1/extensions/TemplateData/TemplateData.hooks.php(71): WikiPage->prepareContentForEdit(Object(Wikibase\ItemContent), NULL, Object(User), 'application/jso...')
#4 [internal function]: TemplateDataHooks::onPageContentSave(Object(WikiPage), Object(User), Object(Wikibase\ItemContent), '/* wbsetclaim-c...', 0, NULL, NULL, 66, Object(Status))
#5 /srv/mediawiki/php-1.25wmf1/includes/Hooks.php(206): call_user_func_array('TemplateDataHoo...', Array)
#6 /srv/mediawiki/php-1.25wmf1/includes/GlobalFunctions.php(3991): Hooks::run('PageContentSave', Array, NULL)
#7 /srv/mediawiki/php-1.25wmf1/includes/page/WikiPage.php(1780): wfRunHooks('PageContentSave', Array)
#8 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php(247): WikiPage->doEditContent(Object(Wikibase\ItemContent), '/* wbsetclaim-c...', 66, 161007033, Object(User))
#9 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php(148): Wikibase\Repo\Store\WikiPageEntityStore->saveEntityContent(Object(Wikibase\ItemContent), '/* wbsetclaim-c...', Object(User), 66, 161007033)
#10 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EditEntity.php(720): Wikibase\Repo\Store\WikiPageEntityStore->saveEntity(Object(Wikibase\DataModel\Entity\Item), '/* wbsetclaim-c...', Object(User), 66, 161007033)
#11 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/ApiWikibase.php(446): Wikibase\EditEntity->attemptSave('/* wbsetclaim-c...', 2, '38e998a64050597...')
#12 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/ModifyClaim.php(68): Wikibase\Api\ApiWikibase->attemptSaveEntity(Object(Wikibase\DataModel\Entity\Item), Object(Wikibase\Summary), 2)
#13 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/SetClaim.php(82): Wikibase\Api\ModifyClaim->saveChanges(Object(Wikibase\DataModel\Entity\Item), Object(Wikibase\Summary))
#14 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(932): Wikibase\Api\SetClaim->execute()
#15 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(364): ApiMain->executeAction()
#16 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(335): ApiMain->executeActionWithErrorHandling()
#17 /srv/mediawiki/php-1.25wmf1/api.php(85): ApiMain->execute()
#18 /srv/mediawiki/w/api.php(3): require('/srv/mediawiki/...')
#19 {main}

same as above....

this is the reason for the error on https://www.wikidata.org/wiki/Q72

the error is not appearing in the logs but was able to produce it with Article::view()

Caught exception InvalidArgumentException: Can only add Wikibase\DataModel\Snak\Snak implementing objects to Wikibase\DataModel\Snak\SnakList, but found a array instead
#0 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/HashArray.php(393): Wikibase\DataModel\HashArray->setElement('P143', Array)
#1 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/HashArray.php(81): Wikibase\DataModel\HashArray->offsetSet('P143', Array)
#2 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model/src/Reference.php(67): Wikibase\DataModel\HashArray->__construct(Array)
#3 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ClaimHtmlGenerator.php(187): Wikibase\DataModel\Reference->getHash()
#4 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ClaimHtmlGenerator.php(151): Wikibase\ClaimHtmlGenerator->getHtmlForReference(Object(Wikibase\DataModel\Reference), Array)
#5 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ClaimHtmlGenerator.php(98): Wikibase\ClaimHtmlGenerator->getHtmlForReferences(Object(Wikibase\DataModel\ReferenceList), Array)
#6 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/View/ClaimsView.php(206): Wikibase\ClaimHtmlGenerator->getHtmlForClaim(Object(Wikibase\DataModel\Statement\Statement), Array, '<span class="wb...')
#7 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/View/ClaimsView.php(87): Wikibase\Repo\View\ClaimsView->getHtmlForClaimGroup(Array, Array)
#8 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/ItemView.php(34): Wikibase\Repo\View\ClaimsView->getHtml(Array, 'wikibase-statem...')
#9 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EntityView.php(115): Wikibase\ItemView->getInnerHtml(Object(Wikibase\EntityRevision), true)
#10 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php(142): Wikibase\EntityView->getHtml(Object(Wikibase\EntityRevision), true)
#11 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php(90): Wikibase\EntityParserOutputGenerator->addHtmlToParserOutput(Object(ParserOutput), Object(Wikibase\EntityRevision), true)
#12 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityContent.php(264): Wikibase\EntityParserOutputGenerator->getParserOutput(Object(Wikibase\EntityRevision), true, true)
#13 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityContent.php(210): Wikibase\EntityContent->getParserOutputFromEntityView(Object(Title), 160513146, Object(ParserOptions), true)
#14 /srv/mediawiki/php-1.25wmf1/includes/poolcounter/PoolWorkArticleView.php(139): Wikibase\EntityContent->getParserOutput(Object(Title), 160513146, Object(ParserOptions))
#15 /srv/mediawiki/php-1.25wmf1/includes/poolcounter/PoolCounterWork.php(123): PoolWorkArticleView->doWork()
#16 /srv/mediawiki/php-1.25wmf1/includes/page/Article.php(688): PoolCounterWork->execute()
#17 /srv/mediawiki/php-1.25wmf1/maintenance/eval.php(81) : eval()'d code(1): Article->view()
#18 /srv/mediawiki/php-1.25wmf1/maintenance/eval.php(81): eval()
#19 /srv/mediawiki/multiversion/MWScript.php(97): require_once('/srv/mediawiki/...')

doing the following produced the error:

$title = Title::newFromText( 'Q72' );
$page = WikiPage::factory( $title );
$content = $page->getContent();
$pout = $content->getParserOutput( $title );

gerritadmin wrote:

Change 164621 had a related patch set uploaded by Aude:
Pass string to wfTemplate in FingerprintView instead of Message

https://gerrit.wikimedia.org/r/164621

it seems to make a difference if FingerprintView::getHtmlForLabel is called (via EntityView::getHtmlForFingerprint) before ClaimsView::getHtml. If FingerprintView::getHtmlForLabel called, then we get the exception on Q72.

if calling ClaimsView::getHtml (on Q72) with $entityRevision->getEntity()->getClaims() directly, then no exception, no problem.

with more debugging, it seems the problem is:

$idInParentheses = wfMessage( 'parentheses', $id ) in FingerprintView::getHtmlForLabel and then it is passed to wfTemplate as a Message. Looking at the code, it might work via magic in the Template class (which itself extends Message) and suppose it does work on other items! but not on Q72.

if we convert this to a string before passing to the template, then the exception does not occur.

it still seems like something else weird is going on and think we should further investigate.

note that "$idInParentheses = wfMessage( 'parentheses', $id )" is something new in the branch we deployed this week.

definitely could be the issue although I find it odd how it affects references / SnakList. (instead getting an array of snaks in some cases)

gerritadmin wrote:

Change 164621 merged by jenkins-bot:
Pass string to wfTemplate in FingerprintView instead of Message

https://gerrit.wikimedia.org/r/164621

gerritadmin wrote:

Change 164767 had a related patch set uploaded by Aude:
Fix reference snaks handling in ClaimHtmlGenerator

https://gerrit.wikimedia.org/r/164767

When I fixed https://gerrit.wikimedia.org/r/#/c/164767/ but not apply https://gerrit.wikimedia.org/r/164621, then with Q72 I got:

Catchable fatal error: Object of class Wikibase\DataModel\Snak\PropertyValueSnak could not be converted to string in /srv/mediawiki/php-1.25wmf1/includes/cache/MessageCache.php on line 787

I think both fixes are required for fixing the issues with Q72.

I think there still is some other related issue(s) maybe in the serialization code for what is reported in comment #1 above.

some places where the issue has happened:

https://www.wikidata.org/wiki/Q1411015 - cannot add official website, http://www.rociomarquez.com/

wbsetclaim with:

'claim' => '{"type":"statement","mainsnak":{"snaktype":"value","property":"P856","datavalue":{"type":"string","value":"http://www.rociomarquez.com"}},"id":"Q1411015$839cad71-48e8-8a99-bbf9-bd7a94f907f0","qualifiers":{},"qualifiers-order":[],"rank":"normal"}
'index' => 0,
'baserevid' => 145736429,

https://www.wikidata.org/wiki/Q34

wbsetclaim with:

'claim' => '{"type":"statement","mainsnak":{"snaktype":"value","property":"P94","datavalue":{"type":"string","value":"Stora riksvapnet - Riksarkivet Sverige.png"}},"id":"q34$AE9AC7BC-8FE9-4A75-9D9F-3D49A5AE0D49","qualifiers":{},"qualifiers-order":[],"rank":"normal"}',
'index' => 55,
'baserevid' => 161367677,

https://www.wikidata.org/w/api.php?action=query&prop=revisions&revids=161954647&rvprop=content&rvparse=1&format=xml does not work

also:

https://www.wikidata.org/w/index.php?title=Q9358&action=edit&undoafter=156222333&undo=156222390

https://www.wikidata.org/w/index.php?title=Q1048&action=edit&undoafter=152185825&undo=152188325

gerritadmin wrote:

Change 164767 merged by Jeroen De Dauw:
Fix reference snaks handling in ClaimHtmlGenerator

https://gerrit.wikimedia.org/r/164767

gerritadmin wrote:

Change 164910 had a related patch set uploaded by Aude:
Fix reference snaks handling in ClaimHtmlGenerator

https://gerrit.wikimedia.org/r/164910

gerritadmin wrote:

Change 164913 had a related patch set uploaded by Aude:
Pass string to wfTemplate in FingerprintView instead of Message

https://gerrit.wikimedia.org/r/164913

gerritadmin wrote:

Change 164910 merged by jenkins-bot:
Fix reference snaks handling in ClaimHtmlGenerator

https://gerrit.wikimedia.org/r/164910

gerritadmin wrote:

Change 164913 merged by jenkins-bot:
Pass string to wfTemplate in FingerprintView instead of Message

https://gerrit.wikimedia.org/r/164913

gerritadmin wrote:

Change 164925 had a related patch set uploaded by Aude:
New deployment build, partial fix for bug 71479 and editing properties

https://gerrit.wikimedia.org/r/164925

gerritadmin wrote:

Change 164925 merged by jenkins-bot:
New deployment build, partial fix for bug 71479 and editing properties

https://gerrit.wikimedia.org/r/164925

gerritadmin wrote:

Change 164950 had a related patch set uploaded by Aude:
Update Wikidata, partial fix for bug 71479 and editing properties

https://gerrit.wikimedia.org/r/164950

gerritadmin wrote:

Change 164952 had a related patch set uploaded by Aude:
Update Wikidata, partial fix for bug 71479 and editing properties

https://gerrit.wikimedia.org/r/164952

gerritadmin wrote:

Change 164952 merged by jenkins-bot:
Update Wikidata, partial fix for bug 71479 and editing properties

https://gerrit.wikimedia.org/r/164952

gerritadmin wrote:

Change 164950 merged by jenkins-bot:
Update Wikidata, partial fix for bug 71479 and editing properties

https://gerrit.wikimedia.org/r/164950

the stacktrace in comment 1 is result of rethrowing the exception, so we don't have complete log.

we added in logging of the original exception and now have this:

2014-10-07 14:08:40 mw1143 wikidatawiki:/w/api.php Exception from line 53 of /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/SnaksSerializer.php: SnaksSerializer can only serialize Snaks objects
#0 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferenceSerializer.php(66): Wikibase\DataModel\Serializers\SnaksSerializer->serialize(NULL)
#1 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferenceSerializer.php(60): Wikibase\DataModel\Serializers\ReferenceSerializer->getSerialized(Object(Wikibase\DataModel\Reference))
#2 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferencesSerializer.php(65): Wikibase\DataModel\Serializers\ReferenceSerializer->serialize(Object(Wikibase\DataModel\Reference))
#3 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferencesSerializer.php(58): Wikibase\DataModel\Serializers\ReferencesSerializer->getSerialized(Object(Wikibase\DataModel\ReferenceList))
#4 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(115): Wikibase\DataModel\Serializers\ReferencesSerializer->serialize(Object(Wikibase\DataModel\ReferenceList))
#5 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(94): Wikibase\DataModel\Serializers\ClaimSerializer->addReferencesToSerialization(Object(Wikibase\DataModel\Statement\Statement), Array)
#6 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(81): Wikibase\DataModel\Serializers\ClaimSerializer->getSerialized(Object(Wikibase\DataModel\Statement\Statement))
#7 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimsSerializer.php(69): Wikibase\DataModel\Serializers\ClaimSerializer->serialize(Object(Wikibase\DataModel\Statement\Statement))
#8 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimsSerializer.php(59): Wikibase\DataModel\Serializers\ClaimsSerializer->getSerialized(Object(Wikibase\DataModel\Claim\Claims))
#9 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(145): Wikibase\DataModel\Serializers\ClaimsSerializer->serialize(Object(Wikibase\DataModel\Claim\Claims))
#10 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(81): Wikibase\DataModel\Serializers\EntitySerializer->addClaimsToSerialization(Object(Wikibase\DataModel\Entity\Item), Array)
#11 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(60): Wikibase\DataModel\Serializers\EntitySerializer->getSerialized(Object(Wikibase\DataModel\Entity\Item))
#12 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/vendor/serialization/serialization/src/Serializers/DispatchingSerializer.php(42): Wikibase\DataModel\Serializers\EntitySerializer->serialize(Object(Wikibase\DataModel\Entity\Item))
#13 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/lib/includes/store/EntityContentDataCodec.php(141): Serializers\DispatchingSerializer->serialize(Object(Wikibas\DataModel\Entity\Item))
#14 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityHandler.php(356): Wikibase\Lib\Store\EntityContentDataCodec->encodeEntity(Object(Wikibase\DataModel\Entity\Item), 'application/jso...')
#15 /srv/mediawiki/php-1.25wmf1/includes/content/AbstractContent.php(151): Wikibase\Repo\Content\EntityHandler->serializeContent(Object(Wikibase\ItemContent), 'application/jso...')
#16 /srv/mediawiki/php-1.25wmf1/includes/page/WikiPage.php(2154): AbstractContent->serialize('application/jso...')
#17 /srv/mediawiki/php-1.25wmf1/extensions/TemplateData/TemplateData.hooks.php(71): WikiPage->prepareContentForEdit(Object(Wikibase\ItemContent), NULL, Object(User), 'application/jso...')
#18 [internal function]: TemplateDataHooks::onPageContentSave(Object(WikiPage), Object(User), Object(Wikibase\ItemContent), '/* wbsetdescrip...', 0, NULL, NULL, 66, Object(Status))
#19 /srv/mediawiki/php-1.25wmf1/includes/Hooks.php(206): call_user_func_array('TemplateDataHoo...', Array)
#20 /srv/mediawiki/php-1.25wmf1/includes/GlobalFunctions.php(3991): Hooks::run('PageContentSave', Array, NULL)
#21 /srv/mediawiki/php-1.25wmf1/includes/page/WikiPage.php(1780): wfRunHooks('PageContentSave', Array)
#22 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php(247): WikiPage->doEditContent(Object(Wikibase\ItemContent), '/* wbsetdescrip...', 66, 162507752, Object(User))
#23 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php(148): Wikibase\Repo\Store\WikiPageEntityStore->saveEntityContent(Object(Wikibase\ItemContent), '/* wbsetdescrip...', Object(User), 66, 162507752)
#24 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/EditEntity.php(720): Wikibase\Repo\Store\WikiPageEntityStore->saveEntity(Object(Wikibase\DataModel\Entity\Item), '/* wbsetdescrip...', Object(User), 66, 162507752)
#25 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/ApiWikibase.php(446): Wikibase\EditEntity->attemptSave('/* wbsetdescrip...', 2, 'b0e12dae4847462...')
#26 /srv/mediawiki/php-1.25wmf1/extensions/Wikidata/extensions/Wikibase/repo/includes/api/ModifyEntity.php(371): Wikibase\Api\ApiWikibase->attemptSaveEntity(Object(Wikibase\DataModel\Entity\Item), Object(Wikibase\Summary), 2)
#27 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(932): Wikibase\Api\ModifyEntity->execute()
#28 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(364): ApiMain->executeAction()
#29 /srv/mediawiki/php-1.25wmf1/includes/api/ApiMain.php(335): ApiMain->executeActionWithErrorHandling()
#30 /srv/mediawiki/php-1.25wmf1/api.php(85): ApiMain->execute()
#31 /srv/mediawiki/w/api.php(3): require('/srv/mediawiki/...')

Probably the same problem, but different backtrace:

2014-10-09 22:51:43 mw1083 wikidatawiki: [29528d84] /w/index.php?title=Q159&action=submit&undo=162845169&undoafter=161366786 Exception from line 146 of /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/lib/includes/store/EntityContentDataCodec.php: SnaksSerializer can only serialize Snaks objects
#0 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityHandler.php(356): Wikibase\Lib\Store\EntityContentDataCodec->encodeEntity(Object(Wikibase\DataModel\Entity\Item), 'application/jso...')
#1 /srv/mediawiki/php-1.25wmf2/includes/content/AbstractContent.php(151): Wikibase\Repo\Content\EntityHandler->serializeContent(Object(Wikibase\ItemContent), 'application/jso...')
#2 /srv/mediawiki/php-1.25wmf2/includes/page/WikiPage.php(2154): AbstractContent->serialize('application/jso...')
#3 /srv/mediawiki/php-1.25wmf2/extensions/TemplateData/TemplateData.hooks.php(71): WikiPage->prepareContentForEdit(Object(Wikibase\ItemContent), NULL, Object(User), 'application/jso...')
#4 [internal function]: TemplateDataHooks::onPageContentSave(Object(WikiPage), Object(User), Object(Wikibase\ItemContent), 'Undid revision ...', 0, NULL, NULL, 2, Object(Status))
#5 /srv/mediawiki/php-1.25wmf2/includes/Hooks.php(206): call_user_func_array('TemplateDataHoo...', Array)
#6 /srv/mediawiki/php-1.25wmf2/includes/GlobalFunctions.php(3991): Hooks::run('PageContentSave', Array, NULL)
#7 /srv/mediawiki/php-1.25wmf2/includes/page/WikiPage.php(1780): wfRunHooks('PageContentSave', Array)
#8 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/actions/SubmitEntityAction.php(168): WikiPage->doEditContent(Object(Wikibase\ItemContent), 'Undid revision ...')
#9 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/actions/SubmitEntityAction.php(112): Wikibase\SubmitEntityAction->attemptSave(Object(Title), Object(Wikibase\ItemContent), 'Undid revision ...', '410a4cf2dc397bc...')
#10 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/actions/SubmitEntityAction.php(42): Wikibase\SubmitEntityAction->undo()
#11 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(414): Wikibase\SubmitEntityAction->show()
#12 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(282): MediaWiki->performAction(Object(Article), Object(Title))
#13 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(584): MediaWiki->performRequest()
#14 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(435): MediaWiki->main()
#15 /srv/mediawiki/php-1.25wmf2/index.php(46): MediaWiki->run()
#16 /srv/mediawiki/w/index.php(3): require('/srv/mediawiki/...')
#17 {main}

Other exception for the same(?) request:

2014-10-09 22:51:43 mw1083 wikidatawiki: [958baa81] /w/index.php?title=Q159&action=submit&undo=162845169&undoafter=161366786 Exception from line 53 of /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/SnaksSerializer.php: SnaksSerializer can only serialize Snaks objects
#0 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferenceSerializer.php(66): Wikibase\DataModel\Serializers\SnaksSerializer->serialize(NULL)
#1 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferenceSerializer.php(60): Wikibase\DataModel\Serializers\ReferenceSerializer->getSerialized(Object(Wikibase\DataModel\Reference))
#2 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferencesSerializer.php(65): Wikibase\DataModel\Serializers\ReferenceSerializer->serialize(Object(Wikibase\DataModel\Reference))
#3 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferencesSerializer.php(58): Wikibase\DataModel\Serializers\ReferencesSerializer->getSerialized(Object(Wikibase\DataModel\ReferenceList))
#4 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(115): Wikibase\DataModel\Serializers\ReferencesSerializer->serialize(Object(Wikibase\DataModel\ReferenceList))
#5 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(94): Wikibase\DataModel\Serializers\ClaimSerializer->addReferencesToSerialization(Object(Wikibase\DataModel\Statement\Statement), Array)
#6 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(81): Wikibase\DataModel\Serializers\ClaimSerializer->getSerialized(Object(Wikibase\DataModel\Statement\Statement))
#7 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimsSerializer.php(69): Wikibase\DataModel\Serializers\ClaimSerializer->serialize(Object(Wikibase\DataModel\Statement\Statement))
#8 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimsSerializer.php(59): Wikibase\DataModel\Serializers\ClaimsSerializer->getSerialized(Object(Wikibase\DataModel\Claim\Claims))
#9 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(145): Wikibase\DataModel\Serializers\ClaimsSerializer->serialize(Object(Wikibase\DataModel\Claim\Claims))
#10 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(81): Wikibase\DataModel\Serializers\EntitySerializer->addClaimsToSerialization(Object(Wikibase\DataModel\Entity\Item), Array)
#11 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(60): Wikibase\DataModel\Serializers\EntitySerializer->getSerialized(Object(Wikibase\DataModel\Entity\Item))
#12 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/vendor/serialization/serialization/src/Serializers/DispatchingSerializer.php(42): Wikibase\DataModel\Serializers\EntitySerializer->serialize(Object(Wikibase\DataModel\Entity\Item))
#13 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/lib/includes/store/EntityContentDataCodec.php(141): Serializers\DispatchingSerializer->serialize(Object(Wikibase\DataModel\Entity\Item))
#14 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityHandler.php(356): Wikibase\Lib\Store\EntityContentDataCodec->encodeEntity(Object(Wikibase\DataModel\Entity\Item), 'application/jso...')
#15 /srv/mediawiki/php-1.25wmf2/includes/content/AbstractContent.php(151): Wikibase\Repo\Content\EntityHandler->serializeContent(Object(Wikibase\ItemContent), 'application/jso...')
#16 /srv/mediawiki/php-1.25wmf2/includes/page/WikiPage.php(2154): AbstractContent->serialize('application/jso...')
#17 /srv/mediawiki/php-1.25wmf2/extensions/TemplateData/TemplateData.hooks.php(71): WikiPage->prepareContentForEdit(Object(Wikibase\ItemContent), NULL, Object(User), 'application/jso...')
#18 [internal function]: TemplateDataHooks::onPageContentSave(Object(WikiPage), Object(User), Object(Wikibase\ItemContent), 'Undid revision ...', 0, NULL, NULL, 2, Object(Status))
#19 /srv/mediawiki/php-1.25wmf2/includes/Hooks.php(206): call_user_func_array('TemplateDataHoo...', Array)
#20 /srv/mediawiki/php-1.25wmf2/includes/GlobalFunctions.php(3991): Hooks::run('PageContentSave', Array, NULL)
#21 /srv/mediawiki/php-1.25wmf2/includes/page/WikiPage.php(1780): wfRunHooks('PageContentSave', Array)
#22 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/actions/SubmitEntityAction.php(168): WikiPage->doEditContent(Object(Wikibase\ItemContent), 'Undid revision ...')
#23 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/actions/SubmitEntityAction.php(112): Wikibase\SubmitEntityAction->attemptSave(Object(Title), Object(Wikibase\ItemContent), 'Undid revision ...', '410a4cf2dc397bc...')
#24 /srv/mediawiki/php-1.25wmf2/extensions/Wikidata/extensions/Wikibase/repo/includes/actions/SubmitEntityAction.php(42): Wikibase\SubmitEntityAction->undo()
#25 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(414): Wikibase\SubmitEntityAction->show()
#26 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(282): MediaWiki->performAction(Object(Article), Object(Title))
#27 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(584): MediaWiki->performRequest()
#28 /srv/mediawiki/php-1.25wmf2/includes/MediaWiki.php(435): MediaWiki->main()
#29 /srv/mediawiki/php-1.25wmf2/index.php(46): MediaWiki->run()
#30 /srv/mediawiki/w/index.php(3): require('/srv/mediawiki/...')
#31 {main}

  • Bug 71667 has been marked as a duplicate of this bug. ***

cirrus indexing is also having trouble with accessing / deserializing items:

2014-10-15 09:41:20 mw1007 wikidatawiki: [4ef16d09] [no req] Exception from line 53 of /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/SnaksSerializer.php: SnaksSerializer can only serialize Snaks objects
#0 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferenceSerializer.php(66): Wikibase\DataModel\Serializers\SnaksSerializer->serialize(NULL)
#1 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferenceSerializer.php(60): Wikibase\DataModel\Serializers\ReferenceSerializer->getSerialized(Object(Wikibase\DataModel\Reference))
#2 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferencesSerializer.php(65): Wikibase\DataModel\Serializers\ReferenceSerializer->serialize(Object(Wikibase\DataModel\Reference))
#3 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ReferencesSerializer.php(58): Wikibase\DataModel\Serializers\ReferencesSerializer->getSerialized(Object(Wikibase\DataModel\ReferenceList))
#4 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(115): Wikibase\DataModel\Serializers\ReferencesSerializer->serialize(Object(Wikibase\DataModel\ReferenceList))
#5 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(94): Wikibase\DataModel\Serializers\ClaimSerializer->addReferencesToSerialization(Object(Wikibase\DataModel\Statement\Statement), Array)
#6 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimSerializer.php(81): Wikibase\DataModel\Serializers\ClaimSerializer->getSerialized(Object(Wikibase\DataModel\Statement\Statement))
#7 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimsSerializer.php(69): Wikibase\DataModel\Serializers\ClaimSerializer->serialize(Object(Wikibase\DataModel\Statement\Statement))
#8 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/ClaimsSerializer.php(59): Wikibase\DataModel\Serializers\ClaimsSerializer->getSerialized(Object(Wikibase\DataModel\Claim\Claims))
#9 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(145): Wikibase\DataModel\Serializers\ClaimsSerializer->serialize(Object(Wikibase\DataModel\Claim\Claims))
#10 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(81): Wikibase\DataModel\Serializers\EntitySerializer->addClaimsToSerialization(Object(Wikibase\DataModel\Entity\Item), Array)
#11 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/wikibase/data-model-serialization/src/Serializers/EntitySerializer.php(60): Wikibase\DataModel\Serializers\EntitySerializer->getSerialized(Object(Wikibase\DataModel\Entity\Item))
#12 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/vendor/serialization/serialization/src/Serializers/DispatchingSerializer.php(42): Wikibase\DataModel\Serializers\EntitySerializer->serialize(Object(Wikibase\DataModel\Entity\Item))
#13 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityContent.php(581): Serializers\DispatchingSerializer->serialize(Object(Wikibase\DataModel\Entity\Item))
#14 /srv/mediawiki/php-1.25wmf3/extensions/Wikidata/extensions/Wikibase/repo/includes/content/EntityContent.php(590): Wikibase\EntityContent->getNativeData()
#15 /srv/mediawiki/php-1.25wmf3/extensions/CirrusSearch/includes/BuildDocument/PageTextBuilder.php(58): Wikibase\EntityContent->getSize()
#16 /srv/mediawiki/php-1.25wmf3/extensions/CirrusSearch/includes/Updater.php(338): CirrusSearch\BuildDocument\PageTextBuilder->build()
#17 /srv/mediawiki/php-1.25wmf3/extensions/CirrusSearch/includes/Updater.php(192): CirrusSearch\Updater->buildDocumentsForPages(Array, 0)
#18 /srv/mediawiki/php-1.25wmf3/extensions/CirrusSearch/includes/Updater.php(67): CirrusSearch\Updater->updatePages(Array, '1ms', 120, 0)
#19 /srv/mediawiki/php-1.25wmf3/extensions/CirrusSearch/includes/Job/LinksUpdate.php(49): CirrusSearch\Updater->updateFromTitle(Object(Title))
#20 /srv/mediawiki/php-1.25wmf3/extensions/CirrusSearch/includes/Job/Job.php(57): CirrusSearch\Job\LinksUpdate->doJob()
#21 /srv/mediawiki/php-1.25wmf3/includes/jobqueue/JobRunner.php(136): CirrusSearch\Job\Job->run()
#22 /srv/mediawiki/php-1.25wmf3/maintenance/runJobs.php(80): JobRunner->run(Array)
#23 /srv/mediawiki/php-1.25wmf3/maintenance/doMaintenance.php(101): RunJobs->execute()
#24 /srv/mediawiki/php-1.25wmf3/maintenance/runJobs.php(95): require_once('/srv/mediawiki/...')
#25 /srv/mediawiki/multiversion/MWScript.php(97): require_once('/srv/mediawiki/...')

upon further investigation, php bug "SplObjectStorage contains corrupt member variables after garbage collection" sounds suspicious:

https://bugs.php.net/bug.php?id=65967

When trying to undo an edit that involved references, on my dev wiki, I am experiencing this issue, as well as Wikibase\Repo\Diff\ClaimDifferenceVisualizer::getSnakListValues() must be an instance of Wikibase\DataModel\Snak\SnakList (the value here tends to be a variety of things, for example:

'snaks' => '1' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '1' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . 'Ë\x02\x08\x01' . "\0" . '' . "\0" . '' . "\0" . 'z' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '\x06' . "\0" . '' . "\0" . '' . "\0" . '',

))

or null. ("\0" represents null within private properties)

  • Bug 71536 has been marked as a duplicate of this bug. ***

sometimes the value of 'snaks' passed to ClaimDifferenceVisualizer::getSnakListValues() is a Term! when trying to undo something

wikidata-services wrote:

Commit pushed to referencelist at https://github.com/wmde/WikibaseDataModel

https://github.com/wmde/WikibaseDataModel/commit/05bd532e3ce6f5b9e31259b70acbca27f778e40c
Implement serializable in ReferenceList

Relying on SplObjectStorage serialization seems to be
problematic, especially when used with a large Item.

This converts the ReferenceList to a plain array
of Reference objects when serializing, which is more
reliable.

This appears to resolve the problems with ReferenceList
objects becoming corrupt.

Bug: 71479

change has been deployed and think this is no longer a problem :)