Page MenuHomePhabricator

InvariantException: Invariant failed: Comments are always preceded by headings
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   Wikimedia\Assert\InvariantException: Invariant failed: Comments are always preceded by headings
exception.trace
from /srv/mediawiki/php-1.37.0-wmf.18/vendor/wikimedia/assert/src/Assert.php(224)
#0 /srv/mediawiki/php-1.37.0-wmf.18/extensions/DiscussionTools/includes/Notifications/EventDispatcher.php(119): Wikimedia\Assert\Assert::invariant(boolean, string)
#1 /srv/mediawiki/php-1.37.0-wmf.18/extensions/DiscussionTools/includes/Notifications/EventDispatcher.php(144): MediaWiki\Extension\DiscussionTools\Notifications\EventDispatcher::groupCommentsByThreadAndName(array)
#2 /srv/mediawiki/php-1.37.0-wmf.18/extensions/DiscussionTools/includes/Notifications/EventDispatcher.php(102): MediaWiki\Extension\DiscussionTools\Notifications\EventDispatcher::generateEventsFromParsers(array, MediaWiki\Extension\DiscussionTools\CommentParser, MediaWiki\Extension\DiscussionTools\CommentParser, MediaWiki\Revision\RevisionStoreRecord, Title, User)
#3 /srv/mediawiki/php-1.37.0-wmf.18/extensions/DiscussionTools/includes/Hooks/EchoHooks.php(91): MediaWiki\Extension\DiscussionTools\Notifications\EventDispatcher::generateEventsForRevision(array, MediaWiki\Revision\RevisionStoreRecord)
#4 /srv/mediawiki/php-1.37.0-wmf.18/includes/HookContainer/HookContainer.php(338): MediaWiki\Extension\DiscussionTools\Hooks\EchoHooks::onEchoGetEventsForRevision(array, MediaWiki\Revision\RevisionStoreRecord, boolean)
#5 /srv/mediawiki/php-1.37.0-wmf.18/includes/HookContainer/HookContainer.php(137): MediaWiki\HookContainer\HookContainer->callLegacyHook(string, array, array, array)
#6 /srv/mediawiki/php-1.37.0-wmf.18/includes/Hooks.php(137): MediaWiki\HookContainer\HookContainer->run(string, array, array)
#7 /srv/mediawiki/php-1.37.0-wmf.18/extensions/Echo/includes/DiscussionParser.php(165): Hooks::run(string, array)
#8 /srv/mediawiki/php-1.37.0-wmf.18/extensions/Echo/includes/EchoHooks.php(494): EchoDiscussionParser::generateEventsForRevision(MediaWiki\Revision\RevisionStoreRecord, boolean)
#9 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/MWCallableUpdate.php(38): EchoHooks::{closure}()
#10 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/DeferredUpdates.php(515): MWCallableUpdate->doUpdate()
#11 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/DeferredUpdates.php(391): DeferredUpdates::attemptUpdate(MWCallableUpdate, Wikimedia\Rdbms\LBFactoryMulti)
#12 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/DeferredUpdates.php(221): DeferredUpdates::run(MWCallableUpdate, Wikimedia\Rdbms\LBFactoryMulti, Monolog\Logger, BufferingStatsdDataFactory, string)
#13 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/DeferredUpdatesScope.php(267): DeferredUpdates::{closure}(MWCallableUpdate, integer)
#14 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/DeferredUpdatesScope.php(196): DeferredUpdatesScope->processStageQueue(integer, integer, Closure)
#15 /srv/mediawiki/php-1.37.0-wmf.18/includes/deferred/DeferredUpdates.php(242): DeferredUpdatesScope->processUpdates(integer, Closure)
#16 /srv/mediawiki/php-1.37.0-wmf.18/includes/MediaWiki.php(1136): DeferredUpdates::doUpdates(string)
#17 /srv/mediawiki/php-1.37.0-wmf.18/includes/MediaWiki.php(846): MediaWiki->restInPeace()
#18 /srv/mediawiki/php-1.37.0-wmf.18/includes/MediaWiki.php(584): MediaWiki->doPostOutputShutdown()
#19 /srv/mediawiki/php-1.37.0-wmf.18/index.php(53): MediaWiki->run()
#20 /srv/mediawiki/php-1.37.0-wmf.18/index.php(46): wfIndexMain()
#21 /srv/mediawiki/w/index.php(3): require(string)
#22 {main}
Impact
  1. Echo notifications will not be sent for some edits where they should have been
  2. logspam.
Notes

Not sure if there is visible breakage but there is quite a lot of logspam from this.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

This may be a train blocker (T281159) if the error rate goes up significantly after deploying to group2 wikis, however, it may be isolated to commons in which case I don't expect the error rate to change.

The impact of this is that Echo notifications will not be sent for some edits where they should have been. No other visible breakage.

I'll prepare a quick patch to fail more neatly in this case, and thus limit the impact further to only DiscussionTools notifications (which are pre-beta right now), which will unblock the train if backported. I'll investigate more closely tomorrow.

Change 712576 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/extensions/DiscussionTools@master] EventDispatcher: Remove failing invariant check

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

Change 711720 had a related patch set uploaded (by 20after4; author: Bartosz Dziewoński):

[mediawiki/extensions/DiscussionTools@wmf/1.37.0-wmf.18] EventDispatcher: Remove failing invariant check

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

Change 712576 merged by jenkins-bot:

[mediawiki/extensions/DiscussionTools@master] EventDispatcher: Remove failing invariant check

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

Change 711720 merged by jenkins-bot:

[mediawiki/extensions/DiscussionTools@wmf/1.37.0-wmf.18] EventDispatcher: Remove failing invariant check

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

Mentioned in SAL (#wikimedia-operations) [2021-08-12T21:13:19Z] <twentyafterfour@deploy1002> Synchronized php-1.37.0-wmf.18/extensions/DiscussionTools/includes/Notifications/EventDispatcher.php: sync Ic27418a0ec976347be5fa586bbd32cc4a0d8d511 to unblock the train refs T288775 and T281159 (duration: 01m 07s)

Deployed and no longer spamming logs. leaving the task open to track any further work but this is no longer a blocker.

Change 713054 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/extensions/DiscussionTools@master] EventDispatcher: Fix ignoring level 3+ headings

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

Change 713054 merged by jenkins-bot:

[mediawiki/extensions/DiscussionTools@master] EventDispatcher: Fix ignoring level 3+ headings

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

matmarex added a project: Skipped QA.

Logstash search showing the errors, for reference: https://logstash.wikimedia.org/goto/bf4338fa3af353cd46d05eb959c76dd8

image.png (511×2 px, 67 KB)

The errors occurred on pages that started with a level 3 heading, without any level 2 headings or comments preceding it. DiscussionTools topic subscription feature only allows subscribing to level 2 headings, and so it tried to find the preceding level 2 heading to generate notifications for those subscribed to it, and failed when there wasn't one.

ppelberg claimed this task.