Page MenuHomePhabricator

TypeError: Argument 1 passed to GrowthExperiments\NewcomerTasks\AddImage\ServiceImageRecommendationProvider::hasMinimumWidth() must be of the type integer, null given, called in /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/AddImage/ServiceImageRecommendationProvider.php on line 242
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   TypeError: Argument 1 passed to GrowthExperiments\NewcomerTasks\AddImage\ServiceImageRecommendationProvider::hasMinimumWidth() must be of the type integer, null given, called in /srv/mediawiki/php-1.38.0-wmf.12/extensions/Growt
exception.trace
from /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/AddImage/ServiceImageRecommendationProvider.php(292)
#0 /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/AddImage/ServiceImageRecommendationProvider.php(242): GrowthExperiments\NewcomerTasks\AddImage\ServiceImageRecommendationProvider::hasMinimumWidth(NULL, integer)
#1 /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/AddImage/ServiceImageRecommendationProvider.php(167): GrowthExperiments\NewcomerTasks\AddImage\ServiceImageRecommendationProvider::processApiResponseData(Title, string, array, GrowthExperiments\NewcomerTasks\AddImage\ImageRecommendationMetadataProvider, array)
#2 /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/AddImage/CacheBackedImageRecommendationProvider.php(63): GrowthExperiments\NewcomerTasks\AddImage\ServiceImageRecommendationProvider->get(Title, GrowthExperiments\NewcomerTasks\TaskType\ImageRecommendationTaskType)
#3 /srv/mediawiki/php-1.38.0-wmf.12/includes/libs/objectcache/wancache/WANObjectCache.php(1689): GrowthExperiments\NewcomerTasks\AddImage\CacheBackedImageRecommendationProvider::GrowthExperiments\NewcomerTasks\AddImage\{closure}(boolean, integer, array, NULL, array)
#4 /srv/mediawiki/php-1.38.0-wmf.12/includes/libs/objectcache/wancache/WANObjectCache.php(1518): WANObjectCache->fetchOrRegenerate(string, integer, Closure, array, array)
#5 /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/AddImage/CacheBackedImageRecommendationProvider.php(68): WANObjectCache->getWithSetCallback(string, integer, Closure)
#6 /srv/mediawiki/php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSetListener.php(47): GrowthExperiments\NewcomerTasks\AddImage\CacheBackedImageRecommendationProvider::getWithSetCallback(WANObjectCache, GrowthExperiments\NewcomerTasks\AddImage\ServiceImageRecommendationProvider, GrowthExperiments\NewcomerTasks\TaskType\ImageRecommendationTaskType, Title)
#7 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/MWCallableUpdate.php(38): GrowthExperiments\NewcomerTasks\TaskSetListener->GrowthExperiments\NewcomerTasks\{closure}()
#8 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/DeferredUpdates.php(507): MWCallableUpdate->doUpdate()
#9 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/DeferredUpdates.php(392): DeferredUpdates::attemptUpdate(MWCallableUpdate, Wikimedia\Rdbms\LBFactoryMulti)
#10 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/DeferredUpdates.php(221): DeferredUpdates::run(MWCallableUpdate, Wikimedia\Rdbms\LBFactoryMulti, Monolog\Logger, BufferingStatsdDataFactory, string)
#11 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/DeferredUpdatesScope.php(267): DeferredUpdates::{closure}(MWCallableUpdate, integer)
#12 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/DeferredUpdatesScope.php(196): DeferredUpdatesScope->processStageQueue(integer, integer, Closure)
#13 /srv/mediawiki/php-1.38.0-wmf.12/includes/deferred/DeferredUpdates.php(242): DeferredUpdatesScope->processUpdates(integer, Closure)
#14 /srv/mediawiki/php-1.38.0-wmf.12/includes/MediaWiki.php(1106): DeferredUpdates::doUpdates()
#15 /srv/mediawiki/php-1.38.0-wmf.12/includes/MediaWiki.php(830): MediaWiki->restInPeace()
#16 /srv/mediawiki/php-1.38.0-wmf.12/includes/MediaWiki.php(579): MediaWiki->doPostOutputShutdown()
#17 /srv/mediawiki/php-1.38.0-wmf.12/index.php(53): MediaWiki->run()
#18 /srv/mediawiki/php-1.38.0-wmf.12/index.php(46): wfIndexMain()
#19 /srv/mediawiki/w/index.php(3): require(string)
#20 {main}
Notes

One hit seen so far during the wmf.12 train (T293953)

Event Timeline

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

This is probably due to cache incompatibility: TaskSetListener calls CacheBackedImageRecommendationProvider::getWithSetCallback on each cached task; since they were cached on 1.38.0-wmf.9, there is no minimumImageSize field in the settings. This will break further task submission attempts as long as the users have a cached taskset (up to a week). We should probably change the cache version and backport.

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

[mediawiki/extensions/GrowthExperiments@master] CacheDecorator: Bump cache version

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

Change 745387 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] CacheDecorator: Bump cache version

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

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

[mediawiki/extensions/GrowthExperiments@wmf/1.38.0-wmf.12] CacheDecorator: Bump cache version

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

My bad, I was unaware of this situation. @Tgr would it be useful to create some test for this so it doesn't happen again?

Change 745371 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@wmf/1.38.0-wmf.12] CacheDecorator: Bump cache version

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

Mentioned in SAL (#wikimedia-operations) [2021-12-09T12:47:22Z] <kharlan@deploy1002> Synchronized php-1.38.0-wmf.12/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/CacheDecorator.php: Backport: [[gerrit:745371|CacheDecorator: Bump cache version (T297248)]] (duration: 01m 05s)

My bad, I was unaware of this situation. @Tgr would it be useful to create some test for this so it doesn't happen again?

I don't think we have the infrastructure for testing issues arising from serialization and unserialization being done by different branches of code. IMO the most helpful thing would be avoiding serialization / unserialization of PHP objects. As long as hydration/dehydration happens via dedicated entry points it's much less likely that the objects end up in some unexpected state.

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

[mediawiki/extensions/GrowthExperiments@master] [WIP] CacheDecorator: Use JSON serialization

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

Change 742594 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] CacheDecorator: Use JSON serialization

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

Etonkovidova subscribed.

Checked on wmf.13 - the error is not present.