Index: includes/database/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/database.inc,v
retrieving revision 1.56
diff -u -r1.56 database.inc
--- includes/database/database.inc	27 Jun 2009 09:44:05 -0000	1.56
+++ includes/database/database.inc	30 Jun 2009 22:11:00 -0000
@@ -2687,6 +2687,18 @@
   return $query;
 }
 
+/**
+ * Helper function to get duration lag from variable
+ * and set the session variable that contains the lag.
+ */
+function db_ignore_slave() {
+  // Five minutes is long enough to allow the slave to break and resume
+  // interrupted replication without causing problems on the Drupal site
+  // from the old data.
+  $duration = variable_get('maximum_replication_lag', 300);
+  // Set session variable with amount of time to delay  before using slave.
+  $_SESSION['ignore_slave_server'] = REQUEST_TIME + $duration;
+}
 
 /**
  * @} End of "ingroup database-legacy".
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.729
diff -u -r1.729 comment.module
--- modules/comment/comment.module	27 Jun 2009 10:13:28 -0000	1.729
+++ modules/comment/comment.module	30 Jun 2009 19:42:16 -0000
@@ -972,6 +972,9 @@
         '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.
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1075
diff -u -r1.1075 node.module
--- modules/node/node.module	27 Jun 2009 18:19:41 -0000	1.1075
+++ modules/node/node.module	30 Jun 2009 19:42:16 -0000
@@ -1003,6 +1003,10 @@
 
   // 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();
 }
 
 /**
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.716
diff -u -r1.716 system.module
--- modules/system/system.module	28 Jun 2009 12:52:57 -0000	1.716
+++ modules/system/system.module	30 Jun 2009 19:42:16 -0000
@@ -872,8 +872,32 @@
   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().
  */

