These were spotted by phan's stricter type checks. All make*Key methods
can also take integers, and that's pretty common across core and
extensions.
Language::formatNum can also take numbers (and tests cover this case);
in this case, move the cast to the top of the method, so that we're
passing a string to strtr, too.
The methods touched in this patch are the main source of false positives
in both core and extensions.
Change-Id: I6d538ce3ca7fd2d495c2bafbab7cc279da69db1c
Make the default $init value for incrWithInit() be $value.
This is far less suprising and also makes the operation
easier to replicate without conflicts.
Make decr() definitions more explicit since various cache
drivers do not handle negative incr() values (e.g. memcached).
Change-Id: I2b8d642656cc91c841abbd7a55d97eba101b027a
Use real time for testing absolute expirations with changeTTL().
Otherwise, backends like memcached or redis will fail since
they do not use the mock time.
Also:
* Make SqlBagOStuff actually override changeTTLMulti() by
using the right method name
* Check TTL_INDEFINITE more explicitly for clarity
* Rename TTL conversion methods for clarity
* Use isRelativeExpiration() in MemcachedBagOStuff
Change-Id: I9365ceb31d4e7bef65906363d42b8c3020a66346
This should help fix the following issues that various repos
are getting from Phan as of late:
> Call with 5 arg(s) to \BagOStuff::makeKey() which only takes 2 arg(s)
> defined at ../../includes/libs/objectcache/BagOStuff.php:456
> <source="PhanParamTooMany"/>
Bug: T228563
Depends-On: I5cfba063821101325a5a7359e6b8ad71a0fb1b2f
Depends-On: Ifa5b96735376f2fbe3680799f960616ba8d357ff
Change-Id: Ic9df7f3ad7f356c7cbdfe1edfbe35821b931dda6
Also simplify the code by removing the is_callable() check and relying on
regular PHP errors instead of an exception for bad callbacks.
Change-Id: I084b0132c5fb05f1941a6d6839cfa74e2cf677f0
Make use of Memcached::OPT_NO_BLOCK and Memcached::OPT_BUFFER_WRITES
at selective points to avoid slow internal blocking for loops in the
PECL extension methods. As this mode makes the return values less
meaningful, this is only triggered only if WRITE_BACKGROUND is
provided (it only catches some glaring format or size errors that the
client runs into).
Leave changeTTLMulti() to the default as the above approach would not
make it faster, since the diver does not buffer for that command.
Expand mctest.php to include *Multi() methods and also break down the
single key method timings by method.
Change-Id: I11fc58e1a2296778b2526a0b2f3103fef1baba0c
A key missing segments should count as non-existing, meaning that it should
not appear in the return value at all
Change-Id: I0f08b3dba77e0d335ebb2d75061927ebd36570d2
In SqlBagOStuff:
* Add modifyMulti() helper method to reduce code duplication
* Improve atomicity of add(), cas(), and changeTTL() queries
* Avoid integer serialization and improve atomicity of incr()
* Optimize new BagOStuff::changeTTLMulti() method
In BagOStuff:
* Add changeTTLMulti() method for subclasses to optimize
* Make set() ignore WRITE_ALLOW_SEGMENTS for integers so incr() works
* Strip WRITE_ALLOW_SEGMENTS flag from the setMulti() call in set() to
avoid triggering bogus sanity check exceptions
* Fix BagOStuffTest::testSetSegmentable failures via the above changes
* Enforce WRITE_ALLOW_SEGMENTS sanity check in setMulti() for all the
subclasses by using a final wrapper method
* Add WRITE_ALLOW_SEGMENTS sanity check to deleteMulti()
Bug: T113916
Change-Id: I25d1790fa9b0d1837643efccfa94a12043cfbf42
Make the method use a callable type hint for $progressCallback.
Also make the SQLBagOStuff subclass shuffle() the array of server and table
indexes in case the limit keeps getting applied. Only garbage collect on DBs
that were going to be written to anyway. Also use DeferredUpdates if possible.
Change-Id: I723e6377c26750ff98e33f7ab103c6162ae65f43
If a key is stored in both BagOStuff and WANObjectCache, it useful to have
one common method for generating the cache and storage keys.
Change-Id: I8b77651746a55e8a98a79db298226e334d15a494
Also adjust the frequency default and put in a 100 row limit for
randomized purges. This adds a $limit parameter to the BagOStuff
method deleteObjectsExpiringBefore().
Change-Id: I66bfcc67e8e118f8c659dbbee13d54bf2cd937f5
Use it for ApiStashEdit so that large PaserOutput can be stored.
Add flag to allow for value segmentation on set() in BagOStuff.
Also add a flag for immediate deletion of segments on delete().
BagOStuff now has base serialize()/unserialize() methods.
Bug: T204742
Change-Id: I0667a02612526d8ddfd91d5de48b6faa78bd1ab5
If another cache wraps a BagOStuff, it may need to know about the
BagOStuff’s notion of the current time, which may be mocked and differ
from the real time.
Change-Id: I40f4085d4cf549314394d3140cccb1fe4e48690a
Callers should really use atomic TTL-preserving implementations
so that calling code works correctly. The old default base class
code did not do either.
Change-Id: Icf66db05e48b86c8d481dc08dc9041bd1fa6dbe9
Also:
* Make the BagOStuff tests actually pass for memcached and sql
* Add more unit tests for BagOStuff
* Make SqlBagOStuff::add() more atomic
Change-Id: Ic1eec0990a66b595b57c646498c3bd229442230c
This should be the "last revision seen" timestamp, which is
different than the "first revision not seen" timestamp in the DB.
Also make sure that SpecialWatchlist accounts for the stash values.
Relatedly, better document the callback usage in BagOStuff::merge().
Change-Id: I98b03a5cd40fec5b4a2633d499ff77079d264e3c
This was inspired by Idbbdb31. Originally, I did a regex search for
code that did string concatenations like `$str = $str . …` and replaced
them all with the .= operator. A duplicate patch was uploaded by another
author. I rebeased this patch on top of the other, which leaves all
the manual optimizations I did.
Change-Id: Iaeb73d9c63302c9409bd1051b91e0d2bd77788a7
This was only there as part of EventRelayer use by WAN cache, which
has since been removed. No other usage really makes sense.
Change-Id: I201425bb88739dd8febbfbc3d24a15e6d3d88d9c
This makes it consistent with set() and merge(). Also, one subclass
was already using the field in this manner.
Clean up the code related to WRITE_SYNC in SqlBagOStuff.
Change-Id: I0fb84f4475311889507d3ef98afd4476fb81174f