/**
  * Get the 'blobs' table name for this database
  *
  * @param IDatabase $db
  * @return string Table name ('blobs' by default)
  */
 function getTable($db)
 {
     $table = $db->getLBInfo('blobs table');
     if (is_null($table)) {
         $table = 'blobs';
     }
     return $table;
 }
Example #2
0
 /**
  * Wait for a slave DB to reach a specified master position
  *
  * This will connect to the master to get an accurate position if $pos is not given
  *
  * @param IDatabase $conn Slave DB
  * @param DBMasterPos|bool $pos Master position; default: current position
  * @param integer $timeout Timeout in seconds
  * @return bool Success
  * @since 1.27
  */
 public function safeWaitForMasterPos(IDatabase $conn, $pos = false, $timeout = 10)
 {
     if ($this->getServerCount() == 1 || !$conn->getLBInfo('slave')) {
         return true;
         // server is not a slave DB
     }
     $pos = $pos ?: $this->getConnection(DB_MASTER)->getMasterPos();
     if (!$pos) {
         return false;
         // something is misconfigured
     }
     $result = $conn->masterPosWait($pos, $timeout);
     if ($result == -1 || is_null($result)) {
         $msg = __METHOD__ . ": Timed out waiting on {$conn->getServer()} pos {$pos}";
         wfDebugLog('replication', "{$msg}\n");
         wfDebugLog('DBPerformance', "{$msg}:\n" . wfBacktrace(true));
         $ok = false;
     } else {
         wfDebugLog('replication', __METHOD__ . ": Done\n");
         $ok = true;
     }
     return $ok;
 }
Example #3
0
 public function safeWaitForMasterPos(IDatabase $conn, $pos = false, $timeout = 10)
 {
     if ($this->getServerCount() <= 1 || !$conn->getLBInfo('replica')) {
         return true;
         // server is not a replica DB
     }
     if (!$pos) {
         // Get the current master position, opening a connection if needed
         $masterConn = $this->getAnyOpenConnection($this->getWriterIndex());
         if ($masterConn) {
             $pos = $masterConn->getMasterPos();
         } else {
             $masterConn = $this->openConnection($this->getWriterIndex(), self::DOMAIN_ANY);
             $pos = $masterConn->getMasterPos();
             $this->closeConnection($masterConn);
         }
     }
     if ($pos instanceof DBMasterPos) {
         $result = $conn->masterPosWait($pos, $timeout);
         if ($result == -1 || is_null($result)) {
             $msg = __METHOD__ . ": Timed out waiting on {$conn->getServer()} pos {$pos}";
             $this->replLogger->warning("{$msg}");
             $ok = false;
         } else {
             $this->replLogger->info(__METHOD__ . ": Done");
             $ok = true;
         }
     } else {
         $ok = false;
         // something is misconfigured
         $this->replLogger->error("Could not get master pos for {$conn->getServer()}.");
     }
     return $ok;
 }