/** Tiny positive float to use when using "minTime" to assert an inequality */
const TINY_POSTIVE = 0.000001;
- /** Seconds of delay after get() where set() storms are a consideration with 'lockTSE' */
- const SET_DELAY_HIGH_SEC = 0.1;
+ /** Milliseconds of delay after get() where set() storms are a consideration with 'lockTSE' */
+ const SET_DELAY_HIGH_MS = 50;
/** Min millisecond set() backoff for keys in hold-off (far less than INTERIM_KEY_TTL) */
const RECENT_SET_LOW_MS = 50;
/** Max millisecond set() backoff for keys in hold-off (far less than INTERIM_KEY_TTL) */
* - tombAsOf: UNIX timestamp of the tombstone or null if the key is not tombstoned
* - lastCKPurge: UNIX timestamp of the highest check key or null if none provided
*
- * Othwerwise, $info will transform into the cached value timestamp.
+ * Otherwise, $info will transform into the cached value timestamp.
*
* @param string $key Cache key made from makeKey() or makeGlobalKey()
* @param mixed|null &$curTTL Approximate TTL left on the key if present/tombstoned [returned]
* stampede is worth avoiding. Note that if the key falls out of cache then concurrent
* threads will all run the callback on cache miss until the value is saved in cache.
* The only stampede protection in that case is from duplicate cache sets when the
- * callback takes longer than WANObjectCache::SET_DELAY_HIGH_SEC seconds; consider
+ * callback takes longer than WANObjectCache::SET_DELAY_HIGH_MS milliseconds; consider
* using "busyValue" if such stampedes are a problem. Note that the higher "lockTSE" is
* set, the higher the worst-case staleness of returned values can be. Also note that
* this option does not by itself handle the case of the key simply expiring on account
* It is generally preferable to use a class constant when setting this value.
* This has no effect unless pcTTL is used.
* Default: WANObjectCache::PC_PRIMARY.
- * - version: Integer version number. This allows for callers to make breaking changes to
- * how values are stored while maintaining compatability and correct cache purges. New
- * versions are stored alongside older versions concurrently. Avoid storing class objects
- * however, as this reduces compatibility (due to serialization).
+ * - version: Integer version number. This lets callers make breaking changes to the format
+ * of cached values without causing problems for sites that use non-instantaneous code
+ * deployments. Old and new code will recognize incompatible versions and purges from
+ * both old and new code will been seen by each other. When this method encounters an
+ * incompatibly versioned value at the provided key, a "variant key" will be used for
+ * reading from and saving to cache. The variant key is specific to the key and version
+ * number provided to this method. If the variant key value is older than that of the
+ * provided key, or the provided key is non-existant, then the variant key will be seen
+ * as non-existant. Therefore, delete() calls invalidate the provided key's variant keys.
+ * The "checkKeys" and "touchedCallback" options still apply to variant keys as usual.
+ * Avoid storing class objects, as this reduces compatibility (due to serialization).
* Default: null.
* - minAsOf: Reject values if they were generated before this UNIX timestamp.
* This is useful if the source of a key is suspected of having possibly changed
// consistent hashing).
if ( $lockTSE < 0 || $hasLock ) {
return true; // either not a priori hot or thread has the lock
- } elseif ( $elapsed <= self::SET_DELAY_HIGH_SEC ) {
+ } elseif ( $elapsed <= self::SET_DELAY_HIGH_MS * 1e3 ) {
return true; // not enough time for threads to pile up
}