}
/**
- * TTLs higher than 30 days will be detected as absolute TTLs
- * (UNIX timestamps), and will result in the cache entry being
- * discarded immediately because the expiry is in the past.
- * Clamp expires >30d at 30d, unless they're >=1e9 in which
- * case they are likely to really be absolute (1e9 = 2011-09-09)
- * @param int $expiry
+ * @param int|float $exptime
* @return int
*/
- function fixExpiry( $expiry ) {
- if ( $expiry > 2592000 && $expiry < 1000000000 ) {
- $expiry = 2592000;
+ protected function fixExpiry( $exptime ) {
+ if ( $exptime < 0 ) {
+ // The PECL driver does not seem to like negative relative values
+ $expiresAt = $this->getCurrentTime() + $exptime;
+ } elseif ( $this->isRelativeExpiration( $exptime ) ) {
+ // TTLs higher than 30 days will be detected as absolute TTLs
+ // (UNIX timestamps), and will result in the cache entry being
+ // discarded immediately because the expiry is in the past.
+ // Clamp expires >30d at 30d, unless they're >=1e9 in which
+ // case they are likely to really be absolute (1e9 = 2011-09-09)
+ $expiresAt = min( $exptime, self::TTL_MONTH );
+ } else {
+ $expiresAt = $exptime;
}
- return (int)$expiry;
+
+ return (int)$expiresAt;
}
}