summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/comment/comment.module7
-rw-r--r--modules/node/node.module4
-rw-r--r--modules/system/system.module24
3 files changed, 35 insertions, 0 deletions
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 7b6180f20..bc578e350 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -962,12 +962,19 @@ function comment_save(&$comment) {
'homepage' => $comment['homepage'],
))
->execute();
+
+ // Ignore slave server temporarily to give time for the
+ // saved node to be propagated to the slave.
+ db_ignore_slave();
+
// Tell the other modules a new comment has been submitted.
comment_invoke_comment($comment, 'insert');
+
// Add an entry to the watchdog log.
watchdog('content', 'Comment: added %subject.', array('%subject' => $comment['subject']), WATCHDOG_NOTICE, l(t('view'), 'comment/' . $comment['cid'], array('fragment' => 'comment-' . $comment['cid'])));
}
_comment_update_node_statistics($comment['nid']);
+
// Clear the cache so an anonymous user can see his comment being added.
cache_clear_all();
diff --git a/modules/node/node.module b/modules/node/node.module
index 6692a20de..9eec39e11 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1003,6 +1003,10 @@ function node_save($node) {
// Clear the page and block caches.
cache_clear_all();
+
+ // Ignore slave server temporarily to give time for the
+ // saved node to be propagated to the slave.
+ db_ignore_slave();
}
/**
diff --git a/modules/system/system.module b/modules/system/system.module
index 7a2667457..567cf8989 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -872,8 +872,32 @@ function system_init() {
drupal_add_css(drupal_get_path('module', 'system') . '/defaults.css');
drupal_add_css(drupal_get_path('module', 'system') . '/system.css');
drupal_add_css(drupal_get_path('module', 'system') . '/system-menus.css');
+
+
+ // Ignore slave database servers for this request.
+ //
+ // In Drupal's distributed database structure, new data is written to the master
+ // and then propagated to the slave servers. This means there is a lag
+ // between when data is written to the master and when it is available on the slave.
+ // At these times, we will want to avoid using a slave server temporarily.
+ // For example, if a user posts a new node then we want to disable the slave
+ // server for that user temporarily to allow the slave 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 slave server, just with slightly
+ // stale data. Code that wants to disable the slave server should use the
+ // db_set_ignore_slave() function to set $_SESSION['ignore_slave_server'] to
+ // the timestamp after which the slave can be re-enabled.
+ if (isset($_SESSION['ignore_slave_server'])) {
+ if ($_SESSION['ignore_slave_server'] >= REQUEST_TIME) {
+ Database::ignoreTarget('default', 'slave');
+ }
+ else {
+ unset($_SESSION['ignore_slave_server']);
+ }
+ }
}
+
/**
* Implement MODULE_preprocess_HOOK().
*/