Commit graph

642 commits

Author SHA1 Message Date
Timo Tijhof
82fe641c42 Setup: Make wfMemoryLimit() internal and simplify
Bug: T189966
Change-Id: I4fa3d66dbf2e2d05a0d1868329a16dfb1959498f
2019-07-13 01:22:43 +00:00
Timo Tijhof
6612e4867f Setup: Move mb_internal_encoding() call earlier
This is an unconditional and unconfigurable changes to PHP behaviour.
The earlier the better so that there is less code that can run
without it.

Also improve some documentation of other setup logic bits being
documented by the referenced task.

Bug: T189966
Change-Id: Ia8e1478cf0841d80b1c61c266f2ece75be2303e1
2019-07-13 01:48:11 +01:00
Kosta Harlan
214750d8d2 Define unit and integration test suites
Following discussion in Ibb8175981092d7f41864e641cc3c118af70a5c76, this patch
proposes to further reduce the scope of what unit tests may access, by removing
the loading of DefaultSettings and GlobalFunctions.php. This also has the
implied effect of disabling the storage backend, as well as the global service
locator.

MediaWikiTestCase is renamed to MediaWikiIntegrationTestCase so it's scope and
purpose is more clear. Whether we still need to keep `@group Database`
annotation around is debatable, as it's unclear to me what the performance costs
are of implying database access for all tests which extend IntegrationTestCase.
As far as I can tell, `@group Database` is primarily used in CI to run faster
tests before slower ones, and with the new UnitTestCase the annotation seems
redundant.

To run all testsuites, use `composer phpunit`. Other composer scripts:

- `composer phpunit:unit` to run unit tests
- `composer phpunit:integration` to run integration tests
- `composer phpunit:coverage` to generate code coverage reports from unit
   tests (requires XDebug).

Note that you can pass arguments to composer scripts with `--`, e.g. `composer
phpunit:integration --exclude-group Dump`.

Other changes:

- Rename bootstrap.php to bootstrap.maintenance.php so it's clear it's part of
  the legacy PHPUnit-as-maintenance-class setup
- Create new bootstrap.php which loads the minimal configuration necessary for
  the tests, and do additional setup in the run() method of the unit/integration
	test case classes
- Move the unit-tests.xml file to phpunit.xml.dist in preparation for this being
  the default test configuration

For a follow-up patch:

- Find unit/integration tests for extensions/skins
- Migrate other test suites from suite.xml
- Support running all tests via vendor/bin/phpunit

Bug: T84948
Bug: T89432
Bug: T87781
Change-Id: Ie717b0ecf4fcfd089d46248f14853c80b7ef4a76
2019-06-28 12:18:18 -04:00
Tim Starling
3f0056a252 REST API initial commit
Add some of the basic REST API class hierarchies:

* EntryPoint
* Router
* Request
* Response
* Handler

The actual entry point file rest.php has been moved to a separate
commit, so this is just an unused library and service.

Bug: T221177
Change-Id: Ifca6bcb8a304e8e8b7f52b79c607bdcebf805cd1
2019-06-12 10:22:28 +10:00
James D. Forrester
f9f8dff40f Rename CDN config variables to be generic, deprecating the old names
Hook, methods, classes still to rename where appropriate.

Bug: T104148
Depends-On: Id34339dff88bc6d1863378ac94b96b2d590b891d
Depends-On: I4e2938395bcbf7956b83fff00978f09c61dcfa36
Change-Id: I7a725dae551c867a4fa7c213838d52c7fb862756
2019-05-24 21:09:22 +00:00
Máté Szabó
420c0e0f42 Configure LoadBalancer with $wgSharedTables after WAN cache autodetection
Currently, $wgSharedTables - if configured - is injected into the LoadBalancer
before the WAN cache autodetection runs. As such, if $wgSharedTables is set
but $wgMainWANCache was not explicitly given, the LoadBalancer will force
a premature instantion of the WAN cache with an EmptyBagOStuff backend,
preventing the autodetection logic from setting a correct backend.
This change moves $wgSharedTables initialization after the WAN cache
autodetection to accunt for this scenario.

Change-Id: I59bb52f42905cda1c2aa47bc589a2f0b36b2a28f
2019-05-22 18:03:50 +02:00
Aaron Schulz
a1755468fb Hypenate ChronologyProtector HTTP headers
Follow up to 6b6997dcf9

Change-Id: I4c26c16821f3b57996c7d5c7195010c57a603041
2019-04-23 11:37:53 -07:00
Aaron Schulz
6b6997dcf9 Accept new "MediaWiki-ChronologyClientId" HTTP header
This is not used when the ID is already in "cpPosIndex".

Also, prefix the "ChronologyProtection" header with "MediaWiki-".
The header is currently usused but might be useful for services
in the future.

Bug: T212550
Change-Id: Ia871e95966d3550bac3dc4b2edb58e18359af7d9
2019-04-19 20:15:31 -07:00
Fomafix
f17c297624 Use short assignment operator in PHP
Use
  $var .= $foo
instead of
  $var = $var . $foo

Change-Id: I5dcdd7278e618c14968e5ac1fb8ea43ac2200deb
2019-03-07 09:55:49 +01:00
James D. Forrester
3f717984c1 Drop AuthPlugin and related code, deprecated in 1.27
Bug: T215843
Depends-On: Ie49709faa6f67b0a31bd546823d29dbfea0a70eb
Depends-On: If8109dbfdeeb88a6265f4cd79d1ae81bff48d934
Depends-On: I36b195fa2d6c23a76631ebaf869c787e44427d60
Depends-On: Iaa171b085fde331eab7d85c7de74523e27fc625a
Change-Id: I330b30d6582034a233fed204c0680b1ce84eec6e
2019-03-05 08:23:14 +00:00
Fomafix
4b46994799 Fix usage of MediaWikiServices in comments and documentation
MediaWikiServices::getFoo()

is wrong. Right is:

MediaWikiServices::getInstance()->getFoo()

Change-Id: Ib6d844ddfe5bd6ccd72b887a63d9ad476c8d196f
2019-03-03 14:09:33 +00:00
Aaron Schulz
5414aee495 objectcache: remove dangling WAN cache EventRelayer references
* Remove 'channels' field references from config/setup
* Remove 'relayer'/'channels' field reference in unit tests
* Remove unused DEFAULT_PURGE_CHANNEL class constant
* Also remove long-since bogus 'pool' field references

Follow-up to 4753b0a4ed

Change-Id: If6670ff4e1dccc8ae253a08b46d205601da10024
2019-02-16 20:22:32 -08:00
James D. Forrester
a38fe6cd7d Drop b/c reading of wgSessionsInObjectCache and wgSessionHandler, deprecated in 1.27
Depends-On: I0d861a24b6cfd5c881112f15c682d97cef715cf0
Change-Id: I6b69d9ad3863512879f287f960828c1fdf7b214c
2019-02-09 13:42:43 -08:00
jenkins-bot
1accb936f3 Merge "Improve error handling for wrong autoloader permissions" 2019-02-06 01:12:51 +00:00
Gergő Tisza
a0381cf1dd
Improve error handling for wrong autoloader permissions
Running Composer manually with a user different from the webserver
user and ending up with a vendor/autoload.php file that's unreadable
to MediaWiki seems like an easy mistake to make. Make the error
message when that happens less cryptic.

Change-Id: I52600adceb38a7fc5384d00b5298e46a782c684f
2019-02-05 15:27:37 -08:00
Timo Tijhof
d39cc0e885 Remove deprecated wgEnableParserCache
One less thing to do in Setup.php.

Bug: T189966
Change-Id: Ie9b631897fda51f6db9fc4d634bcbd6bf865dfc9
2019-01-25 21:08:10 -08:00
Brad Jorsch
1b52ddd9c6 Avoid session double-start in Setup.php
In PHP before 7.3, the double start doesn't really matter: session_id()
changes the ID even if it was already started, and the warning from
session_start() can just be ignored. Which is what we did.

In PHP 7.3, now session_id() also warns and no longer changes the ID. To
preserve the previous behavior, we'll need to explicitly close the old
session and open the new one.

Bug: T213489
Change-Id: I02a5be1c3adb326927c156fdd00663bccee37477
2019-01-16 15:08:15 +00:00
Derick Alangi
cb2dc22b5e Setup: Avoid using count() function in any kind of loop(s)
Using count() function in loops makes things very slow because
of function overheads and this function gets called everytime the
loop runs meaning the bigger the value of the variable in count(),
the slower the loop as its value always gets computed as the loop
runs.

In this case, the use of foreach(...){} is possible in order to
perform the computation making it pretty fast hence improving the
performance.

Change-Id: Ie21fbf8f6acf72373d1da75023725b4592c80386
2019-01-15 12:46:51 +01:00
C. Scott Ananian
f2e0516934 Include BCP 47 codes in $wgDummyLanguageCodes, but deprecate it
Add BCP 47 codes to $wgDummyLanguageCodes to ensure that
Language::factory() will return a valid MediaWiki-internal code if
given a BCP 47 alias.  We will want to make $wgDummyLanguageCodes a
private property of LanguageCode eventually, but let's start with
removing it from user configuration.

Setting $wgDummyLanguageCodes in LocalSettings.php has been deprecated
since 1.29.  Hard deprecate adding entries to $wgDummyLanguageCodes so
that we can eventually remove manual overrides from user
configuration.

This is a follow-up to 48ab87d0a3,
which described the various categories of codes, and
21ead7a98d, which added the correct
BCP 47 mappings.

Bug: T207433
Change-Id: I9f6dda3360f79ab65f6392f44c98926588d851c8
2018-10-19 14:31:21 -04:00
Brad Jorsch
4d74c8bf74 Fix Setup.php file-scope test
Way back in r8196, a test was added to assert that Setup.php is being
included at file scope.[1] That test was broken when I633a6ff23 moved the
inclusion of DefaultSettings.php into Setup.php itself.

This fixes the test by having it directly set a variable and see if that
variable is a global. Yes, there's several ways to bypass it, but we're
just trying to avoid accidents here rather than trying to be foolproof.

[1]: Or really, in the same scope as DefaultSettings.php. But it
intended to be checking for file scope.

Change-Id: I9b5f15bf01c2903e8d44d85c54465d90c047cb51
2018-10-04 16:40:15 -04:00
Timo Tijhof
ebec274f17 Remove support for StartProfiler.php
Bug: T201782
Bug: T189966
Change-Id: I6ef5af969b1d74a04d5d89370e6ac800c20be1ad
2018-08-26 02:09:44 +00:00
Kunal Mehta
49efdca8f5 Deprecate wfGetCache() and wfGetMainCache()
The former is already a wrapper around ObjectCache::getInstance().

The latter was identical to ObjectCache::getLocalClusterInstance().

Bug: T115890
Change-Id: Ib4e43bc8d3f4ac9f7a453e36dcce9b3d962666ba
2018-08-17 17:56:21 +00:00
Kunal Mehta
3f47d6df57 Deprecate $wgParser
Bug: T160811
Change-Id: I7bcf4bbd14268ec069d97848c016e0098eaf0be4
2018-08-17 10:51:52 -07:00
Aryeh Gregor
1e079652e0 Introduce ContentLanguage service to replace $wgContLang
Bug: T200246
Depends-On: I31c2e20fc70ba3cbc124b9f462f4924a139dd9bd
Depends-On: I4aaf1c641ec6abef214eb96c0e4b42a67488ac00
Depends-On: I461cf2f441a4040bb15d6c4bb93ce6114c143845
Depends-On: I4b1cc4257348d1773fd2ccf045966261f801e7d0
Depends-On: I9790b7efdd484366dc36eb8880778aea1a559e5e
Change-Id: I193f5b9a95430b0a05573c361715e053e5411e32
2018-07-31 21:42:53 -07:00
Timo Tijhof
50386d4325 Clean up docs around $wgUseSharedUploads
* Remove references to these old configuration variables
  from documentation. Rather than wgLocalFileRepo referring to
  these for more information, move the docs there, and point
  there from the old variables.

* Move all their declarations in DefaultSettings.php together,
  and be in the same order as used in Setup.php.

* Add missing @var type and @since version docs.

Bug: T25122
Change-Id: I4eb9490ed4e978b2c3954de0593a9d0d3c5fe73c
2018-07-13 18:22:44 -07:00
Fomafix
e1630b6a53 PHP: Use short ternary operator (?:) where possible
Change-Id: Idcc7e4fcdd4d8302ceda44bf6d294fa8c2219381
2018-06-11 11:26:35 +02:00
jenkins-bot
390d35a1af Merge "rdbms: include client ID hash in ChronologyProtector cookies" 2018-06-04 22:08:22 +00:00
jenkins-bot
369b34f0ae Merge "Record a log entry on page creation" 2018-06-03 07:43:35 +00:00
Aaron Schulz
fb51330084 rdbms: include client ID hash in ChronologyProtector cookies
Previously, if an internal service forwarded the cookies for a
user (e.g. for permissions) but not the User-Agent header or not
the IP address (e.g. XFF), ChronologyProtector could timeout
waiting for a matching writeIndex to appear for the wrong key.

The cookie now tethers the client to the key that holds the
DB positions from their last state-changing request.

Bug: T194403
Bug: T190082
Change-Id: I84f2cbea82532d911cdfed14644008894498813a
2018-06-02 03:57:30 +00:00
Timo Tijhof
a930bf7d7b Remove deprecated global $parserMemc and wfGetParserCacheStorage
Deprecated since 1.30, no longer used in core, bundled components,
and WMF-deployed extensions.

Change-Id: I09715f94750f083712719ef599a2ea4260297681
2018-05-31 14:28:42 +01:00
kaldari
9c387f5036 Record a log entry on page creation
This is controlled by a new config variable, $wgPageCreationLog,
which is set to false by default.

Bug: T12331
Change-Id: Ie3f6cc5ece0134433d5e4a572ea5eb0c3b700b8c
2018-05-29 09:10:40 -07:00
Kunal Mehta
88ea69f2f7 Remove deprecated utfnormal back-compat
Change-Id: Id8f497d0bbaab8282057c9d271a7c9b1e77d1a3f
2018-05-27 20:35:27 -07:00
Timo Tijhof
1796d99f70 Setup: Remove various Profile sections
Before:
- Setup.php
- - Setup.php-defaults
- - Setup.php-validation
- - Setup.php-defaults2
- - Setup.php-misc1
- - Setup.php-memcached
- - Setup.php-globals
- - - Setup.php-session
- - Setup.php-extensions
- - - Setup.php-extensions-{extensionName}
- - - Setup.php-autocreate

After:
- Setup.php
- - Setup.php-defaults
- - Setup.php-defaults2
- - Setup.php-misc
- - Setup.php-globals
- - Setup.php-extensions

The removed sections are mainly things were essentially sections
consisting of one invocation, which profilers already track
natively.

Bug: T189966
Change-Id: I1ed648cdcca9e5a9ea7013394381eacd67f327a3
2018-05-22 22:23:39 +00:00
Aaron Schulz
52af356cad Avoid unnecessary WaitConditionLoop delays in ChronologyProtector
Since it takes time for the agent to get the response and set the
cookie and, as well, the time into a request that a LoadBalancer is
initialized varies by many seconds (cookies loaded from the start),
give the cookie a much lower TTL than the DB positions in the stash.

This avoids having to wait for a position with a given cpPosIndex
value, when the position already expired from the store, which is
a waste of time.

Also include the timestamp in "cpPosIndex" cookies to implement
logical expiration in case clients do not expire them correctly.

Bug: T194403
Bug: T190082
Change-Id: I97d8f108dec59c5ccead66432a097cda8ef4a178
2018-05-18 13:43:05 -07:00
James D. Forrester
846f4f58f5 Remove $wgExperimentalHtmlIds and related code, deprecated in 1.30
Bug: T139744
Change-Id: Ia15d5ab6e7637fd40d5c3399822a3dbeb7b383b5
2018-05-01 14:34:02 -07:00
James D. Forrester
de6dab71e3 Remove $wgScriptExtension (deprecated and ignored since 1.25)
* Remove left-over mention of the .php5 entry points in docs.

* Remove dead logic in NoLocalSettings for php5 entry points.

* Remove dead match in WebRequest for php5 entry points (they'd
  redirect since 1.25, and not seen by PHP).

Change-Id: Ia0ee8588591860b8fe34030c8503f38e9bce31f3
2018-04-19 01:11:23 +01:00
Timo Tijhof
5c94aed0c3 Setup: Move mbstring.func_overload from WebStart to Setup
Follows-up 26c2d03c17, 41d1fa1c3a and r11547 (c7f363f886).

Also add references to the relevant tasks about why the check
exists.

Bug: T189966
Change-Id: Ic1f0c79a1b5638bb30351a0cab55699931d1fded
2018-04-17 23:09:58 +01:00
Timo Tijhof
7efb7f357e RELEASE-NOTES: Add note for StartProfiler deprecation
Follows-up 5209adff6c which just missed the 1.31 boat.

Change-Id: Ia7501e07ccd6498c24ff02f407be1c39414ab97e
2018-04-17 22:29:36 +01:00
Timo Tijhof
5209adff6c Setup: Deprecate StartProfiler, move default to DefaultSettings
$wgProfiler was introduced in 3ea576aa25 (r15605; 2006; MW 1.8).
The global was used from the Profiler.php class file, which
would be manually from StartProfiler.php, which then (if enabled)
assigned the global an actual instance of the Profiler class.

We needed it that way because we actually instantiated and used
the Profiler object (via wfProfileIn) very early on in WebStart.
Specifically, before any settings and classes load.

This first changed in 5a6d1ee2d3 (r86228; 2011; MW 1.17).
That commit deprecated use of $wgProfiler as an object in favour
of assigning it an array that MediaWiki would use to construct
the class. Profiling methods were also changed to lazy-instantiate
the class, which would first happen via a wfProfileIn() call two
lines before loading DefaultSettings and LocalSettings.

Some more relevant clean up happened in a0123d0549 (r89206; 2011).

Now, in 2018, we don't actually lazy-instantiate the Profiler
until after DefaultSetting and LocalSettings load. As such, I
think we can finally get rid of its out-of-bound load strategy.

Instead, we can simply set the default in DefaultSettings, and
recommend admins to set their value in LocalSettings.

Bug: T189966
Change-Id: I4e8dd9558132a5e38c22b26fed9c4b54cd324da7
2018-03-29 21:29:03 +00:00
jenkins-bot
89843b44ce Merge "Update suppressWarning()/restoreWarning() calls" 2018-02-11 22:06:29 +00:00
Reedy
fbc0347466 Update MediaWiki\quietCall() -> Wikimedia\quietCall()
Bug: T182273
Change-Id: Id7d8e176fcd93040e30e46cb64fc6a3d36bc8230
2018-02-10 10:49:33 +00:00
Reedy
39f0f919c5 Update suppressWarning()/restoreWarning() calls
Bug: T182273
Change-Id: I9e1b628fe5949ca54258424c2e45b2fb6d491d0f
2018-02-10 08:50:12 +00:00
Aaron Schulz
d5354b4a3a Make interim WAN cache key deactivation logic broader
* This is how it was before d5aa846d8, which accidentally changed
  the behavior. The WAN cache call in Setup.php was too coupled to
  the ChronologyProtector cookies. It made the assumption that DB
  positions and cookies are stored even when there are no replica
  databases setup (which changed in that patch).
* Check the "UseDC" cookie instead, which is already set in exactly
  the cases this logic should apply.

Bug: T185328
Change-Id: I4dd2a6ca6cdead0052d59be86e6030dbe01f141b
2018-02-01 00:57:05 +00:00
Umherirrender
3124a990a2 Use ::class to resolve class names in includes files
This helps to find renamed or misspelled classes earlier.
Phan will check the class names

Change-Id: I07a925c2a9404b0865e8a8703864ded9d14aa769
2018-01-27 20:34:29 +01:00
Max Semenik
2639f33501 Set default fragment mode to [ 'legacy', 'html5' ]
This is step one in migration, 1.35 LTS should make it
[ 'html5', 'legacy' ].

Also issue deprecation warnings for $wgExperimentalHtmlIds.

Bug: T152540
Bug: T139744
Change-Id: I8780bb589002a4f836ba90bd18093a56cddc3ddf
2018-01-19 18:36:30 -08:00
Aaron Schulz
d5aa846d84 Replace cpPosTime cookie/parameter with cpPosIndex
This handles multi-DB transactions properly, instead of causing wait
timeouts in the WaitConditionLoop. It also is more correct in using
a counter instead of relying on wall clocks.

In addition:
* Refactor related code in MediaWiki.php to be comprehensible.
* Always send the cookie even the "remote wiki redirect" case.
* Renamed ChronologyProtector field and constant to avoid any
  confusion of "wait for server X to reach Y" with "wait for Y
  to show up in position store".
* Add an "asOfTime" field to the position keys for debugging.

Bug: T182322
Change-Id: I5c73cd07eaf664f02ba00c38fab9f49b609f4284
2018-01-02 17:00:32 -08:00
Umherirrender
255d76f2a1 build: Updating mediawiki/mediawiki-codesniffer to 15.0.0
Clean up use of @codingStandardsIgnore
- @codingStandardsIgnoreFile -> phpcs:ignoreFile
- @codingStandardsIgnoreLine -> phpcs:ignore
- @codingStandardsIgnoreStart -> phpcs:disable
- @codingStandardsIgnoreEnd -> phpcs:enable

For phpcs:disable always the necessary sniffs are provided.
Some start/end pairs are changed to line ignore

Change-Id: I92ef235849bcc349c69e53504e664a155dd162c8
2018-01-01 14:10:16 +01:00
Aaron Schulz
e90eafdf61 objectcache: Make WANObjectCache interim caching not interfere with ChronologyProtector
Also removed useless line from testLockTSE(). That would have needed
to be using $this->internalCache and those locks are freed immediately.

Bug: T180035
Change-Id: Ida1a923f779aaf8410da76643457d2200da6cb20
2017-11-30 23:54:22 +00:00
Aaron Schulz
c46fa4c474 Make ChronologyProtector actually use cpPosTime cookies
Setup.php was only injected the value from $_GET. LBFactory used
to check both before 0e5cd18b74, with the cookie check left
in LBFactoryMW. After d175b391ae, LBFactoryMW class switched to
the default LBFactory method for making a ChronologyProtector
instance, so the cookie check was lost there too.

This means that an HTTP GET request due to a redirect from a POST
request will still make sure the DB position store is up-to-date.
This only matters is that store uses replication (e.g. cross DC).

Also refactor LBFactory handling of the cpPosTime URL parameter.

Change-Id: Ie5744577609f4c193cacd71334f92b30f02e3846
2017-11-30 22:26:57 +00:00
Timo Tijhof
25d3185dde Setup: Include StartProfiler before others
Bug: T180183
Change-Id: Ibcf78d094cf4dcf09bc919a5f8168f45ae225ebc
2017-11-09 16:35:19 -08:00