From d27e7c52b21865563bd56f37d5d422515aa40bb7 Mon Sep 17 00:00:00 2001 From: Levi Jackson Date: Sun, 14 Jul 2013 16:02:12 -0700 Subject: [PATCH] Add explicit `mysql.port` configuration See: https://github.com/facebook/phabricator/pull/356 Reviewed by: epriestley --- conf/default.conf.php | 7 ++++--- scripts/sql/manage_storage.php | 2 ++ .../config/check/PhabricatorSetupCheckDatabase.php | 3 +++ .../config/option/PhabricatorMySQLConfigOptions.php | 4 ++++ .../DefaultDatabaseConfigurationProvider.php | 4 ++++ src/infrastructure/storage/lisk/PhabricatorLiskDAO.php | 1 + .../management/PhabricatorStorageManagementAPI.php | 10 ++++++++++ 7 files changed, 28 insertions(+), 3 deletions(-) diff --git a/conf/default.conf.php b/conf/default.conf.php index 0ae150cef1..bc427dcafb 100644 --- a/conf/default.conf.php +++ b/conf/default.conf.php @@ -170,11 +170,12 @@ return array( // The password to use when connecting to MySQL. 'mysql.pass' => '', - // The MySQL server to connect to. If you want to connect to a different - // port than the default (which is 3306), specify it in the hostname - // (e.g., db.example.com:1234). + // The MySQL server to connect to. 'mysql.host' => 'localhost', + // If you want to connect to a different port than the default (which is 3306) + 'mysql.port' => '3306', + // Phabricator supports PHP extensions MySQL and MySQLi. It is possible to // implement also other access mechanism (e.g. PDO_MySQL). The class must // extend AphrontMySQLDatabaseConnectionBase. diff --git a/scripts/sql/manage_storage.php b/scripts/sql/manage_storage.php index bdac73ec6e..14ec913623 100755 --- a/scripts/sql/manage_storage.php +++ b/scripts/sql/manage_storage.php @@ -25,6 +25,7 @@ $conf = PhabricatorEnv::newObjectFromConfig( $default_user = $conf->getUser(); $default_host = $conf->getHost(); +$default_port = $conf->getPort(); $default_namespace = PhabricatorLiskDAO::getDefaultStorageNamespace(); try { @@ -82,6 +83,7 @@ $api = new PhabricatorStorageManagementAPI(); $api->setUser($args->getArg('user')); PhabricatorEnv::overrideConfig('mysql.user', $args->getArg('user')); $api->setHost($default_host); +$api->setPort($default_port); $api->setPassword($password); $api->setNamespace($args->getArg('namespace')); diff --git a/src/applications/config/check/PhabricatorSetupCheckDatabase.php b/src/applications/config/check/PhabricatorSetupCheckDatabase.php index 3bf7b152dc..b0903eabc2 100644 --- a/src/applications/config/check/PhabricatorSetupCheckDatabase.php +++ b/src/applications/config/check/PhabricatorSetupCheckDatabase.php @@ -12,6 +12,7 @@ final class PhabricatorSetupCheckDatabase extends PhabricatorSetupCheck { $conn_user = $conf->getUser(); $conn_pass = $conf->getPassword(); $conn_host = $conf->getHost(); + $conn_port = $conf->getPort(); ini_set('mysql.connect_timeout', 2); @@ -19,6 +20,7 @@ final class PhabricatorSetupCheckDatabase extends PhabricatorSetupCheck { 'user' => $conn_user, 'pass' => $conn_pass, 'host' => $conn_host, + 'port' => $conn_port, 'database' => null, ); @@ -40,6 +42,7 @@ final class PhabricatorSetupCheckDatabase extends PhabricatorSetupCheck { ->setMessage($message) ->setIsFatal(true) ->addRelatedPhabricatorConfig('mysql.host') + ->addRelatedPhabricatorConfig('mysql.port') ->addRelatedPhabricatorConfig('mysql.user') ->addRelatedPhabricatorConfig('mysql.pass'); return; diff --git a/src/applications/config/option/PhabricatorMySQLConfigOptions.php b/src/applications/config/option/PhabricatorMySQLConfigOptions.php index 5165fe0a75..e19348880b 100644 --- a/src/applications/config/option/PhabricatorMySQLConfigOptions.php +++ b/src/applications/config/option/PhabricatorMySQLConfigOptions.php @@ -69,6 +69,10 @@ final class PhabricatorMySQLConfigOptions "this namespace if you want. Normally, you should not do this ". "unless you are developing Phabricator and using namespaces to ". "separate multiple sandbox datasets.")), + $this->newOption('mysql.port', 'string', null) + ->setLocked(true) + ->setDescription( + pht("MySQL port to use when connecting to the database.")), ); } diff --git a/src/infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php b/src/infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php index fd62a2680a..839fa2816b 100644 --- a/src/infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php +++ b/src/infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php @@ -29,6 +29,10 @@ final class DefaultDatabaseConfigurationProvider return PhabricatorEnv::getEnvConfig('mysql.host'); } + public function getPort() { + return PhabricatorEnv::getEnvConfig('mysql.port'); + } + public function getDatabase() { if (!$this->getDao()) { return null; diff --git a/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php b/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php index 0158d18b10..1e6ca35738 100644 --- a/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php +++ b/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php @@ -110,6 +110,7 @@ abstract class PhabricatorLiskDAO extends LiskDAO { 'user' => $conf->getUser(), 'pass' => $conf->getPassword(), 'host' => $conf->getHost(), + 'port' => $conf->getPort(), 'database' => $conf->getDatabase(), 'retries' => 3, ), diff --git a/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php b/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php index 2421d50a6e..a61ebd2c5b 100644 --- a/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php +++ b/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php @@ -45,6 +45,15 @@ final class PhabricatorStorageManagementAPI { return $this->host; } + public function setPort($port) { + $this->port = $port; + return $this; + } + + public function getPort() { + return $this->port; + } + public function getDatabaseName($fragment) { return $this->namespace.'_'.$fragment; } @@ -74,6 +83,7 @@ final class PhabricatorStorageManagementAPI { 'user' => $this->user, 'pass' => $this->password, 'host' => $this->host, + 'port' => $this->port, 'database' => $fragment ? $database : null,