MediaWiki
1.32.5
|
Class for managing the deferred updates. More...
Static Public Member Functions | |
static | addCallableUpdate ( $callable, $stage=self::POSTSEND, $dbw=null) |
Add a callable update. More... | |
static | addUpdate (DeferrableUpdate $update, $stage=self::POSTSEND) |
Add an update to the deferred list to be run later by execute() More... | |
static | clearPendingUpdates () |
Clear all pending updates without performing them. More... | |
static | doUpdates ( $mode='run', $stage=self::ALL) |
Do any deferred updates and clear the list. More... | |
static | getPendingUpdates ( $stage=self::ALL) |
static | pendingUpdatesCount () |
static | tryOpportunisticExecute ( $mode='run') |
Run all deferred updates immediately if there are no DB writes active. More... | |
Public Attributes | |
const | ALL = 0 |
const | BIG_QUEUE_SIZE = 100 |
const | POSTSEND = 2 |
const | PRESEND = 1 |
Static Protected Member Functions | |
static | execute (array &$queue, $mode, $stage) |
Immediately run/queue a list of updates. More... | |
Static Private Member Functions | |
static | areDatabaseTransactionsActive () |
static | enqueueUpdates (array $updates) |
Enqueue a job for each EnqueueableDataUpdate item and return the other items. More... | |
static | push (array &$queue, DeferrableUpdate $update) |
static | runUpdate (DeferrableUpdate $update, LBFactory $lbFactory, $mode, $stage) |
Static Private Attributes | |
static array null | $executeContext |
Information about the current execute() call or null if not running. More... | |
static DeferrableUpdate[] | $postSendUpdates = [] |
Updates to be deferred until after request end. More... | |
static DeferrableUpdate[] | $preSendUpdates = [] |
Updates to be deferred until before request end. More... | |
Class for managing the deferred updates.
In web request mode, deferred updates can be run at the end of the request, either before or after the HTTP response has been sent. In either case, they run after the DB commit step. If an update runs after the response is sent, it will not block clients. If sent before, it will run synchronously. These two modes are defined via PRESEND and POSTSEND constants, the latter being the default for addUpdate() and addCallableUpdate().
Updates that work through this system will be more likely to complete by the time the client makes their next request after this one than with the JobQueue system.
In CLI mode, deferred updates will run:
When updates are deferred, they go into one two FIFO "top-queues" (one for pre-send and one for post-send). Updates enqueued during doUpdate() of a "top" update go into the "sub-queue" for that update. After that method finishes, the sub-queue is run until drained. This continues for each top-queue job until the entire top queue is drained. This happens for the pre-send top-queue, and later on, the post-send top-queue, in execute().
Definition at line 56 of file DeferredUpdates.php.
|
static |
Add a callable update.
In a lot of cases, we just need a callback/closure, defining a new DeferrableUpdate object is not necessary
callable | $callable | |
int | $stage | DeferredUpdates constant (PRESEND or POSTSEND) (since 1.27) |
IDatabase | IDatabase[] | null | $dbw | Abort if this DB is rolled back optional |
Definition at line 118 of file DeferredUpdates.php.
References addUpdate(), and wfGetCaller().
Referenced by MediaWiki\Auth\AuthManager\autoCreateUser(), MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider\beginPrimaryAuthentication(), SpecialEditWatchlist\cleanupWatchlist(), User\clearNotification(), FileBackendMultiWrite\doDirectoryOp(), SpamBlacklist\doLogging(), FileBackendMultiWrite\doOperationsInternal(), FileBackendMultiWrite\doQuickOperationsInternal(), LinksDeletionUpdate\doUpdate(), SiteStatsUpdate\doUpdate(), WikiPage\doViewUpdates(), EditPage\edit(), MovePageForm\execute(), MediaWiki\Logger\Monolog\BufferHandler\handle(), Category\initialize(), WikiPage\insertRedirect(), LocalFile\maybeUpgradeRow(), RecentChange\notifyEdit(), RecentChange\notifyNew(), WikiPage\onArticleEdit(), ManualLogEntry\publish(), WikiPage\purgeInterwikiCheckKey(), MediaWiki\Session\SessionBackend\save(), SpecialSearch\saveNamespaces(), MediaWiki\Storage\PageUpdater\saveRevision(), Pingback\schedulePingback(), RevDelList\setVisibility(), DeferredUpdatesTest\testAddCallableUpdate(), DeferredUpdatesTest\testDoUpdatesCLI(), DeferredUpdatesTest\testDoUpdatesWeb(), MediaWikiTest\testPostSendJobDoesNotSetCookie(), DeferredUpdatesTest\testPresendAddOnPostsendRun(), CdnCacheUpdateTest\testPurgeMergeWeb(), DeferredUpdatesTest\testRunUpdateTransactionScope(), DeferredUpdatesTest\testTryOpportunisticExecute(), WikiPage\updateCategoryCounts(), WatchedItemStore\updateNotificationTimestamp(), and EditPage\updateWatchlist().
|
static |
Add an update to the deferred list to be run later by execute()
In CLI mode, callback magic will also be used to run updates when safe
DeferrableUpdate | $update | Some object that implements doUpdate() |
int | $stage | DeferredUpdates constant (PRESEND or POSTSEND) (since 1.27) |
Definition at line 79 of file DeferredUpdates.php.
References $wgCommandLineMode, push(), and tryOpportunisticExecute().
Referenced by addCallableUpdate(), MediaWiki\Auth\AuthManager\autoCreateUser(), MediaWiki\Auth\AuthManager\continueAccountCreation(), LocalFile\delete(), LocalFile\deleteOld(), MediaWiki\Storage\PageUpdater\doCreate(), WikiPage\doDeleteUpdates(), MediaWiki\Storage\PageUpdater\doModify(), RevDelFileList\doPostCommitUpdates(), WikiFilePage\doPurge(), WikiPage\doPurge(), MediaWiki\Storage\DerivedPageDataUpdater\doSecondaryDataUpdates(), LinksUpdate\doUpdate(), MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), SpecialRunJobs\execute(), ChangesListSpecialPage\execute(), LocalFileRestoreBatch\execute(), WikiImporter\finishImportPage(), Title\invalidateCache(), PurgeJobUtils\invalidatePages(), LinksUpdate\invalidateProperties(), JobQueueGroup\lazyPush(), NamespaceDupes\mergePage(), MovePage\move(), LocalFile\move(), WikiPage\onArticleCreate(), WikiPage\onArticleDelete(), WikiPage\onArticleEdit(), LocalFile\purgeCache(), File\purgeEverything(), Block\purgeExpired(), Title\purgeExpiredRestrictions(), LocalFile\purgeOldThumbnails(), Title\purgeSquid(), LocalFile\purgeThumbnails(), LocalFile\recordUpload2(), MessageCache\replace(), DeferredUpdatesTest\testAddAndRun(), DeferredUpdatesTest\testAddMergeable(), DeferredUpdatesTest\testGetPendingUpdates(), CdnCacheUpdateTest\testPurgeMergeWeb(), DeferredUpdatesTest\testRunOuterScopeUpdate(), Title\touchLinks(), and PageArchive\undeleteRevisions().
|
staticprivate |
Definition at line 380 of file DeferredUpdates.php.
References Wikimedia\Rdbms\IDatabase\explicitTrxActive(), Wikimedia\Rdbms\LoadBalancer\forEachOpenMasterConnection(), use, and Wikimedia\Rdbms\IDatabase\writesOrCallbacksPending().
|
static |
Clear all pending updates without performing them.
Generally, you don't want or need to call this. Unit tests need it though.
Definition at line 372 of file DeferredUpdates.php.
Referenced by MediaWikiTestCase\resetNonServiceCaches(), UploadFromUrlTestSuite\setUp(), DeferredUpdatesTest\testGetPendingUpdates(), and CdnCacheUpdateTest\testPurgeMergeWeb().
|
static |
Do any deferred updates and clear the list.
string | $mode | Use "enqueue" to use the job queue when possible [Default: "run"] |
int | $stage | DeferredUpdates constant (PRESEND, POSTSEND, or ALL) (since 1.27) |
Definition at line 130 of file DeferredUpdates.php.
References ALL, and execute().
Referenced by JobRunner\executeJob(), RefreshLinks\fixLinksFromArticle(), NamespaceDupes\mergePage(), MediaWiki\preOutputCommit(), MediaWiki\restInPeace(), DeferredUpdatesTest\testAddAndRun(), DeferredUpdatesTest\testAddCallableUpdate(), FileBackendTest\testAsyncWrites(), SiteStatsUpdateTest\testDoUpdate(), DeferredUpdatesTest\testDoUpdatesCLI(), DeferredUpdatesTest\testDoUpdatesWeb(), ResourceLoaderTest\testMeasureResponseTime(), DeferredUpdatesTest\testPresendAddOnPostsendRun(), CdnCacheUpdateTest\testPurgeMergeWeb(), BagOStuffTest\testReportDupes(), DeferredUpdatesTest\testRunOuterScopeUpdate(), DeferredUpdatesTest\testRunUpdateTransactionScope(), and tryOpportunisticExecute().
|
staticprivate |
Enqueue a job for each EnqueueableDataUpdate item and return the other items.
DeferrableUpdate[] | $updates | A list of deferred update instances |
Definition at line 329 of file DeferredUpdates.php.
References as, and JobQueueGroup\singleton().
Referenced by tryOpportunisticExecute().
|
staticprotected |
Immediately run/queue a list of updates.
DeferrableUpdate[] | &$queue | List of DeferrableUpdate objects |
string | $mode | Use "enqueue" to use the job queue when possible |
int | $stage | Class constant (PRESEND, POSTSEND) (since 1.28) |
ErrorPageError | Happens on top-level calls |
Exception | Happens on second-level calls |
Definition at line 177 of file DeferredUpdates.php.
References $name, $queue, $services, as, RequestContext\getMain(), key, and runUpdate().
Referenced by doUpdates().
|
static |
int | $stage | DeferredUpdates constant (PRESEND, POSTSEND, or ALL) |
Definition at line 357 of file DeferredUpdates.php.
Referenced by DeferredUpdatesTest\testGetPendingUpdates().
|
static |
Definition at line 348 of file DeferredUpdates.php.
References captcha-old\count.
Referenced by EditPageTest\testCreatePageTrx(), SiteStatsUpdateTest\testDoUpdate(), DeferredUpdatesTest\testDoUpdatesWeb(), CdnCacheUpdateTest\testPurgeMergeWeb(), MessageCacheTest\testReplaceCache(), MessageCacheTest\testReplaceMsg(), and tryOpportunisticExecute().
|
staticprivate |
DeferrableUpdate[] | $queue | |
DeferrableUpdate | $update |
Definition at line 149 of file DeferredUpdates.php.
References $queue.
Referenced by addUpdate().
|
staticprivate |
DeferrableUpdate | $update | |
LBFactory | $lbFactory | |
string | $mode | |
int | $stage |
Definition at line 255 of file DeferredUpdates.php.
References $e, Wikimedia\Rdbms\LBFactory\beginMasterChanges(), Wikimedia\Rdbms\LBFactory\commitMasterChanges(), DeferrableUpdate\doUpdate(), MWExceptionHandler\rollbackMasterChangesAndLog(), and JobQueueGroup\singleton().
Referenced by execute().
|
static |
Run all deferred updates immediately if there are no DB writes active.
If there are many deferred updates pending, $mode is 'run', and there are still busy LBFactory database handles, then any EnqueueableDataUpdate tasks might be enqueued as jobs to be executed later.
string | $mode | Use "enqueue" to use the job queue when possible |
Definition at line 301 of file DeferredUpdates.php.
References doUpdates(), enqueueUpdates(), and pendingUpdatesCount().
Referenced by addUpdate(), Maintenance\setLBFactoryTriggers(), and DeferredUpdatesTest\testTryOpportunisticExecute().
|
staticprivate |
Information about the current execute() call or null if not running.
Definition at line 69 of file DeferredUpdates.php.
|
staticprivate |
Updates to be deferred until after request end.
Definition at line 60 of file DeferredUpdates.php.
|
staticprivate |
Updates to be deferred until before request end.
Definition at line 58 of file DeferredUpdates.php.
const DeferredUpdates::ALL = 0 |
Definition at line 62 of file DeferredUpdates.php.
Referenced by doUpdates(), and DeferredUpdatesTest\testGetPendingUpdates().
const DeferredUpdates::BIG_QUEUE_SIZE = 100 |
Definition at line 66 of file DeferredUpdates.php.
const DeferredUpdates::POSTSEND = 2 |
Definition at line 64 of file DeferredUpdates.php.
Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doSecondaryDataUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), SpecialRunJobs\execute(), RefreshLinks\fixLinksFromArticle(), WikiPage\insertRedirect(), RecentChange\notifyEdit(), RecentChange\notifyNew(), ManualLogEntry\publish(), DeferredUpdatesTest\testDoUpdatesWeb(), DeferredUpdatesTest\testGetPendingUpdates(), DeferredUpdatesTest\testPresendAddOnPostsendRun(), and WatchedItemStore\updateNotificationTimestamp().
const DeferredUpdates::PRESEND = 1 |
Definition at line 63 of file DeferredUpdates.php.
Referenced by LocalFile\delete(), LocalFile\deleteOld(), MediaWiki\Storage\PageUpdater\doCreate(), MediaWiki\Storage\PageUpdater\doModify(), RevDelFileList\doPostCommitUpdates(), WikiPage\doPurge(), MediaWiki\Storage\DerivedPageDataUpdater\doSecondaryDataUpdates(), WikiPage\doViewUpdates(), ApiPurge\execute(), Title\invalidateCache(), LocalFile\move(), MediaWiki\preOutputCommit(), LocalFile\purgeCache(), LocalFile\purgeOldThumbnails(), Title\purgeSquid(), LocalFile\purgeThumbnails(), LocalFile\recordUpload2(), MessageCache\replace(), RevDelList\setVisibility(), DeferredUpdatesTest\testDoUpdatesWeb(), DeferredUpdatesTest\testGetPendingUpdates(), DeferredUpdatesTest\testPresendAddOnPostsendRun(), and CdnCacheUpdateTest\testPurgeMergeWeb().