Page MenuHomePhabricator

PHP warnings about bad gzinflate thrown during XML stubs dumps Dec 2021
Open, MediumPublic

Description

This morning Amir noticed a lot of entries in logstash of the form

PHP Warning: gzinflate(): data error

form snapshot1013. Full sample stack trace below:

from /srv/mediawiki/php-1.38.0-wmf.9/includes/Storage/SqlBlobStore.php(587)
#0 [internal function]: MWExceptionHandler::handleError(integer, string, string, integer, array)
#1 /srv/mediawiki/php-1.38.0-wmf.9/includes/Storage/SqlBlobStore.php(587): gzinflate(string)
#2 /srv/mediawiki/php-1.38.0-wmf.9/includes/Storage/SqlBlobStore.php(517): MediaWiki\Storage\SqlBlobStore->decompressData(string, array)
#3 /srv/mediawiki/php-1.38.0-wmf.9/includes/Storage/SqlBlobStore.php(426): MediaWiki\Storage\SqlBlobStore->expandBlob(string, array, string)
#4 /srv/mediawiki/php-1.38.0-wmf.9/includes/Storage/SqlBlobStore.php(281): MediaWiki\Storage\SqlBlobStore->fetchBlobs(array, integer)
#5 /srv/mediawiki/php-1.38.0-wmf.9/includes/libs/objectcache/wancache/WANObjectCache.php(1689): MediaWiki\Storage\SqlBlobStore->MediaWiki\Storage\{closure}(boolean, integer, array, NULL, array)
#6 /srv/mediawiki/php-1.38.0-wmf.9/includes/libs/objectcache/wancache/WANObjectCache.php(1518): WANObjectCache->fetchOrRegenerate(string, integer, Closure, array, array)
#7 /srv/mediawiki/php-1.38.0-wmf.9/includes/Storage/SqlBlobStore.php(286): WANObjectCache->getWithSetCallback(string, integer, Closure, array)
#8 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/RevisionStore.php(1182): MediaWiki\Storage\SqlBlobStore->getBlob(string, integer)
#9 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/RevisionStore.php(1456): MediaWiki\Revision\RevisionStore->loadSlotContent(MediaWiki\Revision\SlotRecord, NULL, NULL, NULL, integer)
#10 [internal function]: MediaWiki\Revision\RevisionStore->MediaWiki\Revision\{closure}(MediaWiki\Revision\SlotRecord)
#11 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/SlotRecord.php(322): call_user_func(Closure, MediaWiki\Revision\SlotRecord)
#12 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/SlotRecord.php(569): MediaWiki\Revision\SlotRecord->getContent()
#13 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/RevisionSlots.php(205): MediaWiki\Revision\SlotRecord->getSha1()
#14 [internal function]: MediaWiki\Revision\RevisionSlots::MediaWiki\Revision\{closure}(NULL, MediaWiki\Revision\SlotRecord)
#15 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/RevisionSlots.php(207): array_reduce(array, Closure, NULL)
#16 /srv/mediawiki/php-1.38.0-wmf.9/includes/Revision/RevisionStoreRecord.php(171): MediaWiki\Revision\RevisionSlots->computeSha1()
#17 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/XmlDumpWriter.php(405): MediaWiki\Revision\RevisionStoreRecord->getSha1()
#18 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/XmlDumpWriter.php(317): XmlDumpWriter::{closure}()
#19 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/XmlDumpWriter.php(407): XmlDumpWriter->invokeLenient(Closure, string)
#20 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/WikiExporter.php(551): XmlDumpWriter->writeRevision(stdClass, array)
#21 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/WikiExporter.php(493): WikiExporter->outputPageStreamBatch(Wikimedia\Rdbms\MysqliResultWrapper, stdClass)
#22 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/WikiExporter.php(314): WikiExporter->dumpPages(string, boolean)
#23 /srv/mediawiki/php-1.38.0-wmf.9/includes/export/WikiExporter.php(197): WikiExporter->dumpFrom(string, boolean)
#24 /srv/mediawiki/php-1.38.0-wmf.9/maintenance/includes/BackupDumper.php(322): WikiExporter->pagesByRange(integer, integer, boolean)
#25 /srv/mediawiki/php-1.38.0-wmf.9/maintenance/dumpBackup.php(82): BackupDumper->dump(integer, integer)
#26 /srv/mediawiki/php-1.38.0-wmf.9/maintenance/doMaintenance.php(108): DumpBackup->execute()
#27 /srv/mediawiki/php-1.38.0-wmf.9/maintenance/dumpBackup.php(144): require_once(string)
#28 /srv/mediawiki/multiversion/MWScript.php(116): require_once(string)
#29 {main}

I think these are likely a consequence of https://gerrit.wikimedia.org/r/c/mediawiki/core/+/731246 which can change the exception thrown when a bad blob is encountered.

Event Timeline

ArielGlenn triaged this task as Medium priority.Dec 1 2021, 10:56 AM
ArielGlenn created this task.

Change 742943 had a related patch set uploaded (by ArielGlenn; author: ArielGlenn):

[mediawiki/core@master] during XML dumps, don't log about bad blobs encountered when trying to get sha1

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

Adding @daniel who has shepherded these patches through in the past, and also @CCicalese_WMF for awareness.

ArielGlenn renamed this task from PHP warnings about bad gzdeflate thrown during XML stubs dumps Dec 2021 to PHP warnings about bad gzinflate thrown during XML stubs dumps Dec 2021.Dec 1 2021, 10:59 AM

You can do something like this:

use Wikimedia\AtEase\AtEase;

AtEase::suppressWarnings();
$file = fopen( $this->mFilename, 'rb' );
AtEase::restoreWarnings();

Change 742943 merged by jenkins-bot:

[mediawiki/core@master] during XML dumps, don't log about bad blobs encountered when trying to get sha1

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