diff --git a/core/CHANGELOG.txt b/core/CHANGELOG.txt index 43b794a..761ed1d 100644 --- a/core/CHANGELOG.txt +++ b/core/CHANGELOG.txt @@ -134,7 +134,7 @@ Drupal 7.0, 2011-01-05 * Fully rewritten database layer utilizing PHP 5's PDO abstraction layer. * Drupal now requires MySQL >= 5.0.15 or PostgreSQL >= 8.3. * Added query builders for INSERT, UPDATE, DELETE, MERGE, and SELECT queries. - * Support for primary/secondary replication, transactions, multi-insert + * Support for primary/replica replication, transactions, multi-insert queries, and other features. * Added support for the SQLite database engine. * Default to InnoDB engine, rather than MyISAM, on MySQL when available. diff --git a/core/core.services.yml b/core/core.services.yml index 2de7431..3ca6fe3 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -310,11 +310,11 @@ services: - [initLanguageManager] tags: - { name: service_collector, tag: string_translator, call: addTranslator } - database.secondary: + database.replica: class: Drupal\Core\Database\Connection factory_class: Drupal\Core\Database\Database factory_method: getConnection - arguments: [secondary] + arguments: [replica] typed_data_manager: class: Drupal\Core\TypedData\TypedDataManager parent: default_plugin_manager @@ -709,8 +709,8 @@ services: batch.storage: class: Drupal\Core\Batch\BatchStorage arguments: ['@database'] - secondary_database_ignore__subscriber: - class: Drupal\Core\EventSubscriber\SecondaryDatabaseIgnoreSubscriber + replica_database_ignore__subscriber: + class: Drupal\Core\EventSubscriber\ReplicaDatabaseIgnoreSubscriber tags: - {name: event_subscriber} country_manager: diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index fbe5454..a9ea984 100644 --- a/core/includes/bootstrap.inc +++ b/core/includes/bootstrap.inc @@ -734,7 +734,7 @@ function drupal_add_http_header($name, $value, $append = FALSE) { * * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0. * Use \Symfony\Component\HttpFoundation\Response->headers->get(). - * See https://drupal.org/node/2181523 + * See https://drupal.org/node/2181523. */ function drupal_get_http_header($name = NULL) { $headers = &drupal_static('drupal_http_headers', array()); diff --git a/core/includes/database.inc b/core/includes/database.inc index 4338c92..12d0415 100644 --- a/core/includes/database.inc +++ b/core/includes/database.inc @@ -296,7 +296,7 @@ function db_query_temporary($query, array $args = array(), array $options = arra * A new Insert object for this connection. */ function db_insert($table, array $options = array()) { - if (empty($options['target']) || $options['target'] == 'secondary') { + if (empty($options['target']) || $options['target'] == 'replica') { $options['target'] = 'default'; } return Database::getConnection($options['target'])->insert($table, $options); @@ -314,7 +314,7 @@ function db_insert($table, array $options = array()) { * A new Merge object for this connection. */ function db_merge($table, array $options = array()) { - if (empty($options['target']) || $options['target'] == 'secondary') { + if (empty($options['target']) || $options['target'] == 'replica') { $options['target'] = 'default'; } return Database::getConnection($options['target'])->merge($table, $options); @@ -332,7 +332,7 @@ function db_merge($table, array $options = array()) { * A new Update object for this connection. */ function db_update($table, array $options = array()) { - if (empty($options['target']) || $options['target'] == 'secondary') { + if (empty($options['target']) || $options['target'] == 'replica') { $options['target'] = 'default'; } return Database::getConnection($options['target'])->update($table, $options); @@ -350,7 +350,7 @@ function db_update($table, array $options = array()) { * A new Delete object for this connection. */ function db_delete($table, array $options = array()) { - if (empty($options['target']) || $options['target'] == 'secondary') { + if (empty($options['target']) || $options['target'] == 'replica') { $options['target'] = 'default'; } return Database::getConnection($options['target'])->delete($table, $options); @@ -368,7 +368,7 @@ function db_delete($table, array $options = array()) { * A new Truncate object for this connection. */ function db_truncate($table, array $options = array()) { - if (empty($options['target']) || $options['target'] == 'secondary') { + if (empty($options['target']) || $options['target'] == 'replica') { $options['target'] = 'default'; } return Database::getConnection($options['target'])->truncate($table, $options); @@ -924,21 +924,21 @@ function db_change_field($table, $field, $field_new, $spec, $keys_new = array()) */ /** - * Sets a session variable specifying the lag time for ignoring a secondary - * server. A secondary server is commonly referred to as + * Sets a session variable specifying the lag time for ignoring a replica + * server. A replica server is commonly referred to as * a "slave" in database server documentation. * @see http://drupal.org/node/2275877 */ -function db_ignore_secondary() { +function db_ignore_replica() { $connection_info = Database::getConnectionInfo(); - // Only set ignore_secondary_server if there are secondary servers being used, + // Only set ignore_replica_server if there are replica servers being used, // which is assumed if there are more than one. if (count($connection_info) > 1) { - // Five minutes is long enough to allow the secondary to break and resume + // Five minutes is long enough to allow the replica to break and resume // interrupted replication without causing problems on the Drupal site from // the old data. $duration = Settings::get('maximum_replication_lag', 300); - // Set session variable with amount of time to delay before using secondary. - $_SESSION['ignore_secondary_server'] = REQUEST_TIME + $duration; + // Set session variable with amount of time to delay before using replica. + $_SESSION['ignore_replica_server'] = REQUEST_TIME + $duration; } } diff --git a/core/lib/Drupal/Core/Config/DatabaseStorage.php b/core/lib/Drupal/Core/Config/DatabaseStorage.php index b1ebbf0..64214ae 100644 --- a/core/lib/Drupal/Core/Config/DatabaseStorage.php +++ b/core/lib/Drupal/Core/Config/DatabaseStorage.php @@ -219,7 +219,7 @@ protected static function schemaDefinition() { * * @throws PDOException * - * @todo Ignore secondary targets for data manipulation operations. + * @todo Ignore replica targets for data manipulation operations. */ public function delete($name) { $options = array('return' => Database::RETURN_AFFECTED) + $this->options; diff --git a/core/lib/Drupal/Core/Database/Connection.php b/core/lib/Drupal/Core/Database/Connection.php index c167f0c..7cbe167 100644 --- a/core/lib/Drupal/Core/Database/Connection.php +++ b/core/lib/Drupal/Core/Database/Connection.php @@ -35,8 +35,8 @@ * The key representing this connection. * * The key is a unique string which identifies a database connection. A - * connection can be a single server or a cluster of primary and secondaries (use - * target to pick between primary and secondary). + * connection can be a single server or a cluster of primary and replicas + * (use target to pick between primary and replica). * * @var string */ @@ -188,7 +188,7 @@ public function destroy() { * A given query can be customized with a number of option flags in an * associative array: * - target: The database "target" against which to execute a query. Valid - * values are "default" or "secondary". The system will first try to open a + * values are "default" or "replica". The system will first try to open a * connection to a database specified with the user-supplied key. If one * is not available, it will silently fall back to the "default" target. * If multiple databases connections are specified with the same target, diff --git a/core/lib/Drupal/Core/Database/Database.php b/core/lib/Drupal/Core/Database/Database.php index 63170d8..a799926 100644 --- a/core/lib/Drupal/Core/Database/Database.php +++ b/core/lib/Drupal/Core/Database/Database.php @@ -159,7 +159,7 @@ } // If the requested target does not exist, or if it is ignored, we fall back // to the default target. The target is typically either "default" or - // "secondary", indicating to use a secondary SQL server if one is available. If + // "replica", indicating to use a replica SQL server if one is available. If // it's not available, then the default/primary server is the correct server // to use. if (!empty(self::$ignoreTargets[$key][$target]) || !isset(self::$databaseInfo[$key][$target])) { @@ -212,7 +212,7 @@ final public static function parseConnectionInfo(array $info) { // If there is no "driver" property, then we assume it's an array of // possible connections for this target. Pick one at random. That allows - // us to have, for example, multiple secondary servers. + // us to have, for example, multiple replica servers. if (empty($info['driver'])) { $info = $info[mt_rand(0, count($info) - 1)]; } @@ -431,7 +431,7 @@ public static function closeConnection($target = NULL, $key = NULL) { /** * Instructs the system to temporarily ignore a given key/target. * - * At times we need to temporarily disable secondary queries. To do so, call this + * At times we need to temporarily disable replica queries. To do so, call this * method with the database key and the target to disable. That database key * will then always fall back to 'default' for that key, even if it's defined. * diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php index 9518905..cf7930d 100644 --- a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php @@ -611,8 +611,8 @@ public function delete(array $entities) { try { parent::delete($entities); - // Ignore secondary server temporarily. - db_ignore_secondary(); + // Ignore replica server temporarily. + db_ignore_replica(); } catch (\Exception $e) { $transaction->rollback(); @@ -669,8 +669,8 @@ public function save(EntityInterface $entity) { $return = parent::save($entity); - // Ignore secondary server temporarily. - db_ignore_secondary(); + // Ignore replica server temporarily. + db_ignore_replica(); return $return; } catch (\Exception $e) { diff --git a/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php index 88431f9..4566515 100644 --- a/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php +++ b/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php @@ -135,8 +135,8 @@ public function delete(array $entities) { try { parent::delete($entities); - // Ignore secondary server temporarily. - db_ignore_secondary(); + // Ignore replica server temporarily. + db_ignore_replica(); } catch (\Exception $e) { $transaction->rollback(); @@ -167,8 +167,8 @@ public function save(EntityInterface $entity) { try { $return = parent::save($entity); - // Ignore secondary server temporarily. - db_ignore_secondary(); + // Ignore replica server temporarily. + db_ignore_replica(); return $return; } catch (\Exception $e) { diff --git a/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php index c848fb9..7faff7b 100644 --- a/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\Core\EventSubscriber\SecondaryDatabaseIgnoreSubscriber. + * Contains \Drupal\Core\EventSubscriber\ReplicaDatabaseIgnoreSubscriber. */ namespace Drupal\Core\EventSubscriber; @@ -15,36 +15,36 @@ /** * System subscriber for controller requests. */ -class SecondaryDatabaseIgnoreSubscriber implements EventSubscriberInterface { +class ReplicaDatabaseIgnoreSubscriber implements EventSubscriberInterface { /** - * Checks and disables the secondary database server if appropriate. + * Checks and disables the replica database server if appropriate. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ - public function checkSecondaryServer(GetResponseEvent $event) { - // Ignore secondary database servers for this request. + public function checkReplicaServer(GetResponseEvent $event) { + // Ignore replica database servers for this request. // // In Drupal's distributed database structure, new data is written to the - // master and then propagated to the secondary servers. This means there is a + // master and then propagated to the replica servers. This means there is a // lag between when data is written to the master and when it is available - // on the secondary. At these times, we will want to avoid using a secondary server + // on the replica. At these times, we will want to avoid using a replica server // temporarily. For example, if a user posts a new node then we want to - // disable the secondary server for that user temporarily to allow the secondary + // disable the replica server for that user temporarily to allow the replica // server to catch up. // That way, that user will see their changes immediately while for other - // users we still get the benefits of having a secondary server, just with - // slightly stale data. Code that wants to disable the secondary server should - // use the db_set_ignore_secondary() function to set - // $_SESSION['ignore_secondary_server'] to the timestamp after which the secondary + // users we still get the benefits of having a replica server, just with + // slightly stale data. Code that wants to disable the replica server should + // use the db_set_ignore_replica() function to set + // $_SESSION['ignore_replica_server'] to the timestamp after which the replica // can be re-enabled. - if (isset($_SESSION['ignore_secondary_server'])) { - if ($_SESSION['ignore_secondary_server'] >= REQUEST_TIME) { - Database::ignoreTarget('default', 'secondary'); + if (isset($_SESSION['ignore_replica_server'])) { + if ($_SESSION['ignore_replica_server'] >= REQUEST_TIME) { + Database::ignoreTarget('default', 'replica'); } else { - unset($_SESSION['ignore_secondary_server']); + unset($_SESSION['ignore_replica_server']); } } } @@ -53,7 +53,7 @@ public function checkSecondaryServer(GetResponseEvent $event) { * {@inheritdoc} */ static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('checkSecondaryServer'); + $events[KernelEvents::REQUEST][] = array('checkReplicaServer'); return $events; } diff --git a/core/modules/aggregator/config/install/views.view.aggregator_rss_feed.yml b/core/modules/aggregator/config/install/views.view.aggregator_rss_feed.yml index 1c7ad51..f7a9499 100644 --- a/core/modules/aggregator/config/install/views.view.aggregator_rss_feed.yml +++ b/core/modules/aggregator/config/install/views.view.aggregator_rss_feed.yml @@ -23,7 +23,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml index 4c1afe9..2a443b5 100644 --- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml +++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_row.yml @@ -29,7 +29,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } exposed_form: diff --git a/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml b/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml index 471024c..81ed044 100644 --- a/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml +++ b/core/modules/contact/tests/modules/contact_test_views/test_views/views.view.test_contact_link.yml @@ -20,7 +20,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: '' query_tags: { } exposed_form: diff --git a/core/modules/file/config/install/views.view.files.yml b/core/modules/file/config/install/views.view.files.yml index 160db69..ccd4d1a 100644 --- a/core/modules/file/config/install/views.view.files.yml +++ b/core/modules/file/config/install/views.view.files.yml @@ -24,7 +24,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/menu_link/src/MenuLinkStorage.php b/core/modules/menu_link/src/MenuLinkStorage.php index 140bfdc..1ece00d 100644 --- a/core/modules/menu_link/src/MenuLinkStorage.php +++ b/core/modules/menu_link/src/MenuLinkStorage.php @@ -95,8 +95,8 @@ public function save(EntityInterface $entity) { } } - // Ignore secondary server temporarily. - db_ignore_secondary(); + // Ignore replica server temporarily. + db_ignore_replica(); unset($entity->original); return $return; diff --git a/core/modules/node/config/install/views.view.archive.yml b/core/modules/node/config/install/views.view.archive.yml index dc789a5..7b86429 100644 --- a/core/modules/node/config/install/views.view.archive.yml +++ b/core/modules/node/config/install/views.view.archive.yml @@ -16,7 +16,7 @@ display: query_comment: false disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_tags: { } provider: views title: 'Monthly archive' diff --git a/core/modules/node/config/install/views.view.content_recent.yml b/core/modules/node/config/install/views.view.content_recent.yml index 2b09e07..07afd74 100644 --- a/core/modules/node/config/install/views.view.content_recent.yml +++ b/core/modules/node/config/install/views.view.content_recent.yml @@ -24,7 +24,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/node/config/install/views.view.frontpage.yml b/core/modules/node/config/install/views.view.frontpage.yml index a84f40b..d03ea99 100644 --- a/core/modules/node/config/install/views.view.frontpage.yml +++ b/core/modules/node/config/install/views.view.frontpage.yml @@ -137,7 +137,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/node/config/install/views.view.glossary.yml b/core/modules/node/config/install/views.view.glossary.yml index 5667615..a9b86a1 100644 --- a/core/modules/node/config/install/views.view.glossary.yml +++ b/core/modules/node/config/install/views.view.glossary.yml @@ -16,7 +16,7 @@ display: query_comment: false disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_tags: { } provider: views use_ajax: true diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php index a994efc..f01be93 100644 --- a/core/modules/node/src/Plugin/Search/NodeSearch.php +++ b/core/modules/node/src/Plugin/Search/NodeSearch.php @@ -181,7 +181,7 @@ public function execute() { // Build matching conditions. $query = $this->database - ->select('search_index', 'i', array('target' => 'secondary')) + ->select('search_index', 'i', array('target' => 'replica')) ->extend('Drupal\search\SearchQuery') ->extend('Drupal\Core\Database\Query\PagerSelectExtender'); $query->join('node_field_data', 'n', 'n.nid = i.sid'); @@ -324,7 +324,7 @@ public function updateIndex() { // per cron run. $limit = (int) $this->searchSettings->get('index.cron_limit'); - $result = $this->database->queryRange("SELECT n.nid, MAX(sd.reindex) FROM {node} n LEFT JOIN {search_dataset} sd ON sd.sid = n.nid AND sd.type = :type WHERE sd.sid IS NULL OR sd.reindex <> 0 GROUP BY n.nid ORDER BY MAX(sd.reindex) is null DESC, MAX(sd.reindex) ASC, n.nid ASC", 0, $limit, array(':type' => $this->getPluginId()), array('target' => 'secondary')); + $result = $this->database->queryRange("SELECT n.nid, MAX(sd.reindex) FROM {node} n LEFT JOIN {search_dataset} sd ON sd.sid = n.nid AND sd.type = :type WHERE sd.sid IS NULL OR sd.reindex <> 0 GROUP BY n.nid ORDER BY MAX(sd.reindex) is null DESC, MAX(sd.reindex) ASC, n.nid ASC", 0, $limit, array(':type' => $this->getPluginId()), array('target' => 'replica')); $nids = $result->fetchCol(); if (!$nids) { return; diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml index 125bef6..5b3b4f4 100644 --- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml +++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml @@ -39,7 +39,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: '' query_tags: { } row: diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_view.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_view.yml index 071fb29..b97e5f2 100644 --- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_view.yml +++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_view.yml @@ -29,7 +29,7 @@ display: options: disable_sql_rewrite: '0' distinct: '0' - secondary: '0' + replica: '0' query_comment: '' query_tags: { } exposed_form: diff --git a/core/modules/search/search.module b/core/modules/search/search.module index 4794ba0..b845a30 100644 --- a/core/modules/search/search.module +++ b/core/modules/search/search.module @@ -221,7 +221,7 @@ function search_update_totals() { // Update word IDF (Inverse Document Frequency) counts for new/changed words. foreach (search_dirty() as $word => $dummy) { // Get total count - $total = db_query("SELECT SUM(score) FROM {search_index} WHERE word = :word", array(':word' => $word), array('target' => 'secondary'))->fetchField(); + $total = db_query("SELECT SUM(score) FROM {search_index} WHERE word = :word", array(':word' => $word), array('target' => 'replica'))->fetchField(); // Apply Zipf's law to equalize the probability distribution. $total = log10(1 + 1/(max(1, $total))); db_merge('search_total') @@ -232,7 +232,7 @@ function search_update_totals() { // Find words that were deleted from search_index, but are still in // search_total. We use a LEFT JOIN between the two tables and keep only the // rows which fail to join. - $result = db_query("SELECT t.word AS realword, i.word FROM {search_total} t LEFT JOIN {search_index} i ON t.word = i.word WHERE i.word IS NULL", array(), array('target' => 'secondary')); + $result = db_query("SELECT t.word AS realword, i.word FROM {search_total} t LEFT JOIN {search_index} i ON t.word = i.word WHERE i.word IS NULL", array(), array('target' => 'replica')); $or = db_or(); foreach ($result as $word) { $or->condition('word', $word->realword); diff --git a/core/modules/search/src/Plugin/views/argument/Search.php b/core/modules/search/src/Plugin/views/argument/Search.php index 0611004..3bcf208 100644 --- a/core/modules/search/src/Plugin/views/argument/Search.php +++ b/core/modules/search/src/Plugin/views/argument/Search.php @@ -52,7 +52,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o */ protected function queryParseSearchExpression($input) { if (!isset($this->searchQuery)) { - $this->searchQuery = db_select('search_index', 'i', array('target' => 'secondary'))->extend('Drupal\search\ViewsSearchQuery'); + $this->searchQuery = db_select('search_index', 'i', array('target' => 'replica'))->extend('Drupal\search\ViewsSearchQuery'); $this->searchQuery->searchExpression($input, $this->searchType); $this->searchQuery->publicParseSearchExpression(); } diff --git a/core/modules/search/src/Plugin/views/filter/Search.php b/core/modules/search/src/Plugin/views/filter/Search.php index 9f8f0e0..ef69c7d 100644 --- a/core/modules/search/src/Plugin/views/filter/Search.php +++ b/core/modules/search/src/Plugin/views/filter/Search.php @@ -121,7 +121,7 @@ public function validateExposed(&$form, &$form_state) { protected function queryParseSearchExpression($input) { if (!isset($this->searchQuery)) { $this->parsed = TRUE; - $this->searchQuery = db_select('search_index', 'i', array('target' => 'secondary'))->extend('Drupal\search\ViewsSearchQuery'); + $this->searchQuery = db_select('search_index', 'i', array('target' => 'replica'))->extend('Drupal\search\ViewsSearchQuery'); $this->searchQuery->searchExpression($input, $this->searchType); $this->searchQuery->publicParseSearchExpression(); } diff --git a/core/modules/search/src/SearchQuery.php b/core/modules/search/src/SearchQuery.php index 02f02b8..4211bd9 100644 --- a/core/modules/search/src/SearchQuery.php +++ b/core/modules/search/src/SearchQuery.php @@ -600,7 +600,7 @@ public function countQuery() { $expressions = array(); // Add sid as the only field and count them as a subquery. - $count = db_select($inner->fields('i', array('sid')), NULL, array('target' => 'secondary')); + $count = db_select($inner->fields('i', array('sid')), NULL, array('target' => 'replica')); // Add the COUNT() expression. $count->addExpression('COUNT(*)'); diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module index eddaa97..3b40cea 100644 --- a/core/modules/statistics/statistics.module +++ b/core/modules/statistics/statistics.module @@ -155,7 +155,7 @@ function statistics_get($nid) { if ($nid > 0) { // Retrieve an array with both totalcount and daycount. - return db_query('SELECT totalcount, daycount, timestamp FROM {node_counter} WHERE nid = :nid', array(':nid' => $nid), array('target' => 'secondary'))->fetchAssoc(); + return db_query('SELECT totalcount, daycount, timestamp FROM {node_counter} WHERE nid = :nid', array(':nid' => $nid), array('target' => 'replica'))->fetchAssoc(); } } diff --git a/core/modules/system/src/Tests/Database/ConnectionTest.php b/core/modules/system/src/Tests/Database/ConnectionTest.php index e53d0fd..03d6a4d 100644 --- a/core/modules/system/src/Tests/Database/ConnectionTest.php +++ b/core/modules/system/src/Tests/Database/ConnectionTest.php @@ -26,22 +26,22 @@ public static function getInfo() { * Tests that connections return appropriate connection objects. */ function testConnectionRouting() { - // Clone the primary credentials to a secondary connection. + // Clone the primary credentials to a replica connection. // Note this will result in two independent connection objects that happen // to point to the same place. $connection_info = Database::getConnectionInfo('default'); - Database::addConnectionInfo('default', 'secondary', $connection_info['default']); + Database::addConnectionInfo('default', 'replica', $connection_info['default']); $db1 = Database::getConnection('default', 'default'); - $db2 = Database::getConnection('secondary', 'default'); + $db2 = Database::getConnection('replica', 'default'); $this->assertNotNull($db1, 'default connection is a real connection object.'); - $this->assertNotNull($db2, 'secondary connection is a real connection object.'); + $this->assertNotNull($db2, 'replica connection is a real connection object.'); $this->assertNotIdentical($db1, $db2, 'Each target refers to a different connection.'); // Try to open those targets another time, that should return the same objects. $db1b = Database::getConnection('default', 'default'); - $db2b = Database::getConnection('secondary', 'default'); + $db2b = Database::getConnection('replica', 'default'); $this->assertIdentical($db1, $db1b, 'A second call to getConnection() returns the same object.'); $this->assertIdentical($db2, $db2b, 'A second call to getConnection() returns the same object.'); @@ -60,16 +60,16 @@ function testConnectionRouting() { * Tests that connections return appropriate connection objects. */ function testConnectionRoutingOverride() { - // Clone the primary credentials to a secondary connection. + // Clone the primary credentials to a replica connection. // Note this will result in two independent connection objects that happen // to point to the same place. $connection_info = Database::getConnectionInfo('default'); - Database::addConnectionInfo('default', 'secondary', $connection_info['default']); + Database::addConnectionInfo('default', 'replica', $connection_info['default']); - Database::ignoreTarget('default', 'secondary'); + Database::ignoreTarget('default', 'replica'); $db1 = Database::getConnection('default', 'default'); - $db2 = Database::getConnection('secondary', 'default'); + $db2 = Database::getConnection('replica', 'default'); $this->assertIdentical($db1, $db2, 'Both targets refer to the same connection.'); } @@ -104,14 +104,14 @@ function testConnectionOptions() { $this->assertEqual($connection_info['default']['driver'], $connectionOptions['driver'], 'The default connection info driver matches the current connection options driver.'); $this->assertEqual($connection_info['default']['database'], $connectionOptions['database'], 'The default connection info database matches the current connection options database.'); - // Set up identical secondary and confirm connection options are identical. - Database::addConnectionInfo('default', 'secondary', $connection_info['default']); - $db2 = Database::getConnection('secondary', 'default'); + // Set up identical replica and confirm connection options are identical. + Database::addConnectionInfo('default', 'replica', $connection_info['default']); + $db2 = Database::getConnection('replica', 'default'); $connectionOptions2 = $db2->getConnectionOptions(); // Get a fresh copy of the default connection options. $connectionOptions = $db->getConnectionOptions(); - $this->assertIdentical($connectionOptions, $connectionOptions2, 'The default and secondary connection options are identical.'); + $this->assertIdentical($connectionOptions, $connectionOptions2, 'The default and replica connection options are identical.'); // Set up a new connection with different connection info. $test = $connection_info['default']; diff --git a/core/modules/system/src/Tests/Database/LoggingTest.php b/core/modules/system/src/Tests/Database/LoggingTest.php index 2defb85..225d77d 100644 --- a/core/modules/system/src/Tests/Database/LoggingTest.php +++ b/core/modules/system/src/Tests/Database/LoggingTest.php @@ -66,22 +66,22 @@ function testEnableMultiLogging() { * Tests logging queries against multiple targets on the same connection. */ function testEnableTargetLogging() { - // Clone the primary credentials to a secondary connection and to another fake + // Clone the primary credentials to a replica connection and to another fake // connection. $connection_info = Database::getConnectionInfo('default'); - Database::addConnectionInfo('default', 'secondary', $connection_info['default']); + Database::addConnectionInfo('default', 'replica', $connection_info['default']); Database::startLog('testing1'); db_query('SELECT name FROM {test} WHERE age > :age', array(':age' => 25))->fetchCol(); - db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Ringo'), array('target' => 'secondary'));//->fetchCol(); + db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Ringo'), array('target' => 'replica'));//->fetchCol(); $queries1 = Database::getLog('testing1'); $this->assertEqual(count($queries1), 2, 'Recorded queries from all targets.'); $this->assertEqual($queries1[0]['target'], 'default', 'First query used default target.'); - $this->assertEqual($queries1[1]['target'], 'secondary', 'Second query used secondary target.'); + $this->assertEqual($queries1[1]['target'], 'replica', 'Second query used replica target.'); } /** @@ -98,7 +98,7 @@ function testEnableTargetLoggingNoTarget() { // We use "fake" here as a target because any non-existent target will do. // However, because all of the tests in this class share a single page - // request there is likely to be a target of "secondary" from one of the other + // request there is likely to be a target of "replica" from one of the other // unit tests, so we use a target here that we know with absolute certainty // does not exist. db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Ringo'), array('target' => 'fake'))->fetchCol(); @@ -126,7 +126,7 @@ function testEnableMultiConnectionLogging() { $old_key = db_set_active('test2'); - db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Ringo'), array('target' => 'secondary'))->fetchCol(); + db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Ringo'), array('target' => 'replica'))->fetchCol(); db_set_active($old_key); diff --git a/core/modules/system/src/Tests/Database/SelectComplexTest.php b/core/modules/system/src/Tests/Database/SelectComplexTest.php index 7dd0f89..02fa607 100644 --- a/core/modules/system/src/Tests/Database/SelectComplexTest.php +++ b/core/modules/system/src/Tests/Database/SelectComplexTest.php @@ -337,7 +337,7 @@ function testJoinSubquery() { 'mail' => $this->randomName() . '@example.com', )); - $query = db_select('test_task', 'tt', array('target' => 'secondary')); + $query = db_select('test_task', 'tt', array('target' => 'replica')); $query->addExpression('tt.pid + 1', 'abc'); $query->condition('priority', 1, '>'); $query->condition('priority', 100, '<'); diff --git a/core/modules/system/src/Tests/System/IgnoreSlaveSubscriberTest.php b/core/modules/system/src/Tests/System/IgnoreSlaveSubscriberTest.php index 1cc8d84..059d3b4 100644 --- a/core/modules/system/src/Tests/System/IgnoreSlaveSubscriberTest.php +++ b/core/modules/system/src/Tests/System/IgnoreSlaveSubscriberTest.php @@ -1,13 +1,13 @@ 'Secondary database ignoring event listener', - 'description' => 'Tests that SecondaryDatabaseIgnoreSubscriber functions correctly.', + 'name' => 'Replica database ignoring event listener', + 'description' => 'Tests that ReplicaDatabaseIgnoreSubscriber functions correctly.', 'group' => 'System', ); } /** - * Tests \Drupal\Core\EventSubscriber\SecondaryDatabaseIgnoreSubscriber::checkSecondaryServer(). + * Tests \Drupal\Core\EventSubscriber\ReplicaDatabaseIgnoreSubscriber::checkReplicaServer(). */ function testSystemInitIgnoresSecondaries() { - // Clone the master credentials to a secondary connection. + // Clone the master credentials to a replica connection. // Note this will result in two independent connection objects that happen // to point to the same place. $connection_info = Database::getConnectionInfo('default'); - Database::addConnectionInfo('default', 'secondary', $connection_info['default']); + Database::addConnectionInfo('default', 'replica', $connection_info['default']); - db_ignore_secondary(); + db_ignore_replica(); $kernel = new DrupalKernel('testing', drupal_classloader(), FALSE); $event = new GetResponseEvent($kernel, Request::create('http://example.com'), HttpKernelInterface::MASTER_REQUEST); - $subscriber = new SecondaryDatabaseIgnoreSubscriber(); - $subscriber->checkSecondaryServer($event); + $subscriber = new ReplicaDatabaseIgnoreSubscriber(); + $subscriber->checkReplicaServer($event); $db1 = Database::getConnection('default', 'default'); - $db2 = Database::getConnection('secondary', 'default'); + $db2 = Database::getConnection('replica', 'default'); $this->assertIdentical($db1, $db2, 'System Init ignores secondaries when requested.'); } diff --git a/core/modules/taxonomy/config/install/views.view.taxonomy_term.yml b/core/modules/taxonomy/config/install/views.view.taxonomy_term.yml index 098c55f..01e540e 100644 --- a/core/modules/taxonomy/config/install/views.view.taxonomy_term.yml +++ b/core/modules/taxonomy/config/install/views.view.taxonomy_term.yml @@ -16,7 +16,7 @@ display: query_comment: false disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_tags: { } provider: views access: diff --git a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_filter_taxonomy_index_tid.yml b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_filter_taxonomy_index_tid.yml index f6abc37..5a60315 100644 --- a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_filter_taxonomy_index_tid.yml +++ b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_filter_taxonomy_index_tid.yml @@ -22,7 +22,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: '' query_tags: { } exposed_form: diff --git a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_parent.yml b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_parent.yml index 09fd592..b03da88 100644 --- a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_parent.yml +++ b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_parent.yml @@ -25,7 +25,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/tracker/tracker.module b/core/modules/tracker/tracker.module index 08420d4..cd5d1ed 100644 --- a/core/modules/tracker/tracker.module +++ b/core/modules/tracker/tracker.module @@ -46,7 +46,7 @@ function tracker_cron() { $last_nid = FALSE; // @todo This should be actually filtering on the desired language and just // fall back to the default language. - $result = db_query_range('SELECT nid, uid, status FROM {node_field_data} WHERE nid <= :max_nid AND default_langcode = 1 ORDER BY nid DESC', 0, $batch_size, array(':max_nid' => $max_nid), array('target' => 'secondary')); + $result = db_query_range('SELECT nid, uid, status FROM {node_field_data} WHERE nid <= :max_nid AND default_langcode = 1 ORDER BY nid DESC', 0, $batch_size, array(':max_nid' => $max_nid), array('target' => 'replica')); $count = 0; @@ -81,7 +81,7 @@ function tracker_cron() { )) ->execute(); - $query = db_select('comment', 'c', array('target' => 'secondary')); + $query = db_select('comment', 'c', array('target' => 'replica')); // Force PostgreSQL to do an implicit cast by adding 0. $query->addExpression('0 + :changed', 'changed', array(':changed' => $changed)); $query->addField('c', 'status', 'published'); @@ -290,11 +290,11 @@ function _tracker_add($nid, $uid, $changed) { function _tracker_calculate_changed($nid) { // @todo This should be actually filtering on the desired language and just // fall back to the default language. - $changed = db_query('SELECT changed FROM {node_field_data} WHERE nid = :nid AND default_langcode = 1 ORDER BY changed DESC', array(':nid' => $nid), array('target' => 'secondary'))->fetchField(); + $changed = db_query('SELECT changed FROM {node_field_data} WHERE nid = :nid AND default_langcode = 1 ORDER BY changed DESC', array(':nid' => $nid), array('target' => 'replica'))->fetchField(); $latest_comment = db_query_range("SELECT cid, changed FROM {comment} WHERE entity_type = 'node' AND entity_id = :nid AND status = :status ORDER BY changed DESC", 0, 1, array( ':nid' => $nid, ':status' => CommentInterface::PUBLISHED, - ), array('target' => 'secondary'))->fetchObject(); + ), array('target' => 'replica'))->fetchObject(); if ($latest_comment && $latest_comment->changed > $changed) { $changed = $latest_comment->changed; } diff --git a/core/modules/tracker/tracker.pages.inc b/core/modules/tracker/tracker.pages.inc index 8dca90f..562a0fe 100644 --- a/core/modules/tracker/tracker.pages.inc +++ b/core/modules/tracker/tracker.pages.inc @@ -25,7 +25,7 @@ function tracker_page($account = NULL) { ->condition('t.uid', $account->id()); } else { - $query = db_select('tracker_node', 't', array('target' => 'secondary')) + $query = db_select('tracker_node', 't', array('target' => 'replica')) ->extend('Drupal\Core\Database\Query\PagerSelectExtender') ->addMetaData('base_table', 'tracker_node'); } @@ -61,7 +61,7 @@ function tracker_page($account = NULL) { GROUP BY n.nid ORDER BY n.changed DESC", array( ':nids' => array_keys($nodes) - ), array('target' => 'secondary'))->fetchAllKeyed(); + ), array('target' => 'replica'))->fetchAllKeyed(); foreach ($result as $nid => $comment_count) { $nodes[$nid]->last_activity = $tracker_data[$nid]->changed; $nodes[$nid]->comment_count = $comment_count; diff --git a/core/modules/user/config/install/views.view.user_admin_people.yml b/core/modules/user/config/install/views.view.user_admin_people.yml index 2d99775..e08752e 100644 --- a/core/modules/user/config/install/views.view.user_admin_people.yml +++ b/core/modules/user/config/install/views.view.user_admin_people.yml @@ -23,7 +23,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/user/config/install/views.view.who_s_new.yml b/core/modules/user/config/install/views.view.who_s_new.yml index 4961326..7aa3a5d 100644 --- a/core/modules/user/config/install/views.view.who_s_new.yml +++ b/core/modules/user/config/install/views.view.who_s_new.yml @@ -24,7 +24,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/user/config/install/views.view.who_s_online.yml b/core/modules/user/config/install/views.view.who_s_online.yml index 5803425..3b92c49 100644 --- a/core/modules/user/config/install/views.view.who_s_online.yml +++ b/core/modules/user/config/install/views.view.who_s_online.yml @@ -24,7 +24,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } provider: views diff --git a/core/modules/views/config/schema/views.data_types.schema.yml b/core/modules/views/config/schema/views.data_types.schema.yml index 787d770..79694af 100644 --- a/core/modules/views/config/schema/views.data_types.schema.yml +++ b/core/modules/views/config/schema/views.data_types.schema.yml @@ -832,9 +832,9 @@ views_query: distinct: type: boolean label: 'Distinct' - secondary: + replica: type: boolean - label: 'Use Secondary Server' + label: 'Use Replica Server' query_tags: type: sequence label: 'Query Tags' diff --git a/core/modules/views/src/Plugin/views/query/Sql.php b/core/modules/views/src/Plugin/views/query/Sql.php index 35d9c91..323549c 100644 --- a/core/modules/views/src/Plugin/views/query/Sql.php +++ b/core/modules/views/src/Plugin/views/query/Sql.php @@ -181,7 +181,7 @@ protected function defineOptions() { 'default' => FALSE, 'bool' => TRUE, ); - $options['secondary'] = array( + $options['replica'] = array( 'default' => FALSE, 'bool' => TRUE, ); @@ -214,11 +214,11 @@ public function buildOptionsForm(&$form, &$form_state) { '#description' => t('This will make the view display only distinct items. If there are multiple identical items, each will be displayed only once. You can use this to try and remove duplicates from a view, though it does not always work. Note that this can slow queries down, so use it with caution.'), '#default_value' => !empty($this->options['distinct']), ); - $form['secondary'] = array( + $form['replica'] = array( '#type' => 'checkbox', '#title' => t('Use Secondary Server'), - '#description' => t('This will make the query attempt to connect to a secondary server if available. If no secondary server is defined or available, it will fall back to the default server.'), - '#default_value' => !empty($this->options['secondary']), + '#description' => t('This will make the query attempt to connect to a replica server if available. If no replica server is defined or available, it will fall back to the default server.'), + '#default_value' => !empty($this->options['replica']), ); $form['query_comment'] = array( '#type' => 'textfield', @@ -1204,9 +1204,9 @@ public function query($get_count = FALSE) { $key = $this->view->base_database; } - // Set the secondary target if the secondary option is set - if (!empty($this->options['secondary'])) { - $target = 'secondary'; + // Set the replica target if the replica option is set + if (!empty($this->options['replica'])) { + $target = 'replica'; } // Go ahead and build the query. diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_search.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_search.yml index 19dc91d..0c0616c 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_search.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_search.yml @@ -87,7 +87,7 @@ display: options: disable_sql_rewrite: false distinct: false - secondary: false + replica: false query_comment: false query_tags: { } exposed_form: diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php index 2a426c5..4a3e931 100644 --- a/sites/default/default.settings.php +++ b/sites/default/default.settings.php @@ -98,23 +98,23 @@ * For each database, you may optionally specify multiple "target" databases. * A target database allows Drupal to try to send certain queries to a * different database if it can but fall back to the default connection if not. - * That is useful for primary/secondary replication, as Drupal may try to connect - * to a secondary server when appropriate and if one is not available will simply - * fall back to the single primary server. The terms primary/secondary are + * That is useful for primary/replica replication, as Drupal may try to connect + * to a replica server when appropriate and if one is not available will simply + * fall back to the single primary server. The terms primary/replica are * commonly referred to as master/slave in database server documentation. * * The general format for the $databases array is as follows: * @code * $databases['default']['default'] = $info_array; - * $databases['default']['secondary'][] = $info_array; - * $databases['default']['secondary'][] = $info_array; + * $databases['default']['replica'][] = $info_array; + * $databases['default']['replica'][] = $info_array; * $databases['extra']['default'] = $info_array; * @endcode * * In the above example, $info_array is an array of settings described above. * The first line sets a "default" database that has one primary database * (the second level default). The second and third lines create an array - * of potential secondary databases. Drupal will select one at random for a given + * of potential replica databases. Drupal will select one at random for a given * request as needed. The fourth line creates a new database with a name of * "extra". *