Page MenuHomePhabricator

InvalidArgumentException from line 80 of ServerInfo.php: No server with index '0' (in a maintenance script)
Open, LowPublic

Description

While running maintenance scripts for T315510, we saw this error twice:

T315510#9575955

[0b0535de3852dcb0b1df256c] [no req]   InvalidArgumentException: No server with index '0'
Backtrace:
from /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/ServerInfo.php(80)
#0 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/loadbalancer/LoadBalancer.php(985): Wikimedia\Rdbms\ServerInfo->getServerInfoStrict(integer)
#1 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/loadbalancer/LoadBalancer.php(908): Wikimedia\Rdbms\LoadBalancer->reallyOpenConnection(integer, Wikimedia\Rdbms\DatabaseDomain, array)
#2 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/loadbalancer/LoadBalancer.php(775): Wikimedia\Rdbms\LoadBalancer->reuseOrOpenConnectionForNewRef(integer, Wikimedia\Rdbms\DatabaseDomain, integer)
#3 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/loadbalancer/LoadBalancer.php(767): Wikimedia\Rdbms\LoadBalancer->getServerConnection(integer, string, integer)
#4 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/database/DBConnRef.php(103): Wikimedia\Rdbms\LoadBalancer->getConnectionInternal(integer, array, string, integer)
#5 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/database/DBConnRef.php(117): Wikimedia\Rdbms\DBConnRef->ensureConnection()
#6 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/database/DBConnRef.php(338): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#7 /srv/mediawiki/php-1.42.0-wmf.19/includes/libs/rdbms/querybuilder/SelectQueryBuilder.php(741): Wikimedia\Rdbms\DBConnRef->selectField(array, string, array, string, array, array)
#8 /srv/mediawiki/php-1.42.0-wmf.19/extensions/DiscussionTools/includes/ThreadItemStore.php(552): Wikimedia\Rdbms\SelectQueryBuilder->fetchField()
#9 /srv/mediawiki/php-1.42.0-wmf.19/extensions/DiscussionTools/includes/ThreadItemStore.php(490): MediaWiki\Extension\DiscussionTools\ThreadItemStore::MediaWiki\Extension\DiscussionTools\{closure}(Wikimedia\Rdbms\DBConnRef)
#10 /srv/mediawiki/php-1.42.0-wmf.19/extensions/DiscussionTools/includes/ThreadItemStore.php(564): MediaWiki\Extension\DiscussionTools\ThreadItemStore->findOrInsertIdButTryHarder(Closure, Closure, boolean, MediaWiki\Revision\RevisionStoreRecord)
#11 /srv/mediawiki/php-1.42.0-wmf.19/extensions/DiscussionTools/maintenance/persistRevisionThreadItems.php(210): MediaWiki\Extension\DiscussionTools\ThreadItemStore->insertThreadItems(MediaWiki\Revision\RevisionStoreRecord, MediaWiki\Extension\DiscussionTools\ContentThreadItemSet)
#12 /srv/mediawiki/php-1.42.0-wmf.19/extensions/DiscussionTools/maintenance/persistRevisionThreadItems.php(170): MediaWiki\Extension\DiscussionTools\Maintenance\PersistRevisionThreadItems->processRow(stdClass)
#13 /srv/mediawiki/php-1.42.0-wmf.19/extensions/DiscussionTools/maintenance/persistRevisionThreadItems.php(120): MediaWiki\Extension\DiscussionTools\Maintenance\PersistRevisionThreadItems->process(Wikimedia\Rdbms\SelectQueryBuilder, array)
#14 /srv/mediawiki/php-1.42.0-wmf.19/maintenance/includes/MaintenanceRunner.php(698): MediaWiki\Extension\DiscussionTools\Maintenance\PersistRevisionThreadItems->execute()
#15 /srv/mediawiki/php-1.42.0-wmf.19/maintenance/run.php(51): MediaWiki\Maintenance\MaintenanceRunner->run()
#16 /srv/mediawiki/multiversion/MWScript.php(158): require_once(string)
#17 {main}

P64214

InvalidArgumentException from line 80 of /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/ServerInfo.php: No server with index '0'
#0 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1001): Wikimedia\Rdbms\ServerInfo->getServerInfoStrict(0)
#1 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/loadbalancer/LoadBalancer.php(924): Wikimedia\Rdbms\LoadBalancer->reallyOpenConnection(0, Object(Wikimedia\Rdbms\DatabaseDomain), Array)
#2 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/loadbalancer/LoadBalancer.php(801): Wikimedia\Rdbms\LoadBalancer->reuseOrOpenConnectionForNewRef(0, Object(Wikimedia\Rdbms\DatabaseDomain), 0)
#3 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/loadbalancer/LoadBalancer.php(793): Wikimedia\Rdbms\LoadBalancer->getServerConnection(0, 'enwiki', 0)
#4 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/database/DBConnRef.php(110): Wikimedia\Rdbms\LoadBalancer->getConnectionInternal(-1, Array, 'enwiki', 0)
#5 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/database/DBConnRef.php(124): Wikimedia\Rdbms\DBConnRef->ensureConnection()
#6 /srv/mediawiki/php-1.43.0-wmf.6/includes/libs/rdbms/database/DBConnRef.php(420): Wikimedia\Rdbms\DBConnRef->__call('buildComparison', Array)
#7 /srv/mediawiki/php-1.43.0-wmf.6/extensions/DiscussionTools/maintenance/persistRevisionThreadItems.php(157): Wikimedia\Rdbms\DBConnRef->buildComparison('>', Array)
#8 /srv/mediawiki/php-1.43.0-wmf.6/extensions/DiscussionTools/maintenance/persistRevisionThreadItems.php(120): MediaWiki\Extension\DiscussionTools\Maintenance\PersistRevisionThreadItems->process(Object(Wikimedia\Rdbms\SelectQueryBuilder), Array)
#9 /srv/mediawiki/php-1.43.0-wmf.6/maintenance/includes/MaintenanceRunner.php(696): MediaWiki\Extension\DiscussionTools\Maintenance\PersistRevisionThreadItems->execute()
#10 /srv/mediawiki/php-1.43.0-wmf.6/maintenance/run.php(51): MediaWiki\Maintenance\MaintenanceRunner->run()
#11 /srv/mediawiki/multiversion/MWScript.php(158): require_once('/srv/mediawiki/...')
#12 {main}

Event Timeline

Walking through that stack trace:

  • Wikimedia\Rdbms\LoadBalancer->getConnectionInternal(-1, Array, 'enwiki', 0)
    • -1 is DB_REPLICA
  • ...
  • Wikimedia\Rdbms\ServerInfo->getServerInfoStrict(0)
    • 0 is WRITER_INDEX.

I don't know this code but this is suspicious. Why is it looking at the writer when a replica was requested? And why does it not find it?

HCoplin-WMF lowered the priority of this task from Medium to Low.Oct 1 2024, 4:15 PM

I haven't seen this error in logstash lately. I know that an error like this used to occur and was fixed in 65aa3c0a3e3. Presumably, someone changed the load weights in etcd while the script was running. This error shouldn't happen, though the script can be restarted if it does still occur.

@Ladsgroup, does this seem like something you want to look at?

I don't think this is fixed yet and it's not showing because we don't do many depool/repools now (dc switchover time). But I do think this is low priority.