Matthias Mullie has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/58908


Change subject: Add docs to ChronologyProtector
......................................................................

Add docs to ChronologyProtector

Change-Id: I427ccf9b6144a53b1a8f90f220c39d5dc6196f58
---
M includes/db/ChronologyProtector.php
1 file changed, 29 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/08/58908/1

diff --git a/includes/db/ChronologyProtector.php 
b/includes/db/ChronologyProtector.php
index 447b238..f7afadc 100644
--- a/includes/db/ChronologyProtector.php
+++ b/includes/db/ChronologyProtector.php
@@ -24,32 +24,45 @@
 /**
  * Class for ensuring a consistent ordering of events as seen by the user, 
despite replication.
  * Kind of like Hawking's [[Chronology Protection Agency]].
+ *
+ * When closing a connection, the position will be saved in session. Upon 
opening a follow-up
+ * connection, that/those position(s) will be read from session and we'll wait 
for the connection
+ * to catch up to that/those position(s), to ensure no data is read that lags 
behind their
+ * previous state.
  */
 class ChronologyProtector {
-       var $startupPos;
-       var $shutdownPos = array();
+       /**
+        * Arrays of connection positions loaded from session (startup) and 
positions to
+        * be saved to session (shutdown)
+        *
+        * @var array
+        */
+       protected $startupPositions = array(), $shutdownPositions = array();
 
        /**
         * Initialise a LoadBalancer to give it appropriate chronology 
protection.
         *
         * @param $lb LoadBalancer
         */
-       function initLB( $lb ) {
-               if ( $this->startupPos === null ) {
+       public function initLB( $lb ) {
+               // Load previously saved LB positions from session
+               if ( $this->startupPositions === null ) {
                        if ( !empty( $_SESSION[__CLASS__] ) ) {
-                               $this->startupPos = $_SESSION[__CLASS__];
+                               $this->startupPositions = $_SESSION[__CLASS__];
                        }
                }
-               if ( !$this->startupPos ) {
+               if ( !$this->startupPositions ) {
                        return;
                }
                $masterName = $lb->getServerName( 0 );
 
-               if ( $lb->getServerCount() > 1 && !empty( 
$this->startupPos[$masterName] ) ) {
+               if ( $lb->getServerCount() > 1 && !empty( 
$this->startupPositions[$masterName] ) ) {
                        $info = $lb->parentInfo();
-                       $pos = $this->startupPos[$masterName];
+                       $pos = $this->startupPositions[$masterName];
                        wfDebug( __METHOD__ . ": LB " . $info['id'] . " waiting 
for master pos $pos\n" );
-                       $lb->waitFor( $this->startupPos[$masterName] );
+
+                       // Wait for previously saved position
+                       $lb->waitFor( $this->startupPositions[$masterName] );
                }
        }
 
@@ -59,13 +72,13 @@
         *
         * @param $lb LoadBalancer
         */
-       function shutdownLB( $lb ) {
+       public function shutdownLB( $lb ) {
                // Don't start a session, don't bother with non-replicated 
setups
                if ( strval( session_id() ) == '' || $lb->getServerCount() <= 1 
) {
                        return;
                }
                $masterName = $lb->getServerName( 0 );
-               if ( isset( $this->shutdownPos[$masterName] ) ) {
+               if ( isset( $this->shutdownPositions[$masterName] ) ) {
                        // Already done
                        return;
                }
@@ -78,18 +91,18 @@
                }
                $pos = $db->getMasterPos();
                wfDebug( __METHOD__ . ": LB {$info['id']} has master pos 
$pos\n" );
-               $this->shutdownPos[$masterName] = $pos;
+               $this->shutdownPositions[$masterName] = $pos;
        }
 
        /**
         * Notify the ChronologyProtector that the LBFactory is done calling 
shutdownLB() for now.
         * May commit chronology data to persistent storage.
         */
-       function shutdown() {
-               if ( session_id() != '' && count( $this->shutdownPos ) ) {
+       public function shutdown() {
+               if ( session_id() != '' && count( $this->shutdownPositions ) ) {
                        wfDebug( __METHOD__ . ": saving master pos for " .
-                               count( $this->shutdownPos ) . " master(s)\n" );
-                       $_SESSION[__CLASS__] = $this->shutdownPos;
+                               count( $this->shutdownPositions ) . " 
master(s)\n" );
+                       $_SESSION[__CLASS__] = $this->shutdownPositions;
                }
        }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/58908
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I427ccf9b6144a53b1a8f90f220c39d5dc6196f58
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Matthias Mullie <mmul...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to