/** * Ends this task peacefully * @param string $mode Use 'fast' to always skip job running */ public function restInPeace($mode = 'fast') { $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); // Assure deferred updates are not in the main transaction $lbFactory->commitMasterChanges(__METHOD__); // Loosen DB query expectations since the HTTP client is unblocked $trxProfiler = Profiler::instance()->getTransactionProfiler(); $trxProfiler->resetExpectations(); $trxProfiler->setExpectations($this->config->get('TrxProfilerLimits')['PostSend'], __METHOD__); // Do any deferred jobs DeferredUpdates::doUpdates('enqueue'); DeferredUpdates::setImmediateMode(true); // Make sure any lazy jobs are pushed JobQueueGroup::pushLazyJobs(); // Now that everything specific to this request is done, // try to occasionally run jobs (if enabled) from the queues if ($mode === 'normal') { $this->triggerJobs(); } // Log profiling data, e.g. in the database or UDP wfLogProfilingData(); // Commit and close up! $lbFactory->commitMasterChanges(__METHOD__); $lbFactory->shutdown(LBFactory::SHUTDOWN_NO_CHRONPROT); wfDebug("Request ended normally\n"); }