Page MenuHomePhabricator

[betalabs] 'imagerecommendation' variant fails fetching articles
Closed, ResolvedPublic

Description

Use ge.utils.setUserVariant('imagerecommendation') in the Console on Homepage.
No articles will be fetched:

Screen Shot 2021-10-28 at 2.23.27 PM.png (1×1 px, 112 KB)

Fetching task suggestions failed: internal_api_error_Error internal_api_error_Error 
{error: {…}, servedby: 'deployment-mediawiki11'}
GrowthTasksApi.handleError

Reload the page - the Internal error page is displayed:

[YXsRu@HPmTQn--YAQMS2-gAAABQ] /w/index.php?title=Special:Homepage&source=personaltoolslink&namespace=-1 Error: Cannot use object of type stdClass as array

Backtrace:

from /srv/mediawiki/php-master/vendor/ruflin/elastica/lib/Elastica/Param.php(172)
#0 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/Search/Filters.php(78): Elastica\Param->hasParam(string)
#1 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/Search/SearchContext.php(563): CirrusSearch\Search\Filters::unify(array, array)
#2 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/Search/SearchRequestBuilder.php(66): CirrusSearch\Search\SearchContext->getQuery()
#3 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/Searcher.php(489): CirrusSearch\Search\SearchRequestBuilder->build()
#4 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/Searcher.php(321): CirrusSearch\Searcher->buildSearch()
#5 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/Searcher.php(215): CirrusSearch\Searcher->searchTextInternal(string)
#6 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/CirrusSearch.php(299): CirrusSearch\Searcher->search(CirrusSearch\Search\SearchQuery)
#7 /srv/mediawiki/php-master/extensions/CirrusSearch/includes/CirrusSearch.php(272): CirrusSearch\CirrusSearch->searchTextReal(CirrusSearch\Search\SearchQuery)
#8 /srv/mediawiki/php-master/includes/search/SearchEngine.php(95): CirrusSearch\CirrusSearch->doSearchText(string)
#9 /srv/mediawiki/php-master/includes/search/SearchEngine.php(187): SearchEngine->{closure}()
#10 /srv/mediawiki/php-master/includes/search/SearchEngine.php(96): SearchEngine->maybePaginate(Closure)
#11 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/LocalSearchTaskSuggester.php(71): SearchEngine->searchText(string)
#12 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/SearchTaskSuggester.php(182): GrowthExperiments\NewcomerTasks\TaskSuggester\LocalSearchTaskSuggester->search(GrowthExperiments\NewcomerTasks\TaskSuggester\SearchStrategy\SearchQuery, integer, integer, boolean)
#13 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/SearchTaskSuggester.php(94): GrowthExperiments\NewcomerTasks\TaskSuggester\SearchTaskSuggester->doSuggest(NULL, User, array, array, integer, integer, array)
#14 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/CacheDecorator.php(133): GrowthExperiments\NewcomerTasks\TaskSuggester\SearchTaskSuggester->suggest(User, array, array, integer, NULL, array)
#15 /srv/mediawiki/php-master/includes/libs/objectcache/wancache/WANObjectCache.php(1771): GrowthExperiments\NewcomerTasks\TaskSuggester\CacheDecorator->GrowthExperiments\NewcomerTasks\TaskSuggester\{closure}(GrowthExperiments\NewcomerTasks\Task\TaskSet, integer, array, double, array)
#16 /srv/mediawiki/php-master/includes/libs/objectcache/wancache/WANObjectCache.php(1600): WANObjectCache->fetchOrRegenerate(string, integer, Closure, array, array)
#17 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/CacheDecorator.php(167): WANObjectCache->getWithSetCallback(string, integer, Closure, array)
#18 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php(392): GrowthExperiments\NewcomerTasks\TaskSuggester\CacheDecorator->suggest(User, array, array, integer, NULL, array)
#19 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php(180): GrowthExperiments\HomepageModules\SuggestedEdits->getTaskSet()
#20 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/Homepage/HomepageModuleRegistry.php(116): GrowthExperiments\HomepageModules\SuggestedEdits->__construct(RequestContext, GrowthExperiments\Config\GrowthExperimentsMultiConfig, GrowthExperiments\AqsEditInfoService, GrowthExperiments\ExperimentUserManager, MediaWiki\Extensions\PageViewInfo\CachedPageViewService, GrowthExperiments\NewcomerTasks\ConfigurationLoader\PageConfigurationLoader, GrowthExperiments\NewcomerTasks\NewcomerTasksUserOptionsLookup, GrowthExperiments\NewcomerTasks\TaskSuggester\CacheDecorator, TitleFactory, GrowthExperiments\NewcomerTasks\ProtectionFilter, MediaWiki\User\UserOptionsManager)
#21 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/Homepage/HomepageModuleRegistry.php(55): GrowthExperiments\Homepage\HomepageModuleRegistry::GrowthExperiments\Homepage\{closure}(MediaWiki\MediaWikiServices, RequestContext)
#22 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(225): GrowthExperiments\Homepage\HomepageModuleRegistry->get(string, RequestContext)
#23 /srv/mediawiki/php-master/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(127): GrowthExperiments\Specials\SpecialHomepage->getModules(boolean, NULL)
#24 /srv/mediawiki/php-master/includes/specialpage/SpecialPage.php(647): GrowthExperiments\Specials\SpecialHomepage->execute(NULL)
#25 /srv/mediawiki/php-master/includes/specialpage/SpecialPageFactory.php(1377): SpecialPage->run(NULL)
#26 /srv/mediawiki/php-master/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext)
#27 /srv/mediawiki/php-master/includes/MediaWiki.php(925): MediaWiki->performRequest()
#28 /srv/mediawiki/php-master/includes/MediaWiki.php(559): MediaWiki->main()
#29 /srv/mediawiki/php-master/index.php(53): MediaWiki->run()
#30 /srv/mediawiki/php-master/index.php(46): wfIndexMain()
#31 /srv/mediawiki/w/index.php(3): require(string)
#32 {main}

Event Timeline

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

This is caused by an empty template list. It seems to boil down to a weird Elastica bug (that we hit when Filter:booleanOr() is called with an empty array and returns a MatchAll query):

tgr@mwdebug1001:~$ mwscript shell.php testwiki
Psy Shell v0.10.8 (PHP 7.2.34-18+0~20210223.60+debian10~1.gbpb21322+wmf2 — cli) by Justin Hileman
>>> $query = new Elastica\Query\MatchAll()
=> Elastica\Query\MatchAll {#3342}
>>> $query->hasParam('param')
PHP Error:  Cannot use object of type stdClass as array in /srv/mediawiki/php-1.38.0-wmf.6/vendor/ruflin/elastica/lib/Elastica/Param.php on line 172

MatchAll's constructor sets the param field to an stdClass, but everything else expects it to be an array.

@EBernhardson @dcausse any advice on whether we should be doing something differently in TemplateCollectionFeature?

When I try to fix it via $matchAll->setParams( [] ) it avoids the error but the ElasticSearch backend returns query malformed, no start_object after query name.

For the time being, can be worked around with something like Filters::booleanOr( [ new MatchAll(), new MatchAll() ] ).

Change 735473 had a related patch set uploaded (by Gergő Tisza; author: Gergő Tisza):

[mediawiki/extensions/GrowthExperiments@master] Add Image: Fix TemplateCollectionFeature

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

Change 735473 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Add Image: Fix TemplateCollectionFeature

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