From a775c6888bdecd03cea73f5540a8323b6dcbe78f Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Thu, 4 Jul 2019 01:13:29 -0700 Subject: [PATCH] filebackend: avoid use of wfWikiId() in FileBackendGroup Also warn when there is a risk of automatic backend domain collisions Change-Id: Id488b5b947ef5fe8f4b0a8e96560bfd44fcc0327 --- includes/filebackend/FileBackendGroup.php | 24 +++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/includes/filebackend/FileBackendGroup.php b/includes/filebackend/FileBackendGroup.php index 9e04d09632..f369f00e95 100644 --- a/includes/filebackend/FileBackendGroup.php +++ b/includes/filebackend/FileBackendGroup.php @@ -123,8 +123,28 @@ class FileBackendGroup { } $class = $config['class']; - // @FIXME: ideally this would default to the DB domain (which includes the schema) - $config['domainId'] = $config['domainId'] ?? ( $config['wikiId'] ?? wfWikiID() ); + if ( isset( $config['domainId'] ) ) { + $domainId = $config['domainId']; + } elseif ( isset( $config['wikiId'] ) ) { + $domainId = $config['wikiId']; // b/c + } else { + // Only use the raw database/prefix for backwards compatibility + $ld = WikiMap::getCurrentWikiDbDomain(); + $domainId = strlen( $ld->getTablePrefix() ) + ? "{$ld->getDatabase()}-{$ld->getTablePrefix()}" + : $ld->getDatabase(); + // If the local wiki ID and local domain ID do not match, probably due to a + // non-default schema, issue a warning. A non-default schema indicates that + // it might be used to disambiguate different wikis. + $wikiId = WikiMap::getWikiIdFromDbDomain( $ld ); + if ( $ld->getSchema() !== null && $domainId !== $wikiId ) { + wfWarn( + "\$wgFileBackend entry '$name' should have 'domainId' set.\n" . + "Legacy default 'domainId' is '$domainId' but wiki ID is '$wikiId'." + ); + } + } + $config['domainId'] = $domainId; $config['readOnly'] = $config['readOnly'] ?? $readOnlyReason; unset( $config['class'] ); // backend won't need this -- 2.20.1