Page MenuHomePhabricator

OpenIDConnect should use addExtensionField instead of modifyExtensionTable
Closed, ResolvedPublicBUG REPORT

Description

Currently an error occurs if the openid_connect table already exists.

Event Timeline

MarkAHershberger renamed this task from OpenID should use addExtensionField instead of modifyExtensionTable to OpenIDConnect should use addExtensionField instead of modifyExtensionTable.Nov 3 2024, 5:08 PM
MarkAHershberger updated the task description. (Show Details)

Change #1086541 had a related patch set uploaded (by MarkAHershberger; author: MarkAHershberger):

[mediawiki/extensions/OpenIDConnect@master] Fix up ChangePrimaryKey handling

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

Change #1086541 merged by jenkins-bot:

[mediawiki/extensions/OpenIDConnect@master] Fix up ChangePrimaryKey handling

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

Change #1109763 had a related patch set uploaded (by Cicalese; author: MarkAHershberger):

[mediawiki/extensions/OpenIDConnect@REL1_39] Fix up ChangePrimaryKey handling

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

Change #1109764 had a related patch set uploaded (by Cicalese; author: MarkAHershberger):

[mediawiki/extensions/OpenIDConnect@REL1_43] Fix up ChangePrimaryKey handling

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

cicalese claimed this task.

Change #1109763 merged by jenkins-bot:

[mediawiki/extensions/OpenIDConnect@REL1_39] Fix up ChangePrimaryKey handling

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

Change #1109764 merged by jenkins-bot:

[mediawiki/extensions/OpenIDConnect@REL1_43] Fix up ChangePrimaryKey handling

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

Is a backport to REL1_42 planned? I came across this issue on 1.42.5 which seems to be still supported. Thank you for fixing this bug.

I believe this should be re-opened, the same error still appears in latest mediawiki REL1_43, which contains the fix from https://gerrit.wikimedia.org/r/1109764.
Docker image: mediawiki:1.43.0
OpenIDConnect Version: REL1_43-f68146b

After an update from 1.42.5 to 1.43.0, with existing openid_connect table, php maintenance/run.php update.php results in:

...openid_connect table already exists.
[rdbms] Wikimedia\Rdbms\LoadBalancer::getAnyOpenConnection: found 'round' connection to #0.
[rdbms] Wikimedia\Rdbms\DatabasePostgres::getCoreSchemas [0.146ms] host.docker.internal: SELECT nspname FROM pg_catalog.pg_namespace n WHERE n.oid = pg_my_temp_schema()
[rdbms] Wikimedia\Rdbms\DatabasePostgres::relationExists [0.232ms] host.docker.internal: SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n WHERE c.relnamespace = n.oid AND c.relname = 'openid_connect' AND n.nspname = 'mediawiki' AND c.relkind IN ('r','v')
[rdbms] Wikimedia\Rdbms\DatabasePostgres::getCoreSchemas [0.142ms] host.docker.internal: SELECT nspname FROM pg_catalog.pg_namespace n WHERE n.oid = pg_my_temp_schema()
[rdbms] Wikimedia\Rdbms\PostgresField::fromText [1.27ms] host.docker.internal: SELECT
 attnotnull, attlen, conname AS conname,
 atthasdef,
 pg_get_expr(adbin, adrelid) AS adsrc,
 COALESCE(condeferred, FALSE) AS deferred,
 COALESCE(condeferrable, FALSE) AS deferrable,
 CASE WHEN typname = 'int2' THEN 'smallint'
  WHEN typname = 'int4' THEN 'integer'
  WHEN typname = 'int8' THEN 'bigint'
  WHEN typname = 'bpchar' THEN 'char'
 ELSE typname END AS typname
FROM pg_class c
JOIN pg_namespace n ON (n.oid = c.relnamespace)
JOIN pg_attribute a ON (a.attrelid = c.oid)
JOIN pg_type t ON (t.oid = a.atttypid)
LEFT JOIN pg_constraint o ON (o.conrelid = c.oid AND a.attnum = ANY(o.conkey) AND o.contype = 'f')
LEFT JOIN pg_attrdef d on c.oid=d.adrelid and a.attnum=d.adnum
WHERE relkind = 'r'
AND nspname='mediawiki'
AND relname='openid_connect'
AND attname='oidc_id';
Adding oidc_id field to table openid_connect...[rdbms] Wikimedia\Rdbms\Database::sourceFile( /var/www/html/extensions/OpenIDConnect/includes/../sql/postgres/ChangePrimaryKey.sql ) [0.306ms] host.docker.internal: DROP  INDEX "primary"

Fri Feb 14 11:28:20 UTC 2025	5ced204eabfa	mediawiki	Error 42704 from Wikimedia\Rdbms\Database::sourceFile( /var/www/html/extensions/OpenIDConnect/includes/../sql/postgres/ChangePrimaryKey.sql ), ERROR:  index "primary" does not exist
 DROP  INDEX "primary"\n host.docker.internal
#0 /var/www/html/includes/libs/rdbms/database/Database.php(1156): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, string, string, string)
#1 /var/www/html/includes/libs/rdbms/database/Database.php(647): Wikimedia\Rdbms\Database->reportQueryError(string, string, string, string, bool)
#2 /var/www/html/includes/libs/rdbms/database/Database.php(2791): Wikimedia\Rdbms\Database->query(Wikimedia\Rdbms\Query, string)
#3 /var/www/html/includes/libs/rdbms/database/Database.php(2730): Wikimedia\Rdbms\Database->sourceStream(resource (stream), null, null, string, null)
#4 /var/www/html/includes/libs/rdbms/database/DBConnRef.php(127): Wikimedia\Rdbms\Database->sourceFile(string)
#5 /var/www/html/includes/libs/rdbms/database/DBConnRef.php(799): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#6 /var/www/html/includes/installer/DatabaseUpdater.php(797): Wikimedia\Rdbms\DBConnRef->sourceFile(string)
#7 /var/www/html/includes/installer/DatabaseUpdater.php(869): MediaWiki\Installer\DatabaseUpdater->applyPatch(string, bool, string)
#8 /var/www/html/includes/installer/DatabaseUpdater.php(595): MediaWiki\Installer\DatabaseUpdater->addField(string, string, string, bool)
#9 /var/www/html/includes/installer/DatabaseUpdater.php(552): MediaWiki\Installer\DatabaseUpdater->runUpdates(array, bool)
#10 /var/www/html/maintenance/update.php(195): MediaWiki\Installer\DatabaseUpdater->doUpdates(array)
#11 /var/www/html/maintenance/includes/MaintenanceRunner.php(703): UpdateMediaWiki->execute()
#12 /var/www/html/maintenance/run.php(51): MediaWiki\Maintenance\MaintenanceRunner->run()
#13 {main}
Wikimedia\Rdbms\DBQueryError from line 1198 of /var/www/html/includes/libs/rdbms/database/Database.php: Error 42704: ERROR:  index "primary" does not exist

Function: Wikimedia\Rdbms\Database::sourceFile( /var/www/html/extensions/OpenIDConnect/includes/../sql/postgres/ChangePrimaryKey.sql )
Query: DROP  INDEX "primary"


#0 /var/www/html/includes/libs/rdbms/database/Database.php(1182): Wikimedia\Rdbms\Database->getQueryException('ERROR:  index "...', '42704', 'DROP  INDEX "pr...', 'Wikimedia\\Rdbms...')
#1 /var/www/html/includes/libs/rdbms/database/Database.php(1156): Wikimedia\Rdbms\Database->getQueryExceptionAndLog('ERROR:  index "...', '42704', 'DROP  INDEX "pr...', 'Wikimedia\\Rdbms...')
#2 /var/www/html/includes/libs/rdbms/database/Database.php(647): Wikimedia\Rdbms\Database->reportQueryError('ERROR:  index "...', '42704', 'DROP  INDEX "pr...', 'Wikimedia\\Rdbms...', false)
#3 /var/www/html/includes/libs/rdbms/database/Database.php(2791): Wikimedia\Rdbms\Database->query(Object(Wikimedia\Rdbms\Query), 'Wikimedia\\Rdbms...')
#4 /var/www/html/includes/libs/rdbms/database/Database.php(2730): Wikimedia\Rdbms\Database->sourceStream(Resource id #2579, NULL, NULL, 'Wikimedia\\Rdbms...', NULL)
#5 /var/www/html/includes/libs/rdbms/database/DBConnRef.php(127): Wikimedia\Rdbms\Database->sourceFile('/var/www/html/e...')
#6 /var/www/html/includes/libs/rdbms/database/DBConnRef.php(799): Wikimedia\Rdbms\DBConnRef->__call('sourceFile', Array)
#7 /var/www/html/includes/installer/DatabaseUpdater.php(797): Wikimedia\Rdbms\DBConnRef->sourceFile('/var/www/html/e...')
#8 /var/www/html/includes/installer/DatabaseUpdater.php(869): MediaWiki\Installer\DatabaseUpdater->applyPatch('/var/www/html/e...', true, 'Adding oidc_id ...')
#9 /var/www/html/includes/installer/DatabaseUpdater.php(595): MediaWiki\Installer\DatabaseUpdater->addField('openid_connect', 'oidc_id', '/var/www/html/e...', true)
#10 /var/www/html/includes/installer/DatabaseUpdater.php(552): MediaWiki\Installer\DatabaseUpdater->runUpdates(Array, true)
#11 /var/www/html/maintenance/update.php(195): MediaWiki\Installer\DatabaseUpdater->doUpdates(Array)
#12 /var/www/html/maintenance/includes/MaintenanceRunner.php(703): UpdateMediaWiki->execute()
#13 /var/www/html/maintenance/run.php(51): MediaWiki\Maintenance\MaintenanceRunner->run()
#14 {main}

T378904#10552156 appears to be a separate issue affecting only Postgres. See T382116.