Commit graph

30 commits

Author SHA1 Message Date
Tim Starling
ca71e69fc6 Try not to discard Excimer timeout exceptions
Don't catch and discard exceptions from the RequestTimeout library,
except when the exception is properly handled and the code seems to be
trying to wrap things up.

In most cases the exception is rethrown. Ideally it should instead be
done by narrowing the catch, and this was feasible in a few cases. But
sometimes the exception being caught is an instance of the base class
(notably DateTime::__construct()). Often Exception is the root of the
hierarchy of exceptions being thrown and so is the obvious catch-all.

Notes on specific callers:

* In the case of ResourceLoader::respond(), exceptions were caught for API
  correctness, but processing continued. I added an outer try block for
  timeout handling so that termination would be more prompt.
* In LCStoreCDB the Exception being caught was Cdb\Exception not
  \Exception. I added an alias to avoid confusion.
* In ImageGallery I added a special exception class.
* In Message::__toString() the rationale for catching disappears
  in PHP 7.4.0+, so I added a PHP version check.
* In PoolCounterRedis, let the shutdown function do its thing, but
  rethrow the exception for logging.

Change-Id: I4c3770b9efc76a1ce42ed9f59329c36de04d657c
2022-02-02 16:27:44 +11:00
Umherirrender
4d42b5e86e docs: Change wording master to primary in comments and log text
Bug: T254646
Change-Id: I5379dc79be60c99f0a30f74e5d624f81fe6f921b
2021-09-01 23:04:40 +02:00
TChin
077b9af960 Replace Assert::parameterType with typehints
Bug: T287530
Change-Id: I6060e194339614b53e3a9c036ff3a3ac2e68f8df
2021-08-03 10:03:48 -04:00
James D. Forrester
719cf161f2 More master -> primary documentation and internal var renaming
Bug: T254646
Change-Id: I63cc8895033714bdfbf09aee933a8f0a43b387f3
2021-07-15 11:20:20 +01:00
James D. Forrester
f2f9345e39 Replace uses of DB_MASTER with DB_PRIMARY in documentation and local variables
This is just a start.

Bug: T254646
Change-Id: I9213aad4660e27afe7ff9e5d2e730cbf03911068
2021-05-14 12:40:34 -07:00
Thiemo Kreuz
6805f39a30 Remove unused default values from class properties
In all these cases the property is unconditionally set in
the constructor. The extra initialisation is effectively
dead code and an extra source of errors and confusion.

Change-Id: Icae13390d5ca5c14e2754f3be4eb956dd7f54ac4
2021-05-12 13:44:28 +02:00
James D. Forrester
df5eb22f83 Replace uses of DB_MASTER with DB_PRIMARY
Just an auto-replace from codesniffer for now.

Change-Id: I5240dc9ac5929d291b0ef1c743ea2bfd3f428266
2021-04-29 09:24:31 -07:00
DannyS712
360b12790a Fix a typo: tabel -> table
Bug: T201491
Change-Id: I830619b99ed85c3a9e30e80f19f80b1feed01f73
2020-08-07 21:47:44 +00:00
Umherirrender
fd1ed0c092 Pass function name to database functions
Useful for logging

Change-Id: Ia2160fb6be5fc93f28ab51f7ae23d7f078247481
2020-06-07 14:16:52 +02:00
Umherirrender
a9cae1a917 Remove unused variables from closure use() lists
Change-Id: I11f2e0d7a95caf9d7e8732f8022e6e0685a4223d
2020-02-29 17:10:28 +00:00
daniel
135673b98e NameTableStore: ensure consistency upon rollback.
This ensures consistent behavior when an ID for a name is first acquired
within a transaction that is rolled back. The documentation for acquireId
now reads:

@note If called within a transaction, there is a chance for the acquired ID to be lost
if the transaction is rolled back. A best effort is made to re-insert the mapping
after a rollback, and consistency of the cache with the database table is ensured
by re-loading the map after a failed transaction. However, there is no guarantee
that an ID returned by this method is valid outside the transaction in which it
was produced. This means that calling code should not retain the return value beyond
the scope of a transaction, but rather call acquireId() again after the transaction
is complete. In some rare cases, this may produce an ID different from the first call.

Bug: T224949
Change-Id: I6d05e4112a649675bfb9083cab2d1bbe394e65b3
2019-10-10 12:03:29 +02:00
jenkins-bot
358348d9bf Merge "rdbms: add setTempTablesOnlyMode() to suppress CONN_TRX_AUTOCOMMIT during tests" 2019-08-25 15:02:48 +00:00
Aaron Schulz
b1b01d8e3c Make NameTableStore use LoadBalancer::getConnectionRef()
This method handles reuseConnection() calls, disallows writes to
DB_REPLICA role handles, is more consistent with wfGetDB(), and
is more efficient with I540b08920997c5.

Change-Id: I8edaef0ea4718414e2004fad04afca8ec5797669
2019-08-25 01:24:16 +00:00
Aaron Schulz
0b8a4daaa4 rdbms: add setTempTablesOnlyMode() to suppress CONN_TRX_AUTOCOMMIT during tests
Bug: T202116
Change-Id: Ib3e80eb04580b2d5a75ede8fb5546409c09a751a
2019-08-19 18:47:21 -04:00
Aaron Schulz
a9a13a1266 storage: rename various $wikiId fields/parameters to $dbDomain
These fields are passed to methods like LoadBalancer::getConnection() and are
already expected to be DB domains. Update various comments as well.

Fix a few minor IDEA warnings.

Change-Id: If480cc4d7d4a3c2d176ab346e6307e80cd2540c5
2019-06-28 00:57:04 +00:00
Aaron Schulz
7a69b598f2 Alter two uses of hasOrMadeRecentMasterChanges() for consistency
Rather than have the behavior vary and possibly break code or tests
when small changes happen, make User/NameTableStore more explicit
about when cache key purges happens.

This should reduce problems with certain fragile tests, such as those
that could be affected by 0390811263 when --use-normal tables is not
used. Ideally, any fragility should be ironed out of effected code.

Change-Id: Ibe5d1bb4bece2526bc0da99648f7ba73bdc0ffa5
2019-04-23 11:34:09 -07:00
Aaron Schulz
1869ffb765 Rename NameTableStore wiki ID field to a DB domain field
Change-Id: Ia0616c76792e9fc878b413e3f86bef9b799b665e
2019-03-29 18:22:25 +00:00
Aaron Schulz
10321ff1b2 storage: Fix typo in NameTableStore::purgeWANCache comments
Change-Id: Icdea7422cdb110877bb8991896e6ab8a83b02858
2019-03-20 02:02:06 +00:00
Jakub Vrana
f21d45b9ec Fix return typehint
Found by PHPStan.

Change-Id: Ia5280815f9dda25788de0438af1468adb8c915a6
2018-12-01 09:57:31 +01:00
Umherirrender
fe84fb4ba2 Fix logged method in NameTableStore::getName
Seeing {closure} in the logs as caller is not helpful

Change-Id: I6a54ebf87024706b7890c7fe003b5380933fe861
2018-09-30 17:30:49 +00:00
daniel
2c7e4adcea Don't reset name tables between test runs.
Resetting the content_model and slot_role tables between test runs
requires the corresponding NameTabelStore instances to be reset
as well. We may however have many of them, buried in various services.
There is no easy way to reset them consistently.

Letting information in these tables persist between tests seems
harmless. Tests that need these tables reset can simply add them
to the tablesUsed array.

This is needed for unit tests to work with the new MCR schema.

Bug: T198561
Change-Id: I63e61e1ab74e00c20930a83d3a3f5df53092a197
2018-08-23 19:15:33 +02:00
daniel
63ae40bfad Document cross-wiki cache sharing logic.
This makes explicit the fact that some classes can use the local wiki's default
WANObjectCache instance while still sharing cache entries between wikis.

Bug: T198704
Change-Id: Ic29f79e4b4bd6bdaa844049962a163e72a59c45a
2018-08-02 18:55:41 +00:00
addshore
f5cc67524d Introduce RevisionStoreFactory & Tests
This is based on I0a8a441b803, which was reverted because it was
incomplete.

Bug: T198701
Change-Id: I3e4a5f1ef687418c06dfc979cfe04da336e876b1
2018-08-02 18:55:29 +00:00
Umherirrender
130ec2523d Fix PhanTypeMismatchDeclaredParam
Auto fix MediaWiki.Commenting.FunctionComment.DefaultNullTypeParam sniff

Change-Id: I865323fd0295aabd06f3e3c75e0e5043fb31069e
2018-07-07 00:34:30 +00:00
daniel
53fd8295ff Use consistent caching strategy in Revision storage classes
DEPLOYMENT: This changes the cache key for revision
content blobs. Expect a brief rise in ExternalStore hits.

Bug: T198704
Change-Id: Icc2d16bc5a1e27ba4caea49a784ba7aeac15042a
2018-07-05 17:44:24 +02:00
addshore
f84d47160c Move getFieldsToStore to own method in NameTableStore
In the future this opens up an easy posibility of subclassing
if this is made protected.

Change-Id: I640c9f12f52dbb3328523402d9223ee8c967adda
2018-06-15 07:28:37 +00:00
Amir Sarabadani
20c9b6eb59 Introduce argument for insert callback in NameTableStore
This will be useful in cases we need to define more data
when inserting a new row

Bug: T193868
Change-Id: Ib5c2da2ef951e0bc782847ff8bd4606681ee2196
2018-06-14 15:51:16 +00:00
Aaron Schulz
3b58b6d143 Fix testGetMap_twoValues() failures for sqlite
Change-Id: I3f42208d8e42ba923d4b08bb7efe15f871165899
2018-04-13 14:16:39 -07:00
Aaron Schulz
f8c2486d15 rdbms: rename CONN_TRX_AUTO constant to CONN_TRX_AUTOCOMMIT
The "AUTO" means AUTOCOMMIT, not "automatic transactions"/DBO_TRX,
which is basically the opposite concept. The new name does not
suffer from that ambiguity.

Keep the old constant as an alias for backwards compatibility.

Also remove LoadBalancer comment about non-existing field

Change-Id: I63beeb061fc9be73f320308e4d6393b58628b8c8
2018-04-12 13:01:52 -07:00
addshore
4d3549ad71 [MCR] NameTableStore
General purpose cached store for things like:
 - content_models (id,name)
 - slot_roles (id,name)
And in the future possibly namespaces & content_formats
as mentioned at:
https://www.mediawiki.org/wiki/Multi-Content_Revisions/Schema_Migration#Name_tables

Bug: T188518
Change-Id: Ia550ef7fe30af25ac3fee5ac8a89d032544563bf
2018-03-02 19:48:15 +00:00