#10862: Smarter filter cache wiping.
parent
d00f4a4ebf
commit
f8b429e963
|
@ -165,7 +165,8 @@ CREATE TABLE cache (
|
||||||
expire int(11) NOT NULL default '0',
|
expire int(11) NOT NULL default '0',
|
||||||
created int(11) NOT NULL default '0',
|
created int(11) NOT NULL default '0',
|
||||||
headers text,
|
headers text,
|
||||||
PRIMARY KEY (cid)
|
PRIMARY KEY (cid),
|
||||||
|
INDEX expire (expire)
|
||||||
) TYPE=MyISAM;
|
) TYPE=MyISAM;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -168,6 +168,7 @@ CREATE TABLE cache (
|
||||||
headers text default '',
|
headers text default '',
|
||||||
PRIMARY KEY (cid)
|
PRIMARY KEY (cid)
|
||||||
);
|
);
|
||||||
|
CREATE INDEX cache_expire_idx ON cache(expire);
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for comments
|
-- Table structure for comments
|
||||||
|
|
|
@ -81,7 +81,8 @@ $sql_updates = array(
|
||||||
"2004-08-12" => "update_102",
|
"2004-08-12" => "update_102",
|
||||||
"2004-08-17" => "update_103",
|
"2004-08-17" => "update_103",
|
||||||
"2004-08-19" => "update_104",
|
"2004-08-19" => "update_104",
|
||||||
"2004-09-14" => "update_105"
|
"2004-09-14" => "update_105",
|
||||||
|
"2004-09-15" => "update_106"
|
||||||
);
|
);
|
||||||
|
|
||||||
function update_32() {
|
function update_32() {
|
||||||
|
@ -1798,6 +1799,19 @@ function update_105() {
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function update_106() {
|
||||||
|
$ret = array();
|
||||||
|
if ($GLOBALS['db_type'] == 'mysql') {
|
||||||
|
$ret[] = update_sql('ALTER TABLE {cache} ADD INDEX expire (expire)');
|
||||||
|
}
|
||||||
|
else if ($GLOBALS['db_type'] == 'pgsql') {
|
||||||
|
// TODO: needs PGSQL equivalent.
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret[] = update_sql('DELETE FROM {cache}');
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
function update_sql($sql) {
|
function update_sql($sql) {
|
||||||
$edit = $_POST["edit"];
|
$edit = $_POST["edit"];
|
||||||
$result = db_query($sql);
|
$result = db_query($sql);
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
* Functions that need to be loaded on every Drupal request.
|
* Functions that need to be loaded on every Drupal request.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
define('CACHE_PERMANENT', 0);
|
||||||
|
define('CACHE_TEMPORARY', -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Locate the appropriate configuration file.
|
* Locate the appropriate configuration file.
|
||||||
*
|
*
|
||||||
|
@ -126,18 +129,23 @@ function cache_get($key) {
|
||||||
* @param $data
|
* @param $data
|
||||||
* The data to store in the cache. Complex data types must be serialized first.
|
* The data to store in the cache. Complex data types must be serialized first.
|
||||||
* @param $expire
|
* @param $expire
|
||||||
* Whether the data should be removed from the cache when a cache expiration
|
* One of the following values:
|
||||||
* is triggered.
|
* - CACHE_PERMANENT: Indicates that the item should never be removed unless
|
||||||
|
* explicitly told to using cache_clear_all() with a cache ID.
|
||||||
|
* - CACHE_TEMPORARY: Indicates that the item should be removed at the next
|
||||||
|
* general cache wipe.
|
||||||
|
* - A Unix timestamp: Indicates that the item should be kept at least until
|
||||||
|
* the given time, after which it behaves like CACHE_TEMPORARY.
|
||||||
* @param $headers
|
* @param $headers
|
||||||
* A string containing HTTP header information for cached pages.
|
* A string containing HTTP header information for cached pages.
|
||||||
*/
|
*/
|
||||||
function cache_set($cid, $data, $expire = 0, $headers = NULL) {
|
function cache_set($cid, $data, $expire = CACHE_PERMANENT, $headers = NULL) {
|
||||||
$data = db_encode_blob($data);
|
$data = db_encode_blob($data);
|
||||||
|
|
||||||
db_query("UPDATE {cache} SET data = '%s', created = %d, expire = %d, headers = '%s' WHERE cid = '%s'", $data, time(), $expire, $headers, $cid);
|
db_query("UPDATE {cache} SET data = '%s', created = %d, expire = %d, headers = '%s' WHERE cid = '%s'", $data, time(), $expire, $headers, $cid);
|
||||||
if (!db_affected_rows()) {
|
if (!db_affected_rows()) {
|
||||||
db_query("INSERT INTO {cache} (cid, data, created, expire, headers) VALUES('%s', '%s', %d, %d, '%s')", $cid, $data, time(), $expire, $headers);
|
db_query("INSERT INTO {cache} (cid, data, created, expire, headers) VALUES ('%s', '%s', %d, %d, '%s')", $cid, $data, time(), $expire, $headers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +161,7 @@ function cache_set($cid, $data, $expire = 0, $headers = NULL) {
|
||||||
*/
|
*/
|
||||||
function cache_clear_all($cid = NULL, $wildcard = false) {
|
function cache_clear_all($cid = NULL, $wildcard = false) {
|
||||||
if (empty($cid)) {
|
if (empty($cid)) {
|
||||||
db_query("DELETE FROM {cache} WHERE expire <> 0");
|
db_query("DELETE FROM {cache} WHERE expire != %d AND expire < %d", CACHE_PERMANENT, time());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ($wildcard) {
|
if ($wildcard) {
|
||||||
|
@ -182,7 +190,7 @@ function page_set_cache() {
|
||||||
$data = gzencode($data, FORCE_GZIP);
|
$data = gzencode($data, FORCE_GZIP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cache_set($base_url . request_uri(), $data, 1, drupal_get_headers());
|
cache_set($base_url . request_uri(), $data, CACHE_TEMPORARY, drupal_get_headers());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,7 +169,7 @@ function archive_calendar($original = 0) {
|
||||||
|
|
||||||
$output .= "</table></div>\n\n";
|
$output .= "</table></div>\n\n";
|
||||||
|
|
||||||
cache_set("archive:calendar:$day-$month-$year", $output, 1);
|
cache_set("archive:calendar:$day-$month-$year", $output, CACHE_TEMPORARY);
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,7 +169,7 @@ function archive_calendar($original = 0) {
|
||||||
|
|
||||||
$output .= "</table></div>\n\n";
|
$output .= "</table></div>\n\n";
|
||||||
|
|
||||||
cache_set("archive:calendar:$day-$month-$year", $output, 1);
|
cache_set("archive:calendar:$day-$month-$year", $output, CACHE_TEMPORARY);
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
|
@ -593,9 +593,9 @@ function check_output($text, $format = FILTER_FORMAT_DEFAULT) {
|
||||||
$text = module_invoke($filter->module, 'filter', 'process', $filter->delta, $format, $text);
|
$text = module_invoke($filter->module, 'filter', 'process', $filter->delta, $format, $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store in cache.
|
// Store in cache with a minimum expiration time of 1 day.
|
||||||
if ($cache) {
|
if ($cache) {
|
||||||
cache_set($id, $text, 1);
|
cache_set($id, $text, time() + (60 * 60 * 24));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -593,9 +593,9 @@ function check_output($text, $format = FILTER_FORMAT_DEFAULT) {
|
||||||
$text = module_invoke($filter->module, 'filter', 'process', $filter->delta, $format, $text);
|
$text = module_invoke($filter->module, 'filter', 'process', $filter->delta, $format, $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store in cache.
|
// Store in cache with a minimum expiration time of 1 day.
|
||||||
if ($cache) {
|
if ($cache) {
|
||||||
cache_set($id, $text, 1);
|
cache_set($id, $text, time() + (60 * 60 * 24));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in New Issue