當前位置: 首頁>>代碼示例>>PHP>>正文


PHP LBFactory::getMainLB方法代碼示例

本文整理匯總了PHP中LBFactory::getMainLB方法的典型用法代碼示例。如果您正苦於以下問題:PHP LBFactory::getMainLB方法的具體用法?PHP LBFactory::getMainLB怎麽用?PHP LBFactory::getMainLB使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在LBFactory的用法示例。


在下文中一共展示了LBFactory::getMainLB方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。

示例1: commitMasterChanges

 /**
  * Issue a commit on all masters who are currently in a transaction and have
  * made changes to the database. It also supports sometimes waiting for the
  * local wiki's replica DBs to catch up. See the documentation for
  * $wgJobSerialCommitThreshold for more.
  *
  * @param LBFactory $lbFactory
  * @param Job $job
  * @param string $fnameTrxOwner
  * @throws DBError
  */
 private function commitMasterChanges(LBFactory $lbFactory, Job $job, $fnameTrxOwner)
 {
     global $wgJobSerialCommitThreshold;
     $time = false;
     $lb = $lbFactory->getMainLB(wfWikiID());
     if ($wgJobSerialCommitThreshold !== false && $lb->getServerCount() > 1) {
         // Generally, there is one master connection to the local DB
         $dbwSerial = $lb->getAnyOpenConnection($lb->getWriterIndex());
         // We need natively blocking fast locks
         if ($dbwSerial && $dbwSerial->namedLocksEnqueue()) {
             $time = $dbwSerial->pendingWriteQueryDuration($dbwSerial::ESTIMATE_DB_APPLY);
             if ($time < $wgJobSerialCommitThreshold) {
                 $dbwSerial = false;
             }
         } else {
             $dbwSerial = false;
         }
     } else {
         // There are no replica DBs or writes are all to foreign DB (we don't handle that)
         $dbwSerial = false;
     }
     if (!$dbwSerial) {
         $lbFactory->commitMasterChanges($fnameTrxOwner);
         return;
     }
     $ms = intval(1000 * $time);
     $msg = $job->toString() . " COMMIT ENQUEUED [{$ms}ms of writes]";
     $this->logger->info($msg);
     $this->debugCallback($msg);
     // Wait for an exclusive lock to commit
     if (!$dbwSerial->lock('jobrunner-serial-commit', __METHOD__, 30)) {
         // This will trigger a rollback in the main loop
         throw new DBError($dbwSerial, "Timed out waiting on commit queue.");
     }
     $unlocker = new ScopedCallback(function () use($dbwSerial) {
         $dbwSerial->unlock('jobrunner-serial-commit', __METHOD__);
     });
     // Wait for the replica DBs to catch up
     $pos = $lb->getMasterPos();
     if ($pos) {
         $lb->waitForAll($pos);
     }
     // Actually commit the DB master changes
     $lbFactory->commitMasterChanges($fnameTrxOwner);
     ScopedCallback::consume($unlocker);
 }
開發者ID:paladox,項目名稱:mediawiki,代碼行數:57,代碼來源:JobRunner.php


注:本文中的LBFactory::getMainLB方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。