Enable inserts to the new MCR db schema in single slot mode only.
TODO:
- RELEASE NOTES
Notes:
- When in MIGRATION_WRITE_NEW or greater, deleting and then
restoring a page will result in different data in the revision table.
For example, if you delete a page that has text_ids present in the
revision table and restore it, the text_ids will be blank after.
- When in MIGRATION_WRITE_BOTH or greater the archive table will
start to ar_content_model entries where previously it would have been
given NULL. This is due to the old content schema having NULL in the db
when the default content model is used, but the new schema will always
have a value, taken from the content_models table
Note: If259b1e1c49ce was squashed into this change.
Bug: T183488
Bug: T174024
Change-Id: Ic2221da30c8f6ac2ba42720fcd568f2d0ed70534
Call the RevisionInsertComplete from RevisionStore for now, so extensions
that still rely on this hook don't break when more code uses RevisionStore
instead of Revision.
This specifically avoid breaking EventBus and Translate when If610c68f491
is merged.
Change-Id: I3356c8250d7934e0089d4627fdebddf7983f194f
Find: /isset\(\s*([^()]+?)\s*\)\s*\?\s*\1\s*:\s*/
Replace with: '\1 ?? '
(Everywhere except includes/PHPVersionCheck.php)
(Then, manually fix some line length and indentation issues)
Then manually reviewed the replacements for cases where confusing
operator precedence would result in incorrect results
(fixing those in I478db046a1cc162c6767003ce45c9b56270f3372).
Change-Id: I33b421c8cb11cdd4ce896488c9ff5313f03a38cf
This introduces a convenience method for constructing a blob address
from a text ID. It's the inverse of SqlBlobStore::getTextIdFromAddress
Change-Id: I31b3ee5e40185c754fb2c119eb5edc50b903f5dc
This should have been done long ago. Now it is being done.
This also changes ar_text_id to NOT NULL, since it should never be null
anymore, and DEFAULT 0 in preparation for MCR stopping writing it.
Bug: T33223
Change-Id: I18f1c740b7537c7dc3cfeba9b241d0a9f31caa34
The field names used in SlotRecord got out of sync with the changes made
to the database schema. Nobody noticed, because these fields are not yet
written to or read from the database.
This change also rewrites SlotRecordTest and adds several sanity checks
to SlotRecord, in preparation of the introduction of slot_origin.
Change-Id: Ifdf040174705bf88104b8c922c9d6d1120d48f3a
RevisionStore::newFromNullRevision() carefully reads the latest revision
from the master, but then forgets to instruct emulateMainSlot_1_29() to
do the same, so the lookup query for rev_text_id in the text table is
done against a replica.
This is not usually a problem for null revisions, but it is a problem
when editing a page and then immediately moving it: this causes a null
revision to be created based on a freshly created revision, which
doesn't yet exist on the replica.
Bug: T184670
Change-Id: Ied4db5ee770716ff3edb918d2be722934c79d0c7
Storing the user name or IP in every row in large tables like revision
and logging takes up space and makes operations on these tables slower.
This patch begins the process of moving those into one "actor" table
which other tables can reference with a single integer field.
A subsequent patch will remove the old columns.
Bug: T167246
Depends-On: I9293fd6e0f958d87e52965de925046f1bb8f8a50
Change-Id: I8d825eb02c69cc66d90bd41325133fd3f99f0226
This reduces the odds of having files without corresponding
wiki pages, given that the later is done in a deferred update.
Also made some documentation cleanups.
Bug: T187942
Change-Id: Iff516669f535713d37e0011e2d7ed285c667f1c5
It was thought that an 'ar:' schema for SqlBlobStore addresses would be
needed to support archive rows from before MediaWiki 1.5 that still
stored the text in ar_text and ar_flags instead of using the text table
and ar_text_id. But this schema was never actually implemented.
Now I5608c6b6 has migrated that content to the text table and
ar_text_id, and I18f1c740b will remove the database fields entirely. So
there's no reason to ever implement this schema.
Change-Id: Ic449478c244bb13a8c5139e20488e876c0a793bb
wfDebugBacktrace doesn't work very will with logstash.
The whole message ends up being too long and the log ends
up in the 'jsonTruncated' channel.
Instead use wfBacktrace which will be smaller as it just gives
us a string.
Change-Id: I5309ac2ad4592fb6dbb1474526d382893fb7e6c1
This allows CommentStore to be added to MediaWikiServices
without the need of an aditional Factory.
This change includes a compatability layer to allow the behaviour
from 1.30 to continue to be used while deprecated.
CommentStore::newKey has been deprecated.
Keys are now passed into the public methods of CommentStore
where needed.
The following CommentStore methods have had their signatures changed
to introduced a $key parameter, but when used in conjunction with
CommentStore::newKey behaviour will remain unchanged:
* CommentStore::getFields
* CommentStore::getJoin
* CommentStore::getComment
* CommentStore::getCommentLegacy
* CommentStore::insert
* CommentStore::insertWithTemplate
Change-Id: I3abb62a5cfb0dcd456da9f4eb35583476ae41cfb
This seems to have broken stuff, see failing tests on:
https://gerrit.wikimedia.org/r/#/c/406302/
Could not insert main page: RevisionStore for cannot
be used with a DB connection for jenkins_u0_mw
This reverts commit d2a4d614fc.
Bug: T186017
Change-Id: Ic3de8e856d7d6b224b02816f2c5a1aa0648cd184
There have been many issues with RevisionStore and titles due
to code paths that already know the title for a Revision not
passing the title into Revision in various ways or not passing
in the correct queryFlags.
The getTitle method now has a further fallback using Title::newFromID
and Title::GAID_FOR_UPDATE if not already attempted.
Bug: T183548
Bug: T183716
Bug: T183717
Bug: T183550
Bug: T183505
Bug: T184559
Bug: T184595
Change-Id: I6cf13e6baba354b08533a6151bbbc88a317be9d6
This includes tests that were previously created in:
I6dcfc0497bfce6605fa5517c9f91faf7131f4334
Bug: T184749
Change-Id: Ieb02ac593fc6b42af1692d03d9d578a76417eb54
For backwards-copatibility, we need to be able to construct a Revision
object even for bad page IDs.
Bug: T184689
Change-Id: I18c823d7b72504447982364d581b34e98924b67f
This was passing $queryFlags directly into Title::newFromID which
expects different flags.
Instead we now set Title::GAID_FOR_UPDATE if $queryFlags will end up
hitting the master.
Change-Id: I9c6e275c22fe74a98e79c54049afa4915a7f565d
This is a partial revert of a revert that reverted a fix believed to
have had its underlying issue fixed in:
https://gerrit.wikimedia.org/r/#/c/400577/
The compat layer (Revision), now passes a Title object into the
RevisionStore, and this title is used to construct the Record and
also any new Revision objects.
Bug: T184559
Bug: T183548
Change-Id: Id073265c173f60aa8c456550fdb4bb5196013be8
This reverts commit a760526bb4.
This is a PARTIAL revert and the changes to the follwing methods remain:
- Revision::newFromArchiveRow
This is no longer needed as the underlying issue has been fixed
in commit 4de36baa63
I15e4663902e2cbfe15b0da2e46449330e313bd0d
Change-Id: I3e0ae29e62d59bcb4be871ef5b389a673ce8f103
This reverts commit 7bfb4f1951.
and 56b7ba03a2
This is no longer needed as the underlying issue has been fixed
in commit 4de36baa63
I15e4663902e2cbfe15b0da2e46449330e313bd0d
Bug: T183505
Change-Id: I194a558625d15fd4f7929e363557847f8bebde4f
When the title is already known use it.
This is similar to the issue fixed in
I714ee391caac9bc56ce4c037967e424b44d9c2fe.
As of this patch all methods within RevisionStore
that call getTitle internally also have an option
to pass in an already known Title object.
Bug: T183548
Change-Id: Ieabca1cf157fb667c75fc907b9da2917f71c61b3