本文整理汇总了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);
}