Page MenuHomePhabricator

Error: Call to a member function getPath() on null
Open, Needs TriagePublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   Error: Call to a member function getPath() on null
exception.trace
from /srv/mediawiki/php-1.37.0-wmf.20/extensions/Score/includes/Score.php(550)
#0 /srv/mediawiki/php-1.37.0-wmf.20/extensions/Score/includes/Score.php(404): Score::generateHTML(Parser, string, array)
#1 /srv/mediawiki/php-1.37.0-wmf.20/extensions/Score/includes/Score.php(264): Score::renderScore(string, array, Parser)
#2 /srv/mediawiki/php-1.37.0-wmf.20/includes/parser/Parser.php(3975): Score::render(string, array, Parser, PPFrame_Hash)
#3 /srv/mediawiki/php-1.37.0-wmf.20/includes/parser/PPFrame_Hash.php(351): Parser->extensionSubstitution(array, PPFrame_Hash)
#4 /srv/mediawiki/php-1.37.0-wmf.20/includes/parser/Parser.php(2932): PPFrame_Hash->expand(PPNode_Hash_Tree, integer)
#5 /srv/mediawiki/php-1.37.0-wmf.20/includes/parser/Parser.php(1600): Parser->replaceVariables(string)
#6 /srv/mediawiki/php-1.37.0-wmf.20/includes/parser/Parser.php(655): Parser->internalParse(string)
#7 /srv/mediawiki/php-1.37.0-wmf.20/includes/content/WikitextContent.php(327): Parser->parse(string, Title, ParserOptions, boolean, boolean, integer)
#8 /srv/mediawiki/php-1.37.0-wmf.20/includes/content/AbstractContent.php(545): WikitextContent->fillParserOutput(Title, integer, ParserOptions, boolean, ParserOutput)
#9 /srv/mediawiki/php-1.37.0-wmf.20/includes/Revision/RenderedRevision.php(266): AbstractContent->getParserOutput(Title, integer, ParserOptions, boolean)
#10 /srv/mediawiki/php-1.37.0-wmf.20/includes/Revision/RenderedRevision.php(235): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(WikitextContent, boolean)
#11 /srv/mediawiki/php-1.37.0-wmf.20/includes/Revision/RevisionRenderer.php(217): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#12 /srv/mediawiki/php-1.37.0-wmf.20/includes/Revision/RevisionRenderer.php(154): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, array)
#13 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#14 /srv/mediawiki/php-1.37.0-wmf.20/includes/Revision/RenderedRevision.php(197): call_user_func(Closure, MediaWiki\Revision\RenderedRevision, array)
#15 /srv/mediawiki/php-1.37.0-wmf.20/includes/content/ContentHandler.php(1435): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput(array)
#16 /srv/mediawiki/php-1.37.0-wmf.20/extensions/CirrusSearch/includes/BuildDocument/ParserOutputPageProperties.php(85): ContentHandler->getParserOutputForIndexing(WikiPage, ParserCache)
#17 /srv/mediawiki/php-1.37.0-wmf.20/extensions/CirrusSearch/includes/BuildDocument/ParserOutputPageProperties.php(68): CirrusSearch\BuildDocument\ParserOutputPageProperties->finalizeReal(Elastica\Document, WikiPage, ParserCache, CirrusSearch\CirrusSearch)
#18 /srv/mediawiki/php-1.37.0-wmf.20/extensions/CirrusSearch/includes/BuildDocument/BuildDocument.php(165): CirrusSearch\BuildDocument\ParserOutputPageProperties->finalize(Elastica\Document, Title)
#19 /srv/mediawiki/php-1.37.0-wmf.20/extensions/CirrusSearch/includes/DataSender.php(316): CirrusSearch\BuildDocument\BuildDocument->finalize(Elastica\Document)
#20 /srv/mediawiki/php-1.37.0-wmf.20/extensions/CirrusSearch/includes/Job/ElasticaWrite.php(136): CirrusSearch\DataSender->sendData(string, array)
#21 /srv/mediawiki/php-1.37.0-wmf.20/extensions/CirrusSearch/includes/Job/JobTraits.php(136): CirrusSearch\Job\ElasticaWrite->doJob()
#22 /srv/mediawiki/php-1.37.0-wmf.20/extensions/EventBus/includes/JobExecutor.php(79): CirrusSearch\Job\CirrusGenericJob->run()
#23 /srv/mediawiki/rpc/RunSingleJob.php(76): MediaWiki\Extension\EventBus\JobExecutor->execute(array)
#24 {main}
Notes

Very low frequency.

Details

Request URL
https://jobrunner.discovery.wmnet/rpc/RunSingleJob.php

Event Timeline

Krinkle added subscribers: Legoktm, Krinkle.

\cc @Legoktm who's been refactoring this area recently. This issue is from the from current/last week wmf.20 branch, which didn't have any of those refactors in it yet afaics, but \cc-ing nonetheless :)

Code snippet:

					// Maybe we just generated it
					$sourcePath = "{$options['factory_directory']}/file.midi";
					if ( !file_exists( $sourcePath ) ) {
						// No, need to fetch it from the backend
						$sourceFileRef = $backend->getLocalReference(
							[ 'src' => "{$options['dest_storage_path']}/$midiFileName" ] );
						$sourcePath = $sourceFileRef->getPath();
					}

So either:

  • logic mismatch, we are not generating the MIDI file in generatePngAndMidi() even though we need it later on
  • we thought it existed in swift so we didn't generate it, but when trying to fetch it it actually doesn't exist

Elsewhere there's a block like:

		$needMidi = false;
		$haveMidi = $result->wasReceived( 'file.midi' );
		if ( !$options['raw'] || $options['generate_audio'] && !$options['override_midi'] ) {
			$needMidi = true;
			if ( !$haveMidi ) {
				throw new ScoreException( wfMessage( 'score-nomidi' ) );
			}
		}

Maybe the $needMidi logic should be consolidated in one place.