MediaWiki master
WriteDuplicator.php
Go to the documentation of this file.
1<?php
2
3namespace MediaWiki\DB;
4
9
15
16 public function __construct(
17 private IConnectionProvider $dbProvider,
18 private readonly string $virtualDomain,
19 private readonly bool $enabled = false
20 ) {
21 }
22
23 public function duplicate( IWriteQueryBuilder $queryBuilder ): void {
24 if ( !$this->enabled ) {
25 return;
26 }
27 $dbProvider = $this->dbProvider;
28 $virtualDomain = $this->virtualDomain;
29
30 // Avoid duplicating the write on the same database
31 if (
32 $dbProvider->getPrimaryDatabase()->getServer() ===
33 $dbProvider->getPrimaryDatabase( $this->virtualDomain )->getServer()
34 ) {
35 return;
36 }
37
38 DeferredUpdates::addUpdate(
39 new AtomicSectionUpdate(
40 $dbProvider->getPrimaryDatabase(),
41 __METHOD__,
42 static function () use ( $dbProvider, $queryBuilder, $virtualDomain ) {
43 $dbw = $dbProvider->getPrimaryDatabase( $virtualDomain );
44 $queryBuilder->connection( $dbw );
45 $queryBuilder->execute();
46 }
47 )
48 );
49 }
50}
if(!defined('MW_SETUP_CALLBACK'))
Definition WebStart.php:69
duplicate(IWriteQueryBuilder $queryBuilder)
__construct(private IConnectionProvider $dbProvider, private readonly string $virtualDomain, private readonly bool $enabled=false)
Deferrable Update for closure/callback updates via IDatabase::doAtomicSection()
Defer callable updates to run later in the PHP process.
Provide primary and replica IDatabase connections.
Shared interface of all write query builders.