Commit graph

10 commits

Author SHA1 Message Date
Timo Tijhof
55db848b77 localisation: Release data from memory in LCStoreStaticArray::finishWrite
With this change, the memory behaviour of LCStoreStaticArray
matches the other LCStore implementations. Specifically, that when
mass-rebuilding LocalisationCache entries for all language codes,
the computed data should be released from memory after
calling LCStore::finishWrite().

This doesn't affect user-facing web requests, even in the case
of stock MW where every once in a while a user request can lazy-
regenerate the LCStore, there is a process-cache in front of LCStore
in the LocalisationCache class.

The rebuildLocalisationCache.php clears that via
LocalisationCacheBulkLoad::unload(), but due to LCStoreStaticArray
internally holding on to the data, it was still leaking.

The leak was found by @Nikerabbit as part of testing for T218207.

To test this, amend rebuildLocalisationCache.php and add the
following on line 161, as the first line of the doRebuild/foreach/if
block:

  echo "[$code-start-mem] " . round(memory_get_usage(true)/1024/1024, 2) . " MB\n";

If you then have LocalSettings.php configured like so:

  $wgCacheDirectory = $wgTmpDirectory;
  $wgLocalisationCacheConf['store'] = 'array';

Then before this patch, running rebuildLocalisationCache.php,
shows memory starting at 12 MB and growing 2-3 MB for every language
until the very end, closing with 970 MB memory use.

After this patch, it starts at 12 MB and stops growing at 32 MB.

When configuring as `['store'] = 'files'`, which uses LCStoreCDB,
the memory starts at 12 MB and stops growing at 44 MB, both before
and after this patch.

Bug: T218207
Change-Id: I0d215efee5b31766776a068b16811d52f9879312
2019-09-04 21:35:10 +01:00
Timo Tijhof
7630e2bdb4 localisation: Inject 'directory' option to LCStore classes
Avoid globals for this, inject them from the factory function instead.

Bug: T218207
Change-Id: Ia961e8e08dcf1ca154d74ea6a3dadd2d59c1299c
2019-05-14 16:35:29 +00:00
Reedy
c13fee87d4 Collapse some nested if statements
Change-Id: I9a97325d738d09370d29d35d5254bc0dadc57ff4
2019-04-04 19:02:22 +00:00
Thiemo Kreuz
9314453c93 Make use of the list() feature where it makes sense
This code is functionally identical, but less error prone (not so easy
to forget or mix these numerical indexes).

This patch happens to touch the Parser, which might be a bit scary. We
can remove this file from this patch if you prefer.

Change-Id: I8cbe3a9a6725d1c42b86e67678c1af15fbc5961a
2019-03-24 20:12:23 +00:00
Seb35
1cb8f5bff8 localisation: Make PHP cache files slimmer
The only difference is the scalar values are no longer encoded as an
array, but just the value itself. As a result, PHP localisation cache
files are about 2/3rds of their previous size and become slightly
smaller than CDB files.

Bug: T99740
Change-Id: Iaa5e32830dc1bb710b9e0f1a681afe91e521ece9
2018-12-20 21:58:23 +00:00
Fomafix
43244db9a2 Use PHP 7 '??' operator instead of if-then-else
Change-Id: If9d4be5d88c8927f63cbb84dfc8181baf62ea3eb
2018-10-21 21:46:46 +02:00
Kunal Mehta
e4676f42ff Use StaticArrayWriter in LCStoreStaticArray
...instead of var_export(), which uses array() syntax and spaces for
indentation.

Also get rid of some unnecessary closure indirection.

Bug: T200626
Change-Id: I5db8ade50fcba5ecf394817b2d14295620314ea7
2018-08-27 22:23:08 +00:00
Edward Chernenko
86cf01d433 LCStoreStaticArray: create cache directory when it doesn't exist
Array store (LCStoreStaticArray) should behave as standard LCStoreCDB,
creating the target directory when it doesn't exist.

This fixes unexpected "No such file or directory" errors when
replacing 'files' with 'array' in $wgLocalisationCacheConf['store'].

Change-Id: Ie49cf03ca93ac47fc98665de36e6207bef287193
2018-06-25 18:40:25 +03:00
Huji Lee
e74bfe13f6 Require indentation of CASE statements in PHP code
Bug: T182546
Change-Id: I91a9555893a08e4ec58da97c6cc4d1e70000ff6b
2017-12-10 22:07:50 -05:00
addshore
b8ca311a1c Split LocalisationCache.php classes into own files
Change-Id: I1b88081e6b082fcad73990550a3ffbf58e11d97e
2016-03-24 11:00:44 +00:00
Renamed from includes/cache/LCStoreStaticArray.php (Browse further)