re r66702 Use wfMsgForContent instead of wfMsg
[lhc/web/wiklou.git] / includes / ExternalStoreDB.php
index fb3853a..769c64d 100644 (file)
@@ -26,25 +26,52 @@ $wgExternalBlobCache = array();
  */
 class ExternalStoreDB {
 
-       /** @todo Document.*/
+       function __construct( $params = array() ) {
+               $this->mParams = $params;
+       }
+
+       /**
+        * Get a LoadBalancer for the specified cluster
+        *
+        * @param $cluster String: cluster name
+        * @return LoadBalancer object
+        */
        function &getLoadBalancer( $cluster ) {
-               return wfGetLBFactory()->getExternalLB( $cluster );
+               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+               
+               return wfGetLBFactory()->getExternalLB( $cluster, $wiki );
        }
 
-       /** @todo Document.*/
+       /**
+        * Get a slave database connection for the specified cluster
+        *
+        * @param $cluster String: cluster name
+        * @return DatabaseBase object
+        */
        function &getSlave( $cluster ) {
+               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
                $lb =& $this->getLoadBalancer( $cluster );
-               // Make only two connection attempts, since we still have the master to try
-               return $lb->getConnection( DB_SLAVE, array(), false, 2 );
+               return $lb->getConnection( DB_SLAVE, array(), $wiki );
        }
 
-       /** @todo Document.*/
-       function &getMaster( $cluster, $retry = true ) {
+       /**
+        * Get a master database connection for the specified cluster
+        *
+        * @param $cluster String: cluster name
+        * @return DatabaseBase object
+        */
+       function &getMaster( $cluster ) {
+               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
                $lb =& $this->getLoadBalancer( $cluster );
-               return $lb->getConnection( DB_MASTER, array(), false, false, LoadBalancer::GRACEFUL );
+               return $lb->getConnection( DB_MASTER, array(), $wiki );
        }
 
-       /** @todo Document.*/
+       /**
+        * Get the 'blobs' table name for this database
+        *
+        * @param $db DatabaseBase
+        * @return String: table name ('blobs' by default)
+        */
        function getTable( &$db ) {
                $table = $db->getLBInfo( 'blobs table' );
                if ( is_null( $table ) ) {
@@ -55,7 +82,7 @@ class ExternalStoreDB {
 
        /**
         * Fetch data from given URL
-        * @param string $url An url of the form DB://cluster/id or DB://cluster/id/itemid for concatened storage.
+        * @param $url String: an url of the form DB://cluster/id or DB://cluster/id/itemid for concatened storage.
         */
        function fetchFromURL( $url ) {
                $path = explode( '/', $url );
@@ -120,20 +147,20 @@ class ExternalStoreDB {
         *
         * @param $cluster String: the cluster name
         * @param $data String: the data item
-        * @param $retry bool: allows an extra DB connection retry after 1 second
         * @return string URL
         */
-       function store( $cluster, $data, $retry = true ) {
-               if( !$dbw = $this->getMaster( $cluster, $retry ) ) {
-                       return false; // failed, maybe another cluster is up...
-               }
+       function store( $cluster, $data ) {
+               $dbw = $this->getMaster( $cluster );
                $id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
                $dbw->insert( $this->getTable( $dbw ), 
                        array( 'blob_id' => $id, 'blob_text' => $data ), 
                        __METHOD__ );
                $id = $dbw->insertId();
+               if ( !$id ) {
+                       throw new MWException( __METHOD__.': no insert ID' );
+               }
                if ( $dbw->getFlag( DBO_TRX ) ) {
-                       $dbw->immediateCommit();
+                       $dbw->commit();
                }
                return "DB://$cluster/$id";
        }