bin = $bin; } public function get($cid) { return FALSE; } public function getMultiple(&$cids) { return array(); } public function set($cid, $data, $expire = CACHE_PERMANENT) { // We won't do anything here. } public function clear($cid = NULL, $wildcard = FALSE) { global $user; // Check that we really want to do a cache flush. if (!module_exists('varnish') || (variable_get('varnish_cache_clear', VARNISH_DEFAULT_CLEAR) == VARNISH_NO_CLEAR) || (!variable_get('varnish_flush_cron', 0) && !lock_may_be_available('cron'))) { return; } if (empty($cid) && variable_get('varnish_cache_clear', 1)) { if (variable_get('cache_lifetime', 0)) { // We store the time in the current user's $user->cache variable which // will be saved into the sessions bin by _drupal_session_write(). We // then simulate that the cache was flushed for this user by not // returning cached data that was cached before the timestamp. $user->cache = REQUEST_TIME; $cache_flush = variable_get('cache_flush_' . $this->bin, 0); if ($cache_flush == 0) { // This is the first request to clear the cache, start a timer. variable_set('cache_flush_' . $this->bin, REQUEST_TIME); } elseif (REQUEST_TIME > ($cache_flush + variable_get('cache_lifetime', 0))) { // Clear the cache for everyone, cache_lifetime seconds have // passed since the first request to clear the cache. varnish_purge_all_pages(); variable_set('cache_flush_' . $this->bin, 0); } } else { // No minimum cache lifetime, flush all temporary cache entries now. varnish_purge_all_pages(); } } else { if ($wildcard) { if ($cid == '*') { varnish_purge_all_pages(); } else { $host = _varnish_get_host(); $base = base_path(); $purge = $cid . '(.*)'; varnish_purge($host, '^' . $base . $purge . '$'); } } elseif (is_array($cid)) { varnish_expire_cache($cid); } else { varnish_expire_cache(array($cid)); } } } public function isEmpty() { return FALSE; } }