Merge "Use adaptive CDN TTLs for page views"
This commit is contained in:
commit
a6c5f1a815
3 changed files with 38 additions and 1 deletions
|
|
@ -1933,6 +1933,36 @@ class OutputPage extends ContextSource {
|
|||
$this->setCdnMaxage( $this->mCdnMaxage );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get TTL in [$minTTL,$maxTTL] in pass it to lowerCdnMaxage()
|
||||
*
|
||||
* This sets and returns $minTTL if $mtime is false or null. Otherwise,
|
||||
* the TTL is higher the older the $mtime timestamp is. Essentially, the
|
||||
* TTL is 90% of the age of the object, subject to the min and max.
|
||||
*
|
||||
* @param string|integer|float|bool|null $mtime Last-Modified timestamp
|
||||
* @param integer $minTTL Mimimum TTL in seconds [default: 1 minute]
|
||||
* @param integer $maxTTL Maximum TTL in seconds [default: $wgSquidMaxage]
|
||||
* @return integer TTL in seconds
|
||||
* @since 1.28
|
||||
*/
|
||||
public function adaptCdnTTL( $mtime, $minTTL = 0, $maxTTL = 0 ) {
|
||||
$minTTL = $minTTL ?: IExpiringStore::TTL_MINUTE;
|
||||
$maxTTL = $maxTTL ?: $this->getConfig()->get( 'SquidMaxage' );
|
||||
|
||||
if ( $mtime === null || $mtime === false ) {
|
||||
return $minTTL; // entity does not exist
|
||||
}
|
||||
|
||||
$age = time() - wfTimestamp( TS_UNIX, $mtime );
|
||||
$adaptiveTTL = max( .9 * $age, $minTTL );
|
||||
$adaptiveTTL = min( $adaptiveTTL, $maxTTL );
|
||||
|
||||
$this->lowerCdnMaxage( (int)$adaptiveTTL );
|
||||
|
||||
return $adaptiveTTL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use enableClientCache(false) to force it to send nocache headers
|
||||
*
|
||||
|
|
|
|||
|
|
@ -706,6 +706,10 @@ class Article implements Page {
|
|||
}
|
||||
}
|
||||
|
||||
# Use adaptive TTLs for CDN so delayed/failed purges are noticed less often.
|
||||
# This could use getTouched(), but that could be scary for major template edits.
|
||||
$outputPage->adaptCdnTTL( $this->mPage->getTimestamp(), IExpiringStore::TTL_DAY );
|
||||
|
||||
# Check for any __NOINDEX__ tags on the page using $pOutput
|
||||
$policy = $this->getRobotPolicy( 'view', $pOutput );
|
||||
$outputPage->setIndexPolicy( $policy['index'] );
|
||||
|
|
@ -715,7 +719,6 @@ class Article implements Page {
|
|||
$this->mPage->doViewUpdates( $user, $oldid );
|
||||
|
||||
$outputPage->addModules( 'mediawiki.action.view.postEdit' );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -68,6 +68,10 @@ class CategoryPage extends Article {
|
|||
if ( $title->inNamespace( NS_CATEGORY ) ) {
|
||||
$this->closeShowCategory();
|
||||
}
|
||||
|
||||
# Use adaptive TTLs for CDN so delayed/failed purges are noticed less often
|
||||
$outputPage = $this->getContext()->getOutput();
|
||||
$outputPage->adaptCdnTTL( $this->mPage->getTouched(), IExpiringStore::TTL_MINUTE );
|
||||
}
|
||||
|
||||
function openShowCategory() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue