mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-23 21:23:09 +00:00
105f2a3845
Fix task idempotency. Check if a table exists before running the schema patch. Bug: T352113 Change-Id: If6f0930ea327df35fe118d4a08993c6383f9d579
65 lines
1.8 KiB
PHP
65 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\Notifications;
|
|
|
|
use MediaWiki\Installer\Task\Task;
|
|
use MediaWiki\Status\Status;
|
|
use Wikimedia\Rdbms\DatabaseDomain;
|
|
|
|
/**
|
|
* TODO: replace this with virtual domains
|
|
*
|
|
* This is a temporary hack to support WMF production wiki creation, with
|
|
* database creation in an external cluster. Core knows how to do this for
|
|
* virtual domains, but this extension is not yet using a virtual domain. (T348573)
|
|
*/
|
|
class InstallSchemaTask extends Task {
|
|
public function getName() {
|
|
return 'echo-schema';
|
|
}
|
|
|
|
public function getDescription() {
|
|
return 'Installing Echo tables';
|
|
}
|
|
|
|
public function getDependencies() {
|
|
return [ 'services', 'schema' ];
|
|
}
|
|
|
|
public function getAliases() {
|
|
// Group with extension tables so that things that depend on
|
|
// extension tables will have this
|
|
return 'extension-tables';
|
|
}
|
|
|
|
public function execute(): Status {
|
|
$status = Status::newGood();
|
|
$cluster = $this->getConfigVar( 'EchoCluster' );
|
|
if ( !$cluster ) {
|
|
// This case is adequately handled by LoadExtensionSchemaUpdates
|
|
return $status;
|
|
}
|
|
|
|
// Get the load balancer
|
|
$lbFactory = $this->getServices()->getDBLoadBalancerFactory();
|
|
$databaseCreator = $this->getDatabaseCreator();
|
|
$domainId = $lbFactory->getLocalDomainID();
|
|
$database = DatabaseDomain::newFromId( $domainId )->getDatabase();
|
|
$echoLB = $lbFactory->getExternalLB( $cluster );
|
|
|
|
// Create database
|
|
if ( !$databaseCreator->existsInLoadBalancer( $echoLB, $database ) ) {
|
|
$databaseCreator->createInLoadBalancer( $echoLB, $database );
|
|
}
|
|
|
|
// Create tables
|
|
$dbw = $echoLB->getMaintenanceConnectionRef( DB_PRIMARY );
|
|
$dbw->setSchemaVars( $this->getContext()->getSchemaVars() );
|
|
if ( !$dbw->tableExists( 'echo_event' ) ) {
|
|
$status = $this->applySourceFile( $dbw, 'tables-generated.sql' );
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
}
|