Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
WriteDuplicator
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 duplicate
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace MediaWiki\DB;
4
5use MediaWiki\Deferred\AtomicSectionUpdate;
6use MediaWiki\Deferred\DeferredUpdates;
7use Wikimedia\Rdbms\IConnectionProvider;
8use Wikimedia\Rdbms\IWriteQueryBuilder;
9
10/**
11 * @since 1.46
12 * @unstable
13 */
14class WriteDuplicator {
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}