本文整理汇总了PHP中LBFactory::commitMasterChanges方法的典型用法代码示例。如果您正苦于以下问题:PHP LBFactory::commitMasterChanges方法的具体用法?PHP LBFactory::commitMasterChanges怎么用?PHP LBFactory::commitMasterChanges使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LBFactory
的用法示例。
在下文中一共展示了LBFactory::commitMasterChanges方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: runUpdate
/**
* @param DeferrableUpdate $update
* @param LBFactory $lbFactory
* @param integer $stage
* @return ErrorPageError|null
*/
private static function runUpdate(DeferrableUpdate $update, LBFactory $lbFactory, $stage)
{
$guiError = null;
try {
$fnameTrxOwner = get_class($update) . '::doUpdate';
$lbFactory->beginMasterChanges($fnameTrxOwner);
$update->doUpdate();
$lbFactory->commitMasterChanges($fnameTrxOwner);
} catch (Exception $e) {
// Reporting GUI exceptions does not work post-send
if ($e instanceof ErrorPageError && $stage === self::PRESEND) {
$guiError = $e;
}
MWExceptionHandler::rollbackMasterChangesAndLog($e);
}
return $guiError;
}
示例2: 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);
}