Commit graph

6 commits

Author SHA1 Message Date
jenkins-bot
24b1aaeb98 Merge "RefreshSecondaryDataUpdate: Commit before running sub-updates" 2020-04-11 09:47:31 +00:00
DannyS712
318e20df37 Replace uses and hard deprecate LinksUpdate revision methods
Also removes all uses of Revision from RefreshSecondaryDataUpdate

Bug: T249397
Change-Id: Ic110a66f79db8c5834847b664f3a8449eceb9d83
2020-04-09 22:03:24 +00:00
Brad Jorsch
b8858d6d5b RefreshSecondaryDataUpdate: Commit before running sub-updates
The call to `$this->updater->getSecondaryDataUpdates()` probably started
an implicit transaction, and a sub-update may have tried to register a
callback to watch for a rollback which would make that implicit
transaction non-empty.

Bug: T248003
Change-Id: Ib9db8ec9c43c8b2871f283733ed6a05d2dec6dd1
2020-04-09 11:17:00 -04:00
Aaron Schulz
1f4efc6c34 Add RefreshSecondaryDataUpdate and use it in DerivedPageDataUpdater
This class implements EnqueueableDataUpdate and can be pushed as a
job if it fails to run via DeferredUpdates.

Unlike a1f7fd3ada, make RefreshSecondaryDataUpdate skip failing
updates in doUpdate(). Instead of throwing the first exception from
any update, log any exceptions that occur and try all the other
updates. The first error will be re-thrown afterwards.

Also, make sure that each DataUpdate still has outer transaction
scope. This property is documented at mediawiki.org and should not
be changed.

Add integration tests for RefreshSecondaryDataUpdateTest.

Bug: T218456
Bug: T206283
Change-Id: I7c6554a4d4cd76dfe7cd2967afe30b3aa1069fcb
2020-03-11 00:42:48 -07:00
Timo Tijhof
6b7ddf9c9b Revert "Split out new RefreshSecondaryDataUpdate class"
This reverts commits a1f7fd3ada, 0ef02cd018.

Bug: T218456
Change-Id: I9bbea3d13460ed44755d77fc61ff23fb906cf71e
2019-03-19 14:51:27 +00:00
Aaron Schulz
a1f7fd3ada Split out new RefreshSecondaryDataUpdate class
Make DerivedPageDataUpdater bundle all the related DataUpdate tasks
on page change with a RefreshSecondaryDataUpdate wrapper. If one of
the DataUpdate tasks fails, then the entire bundle of updates can be
re-run in the form of enqueueing a RefreshLinksJob instance (these
jobs are idempotent). If several of the bundled tasks fail, it is easy
for DeferredUpdates to know that only one RefreshLinksJob should be
enqueued.

The goal is to make DataUpdate tasks more reliable and resilient.
Most of these deferred update failures are due to ephemeral problems
like lock contention. Since the job queue is already able to reliably
store and retry jobs, and the time that a regular web request can spend
in post-send is more limited, it makes the most sense to just enqueue
tasks as jobs if they fail post-send.

Make LinkUpdate no longer defined as enqueueable as RefreshLinksJob
since they are not very congruent (LinksUpdate only does some of the
work that RefreshLinksJob does). Only the wrapper, with the bundle of
DataUpdate instances, is congruent to RefreshLinksJob.

This change does not itself implement the enqueue-on-failure logic
in DeferredUpdates, but is merely a prerequisite.

Bug: T206288
Change-Id: I191103c1aeff4c9fedbf524ee387dad9bdf5fab8
2019-03-15 17:14:50 +00:00