Page MenuHomePhabricator

PHP Warning: DOMNode::appendChild(): Document Fragment is empty
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
  • service.version: 1.45.0-wmf.23
  • timestamp: 2025-10-15T08:48:27.772Z
  • labels.phpversion: 8.1.33
  • trace.id: 57b07c06-8780-49e4-88b0-5ecf7fa1e119
  • Find trace.id in Logstash
labels.normalized_message
[{reqId}] {exception_url}   PHP Warning: DOMNode::appendChild(): Document Fragment is empty
FrameLocationCall
from/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/ContentDOMTransformStage.php(70)
#0[internal function]MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/ContentDOMTransformStage.php(70)DOMNode->appendChild(Wikimedia\Parsoid\DOM\DocumentFragment)
#2/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/Stages/HandleTOCMarkersDOM.php(183)MediaWiki\OutputTransform\ContentDOMTransformStage->createElement(Wikimedia\Parsoid\DOM\Document, string, array, Wikimedia\Parsoid\DOM\DocumentFragment)
#3/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/Stages/HandleTOCMarkersDOM.php(111)MediaWiki\OutputTransform\Stages\HandleTOCMarkersDOM->generateTocContent(Wikimedia\Parsoid\Core\TOCData, int, Wikimedia\Parsoid\DOM\Document)
#4/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/Stages/HandleTOCMarkersDOM.php(62)MediaWiki\OutputTransform\Stages\HandleTOCMarkersDOM->generateToc(Wikimedia\Parsoid\Core\TOCData, LanguageMy, Wikimedia\Parsoid\DOM\Document, int)
#5/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/Stages/HandleTOCMarkersDOM.php(38)MediaWiki\OutputTransform\Stages\HandleTOCMarkersDOM->injectToc(MediaWiki\Parser\ParserOutput, array, Wikimedia\Parsoid\DOM\Element)
#6/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/ContentDOMTransformStage.php(34)MediaWiki\OutputTransform\Stages\HandleTOCMarkersDOM->transformDOM(Wikimedia\Parsoid\DOM\DocumentFragment, MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#7/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/ContentHolderTransformStage.php(55)MediaWiki\OutputTransform\ContentDOMTransformStage->transform(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#8/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/OutputTransformPipeline.php(79)MediaWiki\OutputTransform\ContentHolderTransformStage->transform(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#9/srv/mediawiki/php-1.45.0-wmf.23/includes/Output/OutputPage.php(2569)MediaWiki\OutputTransform\OutputTransformPipeline->run(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#10/srv/mediawiki/php-1.45.0-wmf.23/includes/Output/OutputPage.php(2651)MediaWiki\Output\OutputPage->getParserOutputText(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#11/srv/mediawiki/php-1.45.0-wmf.23/includes/page/Article.php(968)MediaWiki\Output\OutputPage->addParserOutput(MediaWiki\Parser\ParserOutput, MediaWiki\Parser\ParserOptions, array)
#12/srv/mediawiki/php-1.45.0-wmf.23/includes/page/Article.php(861)MediaWiki\Page\Article->doOutputFromRenderStatus(MediaWiki\Revision\RevisionStoreRecord, MediaWiki\Status\Status, MediaWiki\Output\OutputPage, MediaWiki\Parser\ParserOptions, array)
#13/srv/mediawiki/php-1.45.0-wmf.23/includes/page/Article.php(537)MediaWiki\Page\Article->generateContentOutput(MediaWiki\User\User, MediaWiki\Parser\ParserOptions, int, MediaWiki\Output\OutputPage, array)
#14/srv/mediawiki/php-1.45.0-wmf.23/includes/actions/ViewAction.php(71)MediaWiki\Page\Article->view()
#15/srv/mediawiki/php-1.45.0-wmf.23/includes/actions/ActionEntryPoint.php(734)MediaWiki\Actions\ViewAction->show()
#16/srv/mediawiki/php-1.45.0-wmf.23/includes/actions/ActionEntryPoint.php(505)MediaWiki\Actions\ActionEntryPoint->performAction(MediaWiki\Page\Article, MediaWiki\Title\Title)
#17/srv/mediawiki/php-1.45.0-wmf.23/includes/actions/ActionEntryPoint.php(143)MediaWiki\Actions\ActionEntryPoint->performRequest()
#18/srv/mediawiki/php-1.45.0-wmf.23/includes/MediaWikiEntryPoint.php(184)MediaWiki\Actions\ActionEntryPoint->execute()
#19/srv/mediawiki/php-1.45.0-wmf.23/index.php(44)MediaWiki\MediaWikiEntryPoint->run()
#20/srv/mediawiki/w/index.php(3)require(string)
#21{main}
Impact
Notes

Details

MediaWiki Version
1.45.0-wmf.23
Request URL
https://mnw.wiktionary.org/wiki/%EC%9D%B4%EC%8A%AC%EB%9E%8C%EA%B5%90%EB%8F%84
Related Changes in Gerrit:

Event Timeline

There is another one with the same error message (T402548) but which is for Parsoid / Kartographer. This one looks different? It started as I have rolled 1.45.0-wmf.23 on group 1 wikis, examples of originating wikis:

mnwwiktionary33
incubatorwiki8
lmowiktionary7
azwiktionary2
omwiktionary1

It started with 1.45.0-wmf.23 which I am deploying this week:

document_fragments.png (289×503 px, 17 KB)

Lot of them come from mnwwiktionary:

mnwwiktionary1,483
test2wiki222
lmowiktionary207
elwiktionary45
incubatorwiki25
viwiktionary18
fawiktionary14
omwiktionary13

Example page: https://mnw.wiktionary.org/wiki/sterns

I checked, this has no user-facing impact, train can go forward with (hopefully limited) logspam as the only consequence, for which I have a patch (let me commit that :) )

Perfect thank you for the quick triage! I am rolling the train and we can deal with the backport later on. Meanwhile I will simply filter out this specific log entry.

Change #1196620 had a related patch set uploaded (by Isabelle Hurbain-Palatin; author: Isabelle Hurbain-Palatin):

[mediawiki/core@master] Do not insert empty document fragments as TOC lines

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

I have added the following filter to mute that specific error. When I checked earlier there was roughly one occurrence per minute which is hardly an issue.

{
  "query": {
    "bool": {
      "must_not": [
        {
          "bool": {
            "filter": [
              {
                "match_phrase": {
                  "error.message": "PHP Warning: DOMNode::appendChild(): Document Fragment is empty"
                }
              },
              {
                "match_phrase": {
                  "log.origin.file.name": "/srv/mediawiki/php-1.45.0-wmf.23/includes/OutputTransform/ContentDOMTransformStage.php"
                }
              },
              {
                "match_phrase": {
                  "log.origin.file.line": 70
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Change #1196620 merged by jenkins-bot:

[mediawiki/core@master] Do not insert empty document fragments as TOC lines

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

hashar claimed this task.

I don't think it is worth the hassle to backport the patch, I have filtered the error log in the Opensearch dashboard and it is low volume so I don't think it causes any risk to the observability platform. I am marking this one resolved, and it will be deployed next week as part of the train. Thank you @ihurbain !

Change #1197708 had a related patch set uploaded (by Arlolra; author: Isabelle Hurbain-Palatin):

[mediawiki/core@wmf/1.45.0-wmf.23] Do not insert empty document fragments as TOC lines

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

Change #1197708 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.23] Do not insert empty document fragments as TOC lines

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

Mentioned in SAL (#wikimedia-operations) [2025-10-21T20:31:04Z] <arlolra@deploy2002> Started scap sync-world: Backport for [[gerrit:1197708|Do not insert empty document fragments as TOC lines (T407323)]]

Mentioned in SAL (#wikimedia-operations) [2025-10-21T20:35:17Z] <arlolra@deploy2002> arlolra: Backport for [[gerrit:1197708|Do not insert empty document fragments as TOC lines (T407323)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-10-21T20:41:16Z] <arlolra@deploy2002> Finished scap sync-world: Backport for [[gerrit:1197708|Do not insert empty document fragments as TOC lines (T407323)]] (duration: 10m 12s)

Change #1217476 had a related patch set uploaded (by Arlolra; author: Arlolra):

[mediawiki/core@master] Use DOMCompat to append document fragment

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

Change #1217476 merged by jenkins-bot:

[mediawiki/core@master] Use DOMCompat to append document fragment

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