Krinkle has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/394644 )
Change subject: Improve re-use of connections between getDB()/openDB() ...................................................................... Improve re-use of connections between getDB()/openDB() Current debug output: > +0s: Create connection to s1 > +0.11s: Query all wikis for matching revisions > +0s: Create connection to s3.labsdb > +0.05s: Create connection to s2.labsdb > +0.06s: Create connection to s1.labsdb 's1' and 's1.labsdb' did not result in re-use because the normalisation happened inside openDB, but caching in getDB on the non-canonical value. Change-Id: Iecda557e8dfd45b4a76b7e32213ce024a28fc06a --- M src/App.php 1 file changed, 20 insertions(+), 23 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/labs/tools/guc refs/changes/44/394644/1 diff --git a/src/App.php b/src/App.php index 48acec9..1cfdeec 100644 --- a/src/App.php +++ b/src/App.php @@ -20,54 +20,51 @@ /** * Open a connection to the database. * - * @param string $database - * @param int|string $cluster + * @param string $dbname + * @param string $host * @return PDO */ - private function openDB($database = 'wikidatawiki', $cluster = null) { - $dbname = "{$database}_p"; - - if (is_string($cluster)) { - if (strpos($cluster, '.') === false) { - // Default suffix - $host = "{$cluster}.labsdb"; - } else { - $host = $cluster; - } - } else { - $host = "{$database}.labsdb"; - } - - $this->aTP('Create connection to ' . $cluster); + private function openDB($dbname, $host) { + $this->aTP('Create connection to ' . $host); try { - // Establish connection + // Establish a connection $pdo = new PDO('mysql:host='.$host.';dbname='.$dbname.';', Settings::getSetting('user'), Settings::getSetting('password')); } catch (PDOException $e) { - throw new Exception('Database error: Unable to connect to '. $dbname); + throw new Exception('Database error: Unable to connect to '. $host); } + return $pdo; } /** - * Gibt die Verbindung zu einem Wiki zurück (cache) + * Get a connection to a database (cached) * * @param string $database * @param string $cluster * @return PDO */ public function getDB($database = 'meta', $cluster = 's1') { - if (!$cluster) { + if (!is_string($cluster)) { throw new Exception('Invalid DB cluster specification'); } + if (strpos($cluster, '.') === false) { + // Default suffix + $host = "{$cluster}.labsdb"; + } else { + $host = $cluster; + } + + $dbname = "{$database}_p"; + // Reuse existing connection if possible if (!isset($this->clusters[$cluster])) { - $this->clusters[$cluster] = $this->openDB($database, $cluster); + $this->clusters[$cluster] = $this->openDB($dbname, $cluster); } $pdo = $this->clusters[$cluster]; // Select the right database on this cluster server - $m = $pdo->prepare('USE `'.$database.'_p`;'); + $m = $pdo->prepare('USE `' . $dbname . '`;'); $m->execute(); return $pdo; -- To view, visit https://gerrit.wikimedia.org/r/394644 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iecda557e8dfd45b4a76b7e32213ce024a28fc06a Gerrit-PatchSet: 1 Gerrit-Project: labs/tools/guc Gerrit-Branch: master Gerrit-Owner: Krinkle <krinklem...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits