From 23082fe9d10007bed258a977b1d5f0173d5729c3 Mon Sep 17 00:00:00 2001 From: Nawawi Jamili Date: Mon, 30 May 2022 22:43:55 +0800 Subject: [PATCH] bump 21.08.11 - Fixed: Avoid calling Filesystem::close_buffer() if a process involved accessing a disk. - Fixed: Removed handling stale cache on shutdown. - Added: Garbage Collector Status -> Cleanup Stale Cache. - Improved: Collected stale cache will be handled by Garbage Collector. --- changelog.txt | 6 + dist/docket-cache.zip | Bin 192628 -> 193751 bytes docket-cache.php | 4 +- includes/admin/config.php | 26 ++-- includes/cache.php | 229 ++++++++++++------------------------ includes/object-cache.php | 2 +- includes/src/Command.php | 10 +- includes/src/Constans.php | 2 +- includes/src/Crawler.php | 2 +- includes/src/Event.php | 163 +++++++++++++++++++++---- includes/src/Filesystem.php | 34 ++++-- includes/src/PostCache.php | 7 +- includes/src/ReqAction.php | 10 +- includes/src/View.php | 4 +- languages/docket-cache.pot | 124 ++++++++++--------- readme.txt | 8 +- 16 files changed, 366 insertions(+), 265 deletions(-) diff --git a/changelog.txt b/changelog.txt index 6c5636e..d6e87be 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,9 @@ += v21.08.11 (2022-05-30) = +- Fixed: Avoid calling Filesystem::close_buffer() if a process involved accessing a disk. +- Fixed: Removed handling stale cache on shutdown. +- Added: Garbage Collector Status -> Cleanup Stale Cache. +- Improved: Collected stale cache will be handled by Garbage Collector. + = v21.08.10 (2022-05-20) = - Changed: Disable "CHUNKCACHEDIR" by default. Let's users choose it depending on their hosting environment. diff --git a/dist/docket-cache.zip b/dist/docket-cache.zip index af44ed4efbab6d1fa6b665a79172a7b6ec66fb00..9a11e8d4fef4856ec9ad5c776d9c809f95e8df41 100644 GIT binary patch delta 75092 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%0DJf7coi%e|AWz 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

A3tedH4#$Ai6Z&VeCLBl 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 azCc>8HiCj*ey_Dxz5qyq^hRjDBK{9Nb{j?j delta 74229 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 ~Ues1>C_dt9N)OZ-x1p0XFa2E>2Y^iKP$@)2 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 aGW@?*!ciL#C$g2~Z9v?lC#t}JK>Z)owSo@- diff --git a/docket-cache.php b/docket-cache.php index d5ee916..f868baf 100644 --- a/docket-cache.php +++ b/docket-cache.php @@ -12,8 +12,8 @@ * @wordpress-plugin * Plugin Name: Docket Cache * Plugin URI: https://docketcache.com/?utm_source=wp-plugins&utm_campaign=plugin-uri&utm_medium=wp-dash - * Version: 21.08.10 - * VerPrev: 21.08.09 + * Version: 21.08.11 + * VerPrev: 21.08.10 * Description: A persistent object cache stored as a plain PHP code, accelerates caching with OPcache backend. * GitHub Plugin URI: https://github.com/nawawi/docket-cache * Author: Nawawi Jamili diff --git a/includes/admin/config.php b/includes/admin/config.php index af291c3..9f5aea1 100644 --- a/includes/admin/config.php +++ b/includes/admin/config.php @@ -470,18 +470,6 @@ - - tooltip('chunkcachedir'); ?> - - config_select_bool('chunkcachedir'); ?> - - - - tooltip('flush_stalecache'); ?> - - config_select_bool('flush_stalecache'); ?> - - tooltip('maxfile'); ?> @@ -512,7 +500,7 @@ - tooltip('maxsize_disk'); ?> + tooltip('maxsize_disk'); ?> + + tooltip('chunkcachedir'); ?> + + config_select_bool('chunkcachedir'); ?> + + + + tooltip('flush_stalecache'); ?> + + config_select_bool('flush_stalecache'); ?> + + diff --git a/includes/cache.php b/includes/cache.php index 77a8276..71a8d8e 100644 --- a/includes/cache.php +++ b/includes/cache.php @@ -174,6 +174,13 @@ class WP_Object_Cache */ private $wp_start_timestamp = 0; + /** + * Stalecache status. + * + * @var bool + */ + private $is_stalecache = false; + /** * List of stale cache to remove. * @@ -353,7 +360,7 @@ public function set($key, $data, $group = 'default', $expire = 0) } // from invalidate cache - if ($this->cf()->is_dctrue('FLUSH_STALECACHE')) { + if ($this->is_stalecache) { $this->dc_stalecache_filter($key, $group); } @@ -782,7 +789,7 @@ private function flush_filtered_groups($hook, $args) $keys = array_unique($keys); foreach ($keys as $key) { $this->delete($key, $group); - $this->dc_log('flush', 'internalproc-'.$this->item_hash(__FUNCTION__), $group.':'.$key); + $this->dc_log('flush', '000000000000-'.$this->item_hash(__FUNCTION__), $group.':'.$key); } } @@ -833,7 +840,7 @@ private function maybe_expire($group, $expire = 0, $key = '') } } - // if 0 let gc handle it by comparing file mtime. + // if 0 let's gc handle it by comparing file mtime. return $expire; } @@ -1019,22 +1026,22 @@ private function dc_flush() $dir = $this->cache_path; $is_timeout = false; $cnt = $this->fs()->cachedir_flush($dir, false, $is_timeout); - $logroup = $this->item_hash(__FUNCTION__); + $logkey = '000000000000-'.$this->item_hash(__FUNCTION__); if ($is_timeout) { - $this->dc_log('err', 'internalproc-'.$logroup, 'Process aborted. Reached maximum execution time. Total cache flushed: '.$cnt); + $this->dc_log('err', $logkey, 'Process aborted. Reached maximum execution time. Total cache flushed: '.$cnt); return false; } if (false === $cnt) { - $this->dc_log('err', 'internalproc-'.$logroup, 'Cache could not be flushed'); + $this->dc_log('err', $logkey, 'Cache could not be flushed'); return false; } if ($cnt > 0) { - $this->dc_log('flush', 'internalproc-'.$logroup, 'Total cache flushed: '.$cnt); + $this->dc_log('flush', $logkey, 'Total cache flushed: '.$cnt); } return true; @@ -1121,7 +1128,6 @@ public function dc_remove_group_match($group) if ($grp === substr($match, 0, \strlen($grp))) { $this->fs()->unlink($fx, true); $this->dc_log('flush', $this->get_item_hash($fx), $match.':*'); - unset($this->cache[$match]); ++$total; @@ -1131,7 +1137,6 @@ public function dc_remove_group_match($group) if ($group === substr($match, 0, \strlen($group))) { $this->fs()->unlink($fx, true); $this->dc_log('flush', $this->get_item_hash($fx), $match.':*'); - unset($this->cache[$match]); ++$total; @@ -1189,130 +1194,25 @@ private function dc_stalecache_filter($key, $group) */ public function add_stalecache($lists) { - if ($this->cf()->is_dctrue('FLUSH_STALECACHE') && !empty($lists) && \is_array($lists)) { + if ($this->is_stalecache && !empty($lists) && \is_array($lists)) { $this->stalecache_list = array_merge($this->stalecache_list, $lists); } } - /** - * flush_stalecache. - */ - private function flush_stalecache() - { - $total = 0; - if (!$this->fs()->is_docketcachedir($this->cache_path)) { - return $total; - } - - $slowdown = 0; - $pattern = '@^([a-z0-9]{12})\-([a-z0-9]{12})\.php$@'; - foreach ($this->fs()->scanfiles($this->cache_path, null, $pattern) as $object) { - if ($object->isFile()) { - $fx = $object->getPathName(); - $logprefix = $this->get_item_hash($fx); - - $data = $this->fs()->cache_get($fx); - if (!empty($data) && !empty($data['key']) && !empty($data['group'])) { - unset($data['data']); - - foreach ($this->stalecache_list as $id => $key) { - $do_flush = false; - - if (false !== strpos($data['key'], 'wc_cache_') && 'wc_cache:' === substr($key, 0, 9) && preg_match('@^wc_cache_([0-9\. ]+)_.*@', $data['key'], $mm)) { - list($prefix, $group, $usec) = explode(':', $key); - if ($usec === $mm[1]) { - $do_flush = true; - } else { - $usec1 = nwdcx_microtimetofloat($usec); - $usec2 = nwdcx_microtimetofloat($mm[1]); - if ($usec1 > $usec2) { - $do_flush = true; - } - } - - // group = from cache file, key = list key - } elseif (false !== strpos($data['group'], 'docketcache-post-') && false !== strpos($key, 'docketcache-post-')) { - if ($key === $data['group']) { - $do_flush = true; - } else { - $usec1 = str_replace('docketcache-post-', '', $key); - $usec2 = str_replace('docketcache-post-', '', $data['group']); - if ($usec1 > $usec2) { - $do_flush = true; - } - } - } elseif (false !== strpos($key, 'last_changed:') && @preg_match('@(.*):([a-z0-9]{32}):([0-9\. ]+)$@', $data['key'], $mm)) { - list($prefix, $group, $usec) = explode(':', $key); - if ($group === $data['group']) { - $usec1 = nwdcx_microtimetofloat($usec); - $usec2 = nwdcx_microtimetofloat($mm[3]); - if ($usec1 > $usec2) { - $do_flush = true; - } - } - } elseif (false !== strpos($key, 'after:') && @preg_match('@(.*):([a-z0-9]{32}):([0-9\. ]+)$@', $data['key'], $mm)) { - list($prefix, $group, $usec, $abc) = explode(':', $key); - if ($group === $data['group'] && $abc === $mm[1]) { - $usec1 = nwdcx_microtimetofloat($usec); - $usec2 = nwdcx_microtimetofloat($mm[3]); - if ($usec1 > $usec2) { - $do_flush = true; - } - } - } - - if ($do_flush) { - $nwdcx_suppresserrors = nwdcx_suppresserrors(true); - // use native unlink since it is a junk file. - if (@unlink($fx)) { - $this->dc_log('flush', $logprefix, 'stale-cache: '.$data['group'].':'.$data['key']); - } - nwdcx_suppresserrors($nwdcx_suppresserrors); - break; // found and break foreach2 - } - - if ($this->max_execution_time > 0 && (microtime(true) - $this->wp_start_timestamp) > $this->max_execution_time) { - break 2; // stop scanfiles - } - - if ($slowdown > 10) { - $slowdown = 0; - usleep(1000); - } - } // foreach2 - } - unset($data); - } // foreach1 - - if ($slowdown > 10) { - $slowdown = 0; - usleep(5000); - } - - ++$slowdown; - - if ($this->max_execution_time > 0 && (microtime(true) - $this->wp_start_timestamp) > $this->max_execution_time) { - break; - } - } - - return $total; - } - /** * dc_get. */ private function dc_get($key, $group, $is_raw = false) { $file = $this->get_file_path($key, $group); - $index = $this->get_item_hash($file); + $logkey = $this->get_item_hash($file); $data = $this->fs()->cache_get($file); if (false === $data) { if (!$this->skip_stats($group)) { ++$this->cache_misses; - $this->dc_log('miss', $index, $group.':'.$key); + $this->dc_log('miss', $logkey, $group.':'.$key); } return false; @@ -1320,7 +1220,7 @@ private function dc_get($key, $group, $is_raw = false) $is_timeout = false; if (!empty($data['timeout']) && $this->fs()->valid_timestamp($data['timeout']) && time() >= $data['timeout']) { - $this->dc_log('exp', $this->get_item_hash($file), $group.':'.$key); + $this->dc_log('exp', $logkey, $group.':'.$key); $this->fs()->unlink($file, false); $is_timeout = true; } @@ -1329,14 +1229,14 @@ private function dc_get($key, $group, $is_raw = false) if (!$is_timeout && !empty($this->cache_maxttl) && !empty($data['timestamp']) && $this->fs()->valid_timestamp($data['timestamp'])) { $maxttl = time() - $this->cache_maxttl; if ($data['timestamp'] < $maxttl) { - $this->dc_log('exp', $this->get_item_hash($file), $group.':'.$key); + $this->dc_log('exp', $logkey, $group.':'.$key); $this->fs()->unlink($file, true); // true = delete it instead of truncate } } if (!$this->skip_stats($group)) { ++$this->cache_hits; - $this->dc_log('hit', $index, $group.':'.$key); + $this->dc_log('hit', $logkey, $group.':'.$key); } // If the transient does not exist, does not have a value, or has expired, then the return value will be false. @@ -1365,11 +1265,12 @@ private function dc_get($key, $group, $is_raw = false) */ private function dc_code($file, $arr) { - $fname = $this->get_item_hash($file); + $logkey = $this->get_item_hash($file); + $logpref = __FUNCTION__.'():'; $data = $this->fs()->export_var($arr, $error); if (false === $data) { - $this->dc_log('err', $fname, 'Failed to export var: '.$error); + $this->dc_log('err', $logkey, $logpref.' Failed to export var -> '.$error); return false; } @@ -1382,7 +1283,7 @@ private function dc_code($file, $arr) } if (-1 === $stat) { - $this->dc_log('err', $fname, 'Failed to write'); + $this->dc_log('err', $logkey, $logpref.' Failed to write'); return false; } @@ -1402,12 +1303,13 @@ private function dc_save($cache_key, $data, $group = 'default', $expire = 0, $ke return false; } - $fname = $group.':'.$cache_key; + $logkey = $this->item_hash($group).'-'.$this->item_hash($cache_key); + $logpref = __FUNCTION__.'():'; // skip save to disk, return true; if ('' === $data && $this->fs()->is_transient($group)) { if ($this->is_dev) { - $this->dc_log('debug', $fname, __FUNCTION__.'(): bypass-data-empty'); + $this->dc_log('debug', $logkey, $group.':'.$cache_key.' '.$logpref.' Data empty'); } return true; @@ -1451,7 +1353,7 @@ private function dc_save($cache_key, $data, $group = 'default', $expire = 0, $ke $data_serialized = serialize($data); $len = \strlen(serialize($data_serialized)); if ($len >= $this->cache_maxsize) { - $this->dc_log('err', $fname, 'Object too large: '.$len.'/'.$this->cache_maxsize); + $this->dc_log('err', $logkey, $group.':'.$cache_key.' '.$logpref.' Object too large -> '.$len.'/'.$this->cache_maxsize); return false; } @@ -1459,7 +1361,7 @@ private function dc_save($cache_key, $data, $group = 'default', $expire = 0, $ke // since timeout set to timestamp. if (0 === $expire && !empty($key) && @is_file($file) && $this->is_data_uptodate($key, $group, $data, $data_serialized)) { if ($this->is_dev) { - $this->dc_log('debug', $fname, __FUNCTION__.'()->nochanges'); + $this->dc_log('debug', $logkey, $group.':'.$cache_key.' '.$logpref.' No changes'); } return false; @@ -1505,7 +1407,7 @@ private function dc_save($cache_key, $data, $group = 'default', $expire = 0, $ke if (true === $this->dc_code($file, $meta)) { if ($this->is_dev) { - $this->dc_log('debug', $group.':'.$cache_key, __FUNCTION__.'()->todisk'); + $this->dc_log('debug', $logkey, $group.':'.$cache_key.' '.$logpref.' Storing to disk'); } return true; @@ -1540,10 +1442,12 @@ private function dc_update($cache_key, $data, $group) private function dc_precache_load($hash) { static $is_done = false; + $logkey = $this->item_hash('docketcache-precache').'-'.$this->item_hash(__FUNCTION__); + $logpref = __FUNCTION__.'():'; if ($is_done) { if ($this->is_dev) { - $this->dc_log('debug', 'internalproc-'.$this->item_hash(__FUNCTION__), 'Precache Ignored: Already loaded'); + $this->dc_log('debug', $logkey, $logpref.' Precache Ignored: Already loaded'); } return; @@ -1558,7 +1462,7 @@ private function dc_precache_load($hash) } if ($this->is_dev) { - $this->dc_log('debug', 'internalproc-'.$this->item_hash(__FUNCTION__), 'Precache Load: Start'); + $this->dc_log('debug', $logkey, $logpref.' Precache Load: Start'); } $this->precache_loaded[$hash] = $keys; @@ -1592,7 +1496,7 @@ private function dc_precache_load($hash) } if ($this->is_dev) { - $this->dc_log('debug', 'internalproc-'.$this->item_hash(__FUNCTION__), 'Precache Load: End -> '.\count($cached)); + $this->dc_log('debug', $logkey, $logpref.' Precache Load: End -> '.\count($cached)); } unset($keys, $cached); @@ -1613,8 +1517,11 @@ private function dc_precache_set($hash) $slowdown = 0; $cnt_max = 0; + $logkey = $this->item_hash('docketcache-precache').'-'.$this->item_hash(__FUNCTION__); + $logpref = __FUNCTION__.'():'; + if ($this->is_dev) { - $this->dc_log('debug', 'internalproc-'.$this->item_hash(__FUNCTION__), 'Precache Set: Start'); + $this->dc_log('debug', $logkey, $logpref.' Precache Set: Start'); } foreach ($this->precache as $cache_group => $cache_keys) { @@ -1631,7 +1538,7 @@ private function dc_precache_set($hash) if ($slowdown > 10) { $slowdown = 0; - usleep(5000); + usleep(100); } ++$slowdown; @@ -1645,20 +1552,13 @@ private function dc_precache_set($hash) } if ($this->is_dev) { - $this->dc_log('debug', 'internalproc-'.$this->item_hash(__FUNCTION__), 'Precache Set: End -> '.\count($data)); + $this->dc_log('debug', $logkey, $logpref.' Precache Set: End -> '.\count($data)); } if (!empty($data)) { - /*if ($this->is_data_uptodate($hash, $group, $data)) { - if ($this->is_dev) { - $this->dc_log('debug', $group.':'.$hash, __FUNCTION__.'()->nochanges'); - } - return; - }*/ - if (!empty($this->precache_loaded) && md5(serialize($this->precache_loaded[$hash])) === md5(serialize($data))) { if ($this->is_dev) { - $this->dc_log('debug', $group.':'.$hash, __FUNCTION__.'()->nochanges'); + $this->dc_log('debug', $logkey, $logpref.' '.$hash.' No changes'); } return; @@ -1679,18 +1579,29 @@ private function dc_precache() return; } - $logprefix = 'internalproc-'.$this->item_hash(__FUNCTION__); + $logkey = $this->item_hash('docketcache-precache').'-'.$this->item_hash(__FUNCTION__); + $logpref = __FUNCTION__.'():'; + $req_uri = $_SERVER['REQUEST_URI']; $dostrip = !empty($_SERVER['QUERY_STRING']); - if ($dostrip && !empty($_GET) && (isset($_GET['docketcache_ping']) || isset($_GET['doing_wp_cron']) || isset($_GET['_fs_blog_admin']) || isset($_GET['wc-ajax']) || !empty($_GET['_wpnonce']) || (!empty($_GET['action']) && false === strpos($req_uri, '/wp-admin/post.php?post=')) || !empty($_GET['message']))) { - $this->dc_log('info', $logprefix, 'docketcache-precache: bypass-rules-1'); + $intersect_key = [ + 'docketcache_ping' => 1, + 'doing_wp_cron' => 1, + 'wc-ajax' => 1, + '_fs_blog_admin' => 1, + 'action' => 1, + 'message' => 1, + ]; + + if ($dostrip && !empty($_GET) && array_intersect_key($intersect_key, $_GET)) { + $this->dc_log('info', $logkey, $logpref.' Bypass GET key'); return; } if (false !== strpos($req_uri, '/wp-json/') || false !== strpos($req_uri, '/wp-admin/admin-ajax.php') || false !== strpos($req_uri, '/xmlrpc.php') || false !== strpos($req_uri, '/wp-cron.php') || false !== strpos($req_uri, '/robots.txt') || false !== strpos($req_uri, '/favicon.ico')) { - $this->dc_log('info', $logprefix, 'docketcache-precache: bypass-rules-2'); + $this->dc_log('info', $logkey, $logpref.' Bypass Request'); return; } @@ -1730,20 +1641,20 @@ private function dc_precache() */ public function dc_close() { + $this->fs()->close_buffer(); static $is_done = false; - // only run one time if we can go into background - if ($this->fs()->close_buffer() && !$is_done) { - if ($this->is_precache && !empty($this->precache_hashkey)) { + if (!$is_done) { + if ($this->is_precache && !empty($this->precache_hashkey) && $this->fs()->close_buffer()) { $this->dc_precache_set($this->precache_hashkey); } - if ($this->cf()->is_dctrue('FLUSH_STALECACHE') && !empty($this->stalecache_list)) { - $this->flush_stalecache(); + if ($this->is_stalecache && !empty($this->stalecache_list)) { + $this->add('items', $this->stalecache_list, 'docketcache-stalecache', 3600); } - } - $is_done = true; + $is_done = true; + } } /** @@ -2000,11 +1911,23 @@ function () { ); } + // stalecache + $this->is_stalecache = $this->cf()->is_dctrue('FLUSH_STALECACHE'); + + // load precache $this->is_precache = $this->cf()->is_dctrue('PRECACHE'); if ($this->is_precache) { $this->precache_maxlist = (int) $this->cf()->dcvalue('PRECACHE_MAXLIST'); $this->dc_precache(); } + + // maxfile + $maxfile = (int) $this->fs()->sanitize_maxfile($this->cf()->dcvalue('MAXFILE')); + $numfile = (int) $this->get('numfile', 'docketcache-gc'); + $numfile = $numfile > 0 ? $numfile : 0; + if ($numfile > $maxfile) { + wp_suspend_cache_addition(true); + } } } diff --git a/includes/object-cache.php b/includes/object-cache.php index eeed973..2d0d4b7 100644 --- a/includes/object-cache.php +++ b/includes/object-cache.php @@ -3,7 +3,7 @@ * @wordpress-plugin * Plugin Name: Docket Cache Drop-in * Plugin URI: https://wordpress.org/plugins/docket-cache/ - * Version: 21.08.10 + * Version: 21.08.11 * Description: A persistent object cache stored as a plain PHP code, accelerates caching with OPcache backend. * Author: Nawawi Jamili * Author URI: https://docketcache.com diff --git a/includes/src/Command.php b/includes/src/Command.php index 0b94b1c..bff084e 100644 --- a/includes/src/Command.php +++ b/includes/src/Command.php @@ -496,10 +496,18 @@ public function run_gc() WP_CLI::line($this->title(__('Cleanup Cache File Limit', 'docket-cache'), $pad).$collect->cleanup_maxfile); WP_CLI::line($this->title(__('Cleanup Cache Disk Limit', 'docket-cache'), $pad).$collect->cleanup_maxdisk); - if ($this->pt->get_precache_maxfile() > 0) { + if ($collect->cleanup_expire > 0) { + WP_CLI::line($this->title(__('Cleanup Cache Expire', 'docket-cache'), $pad).$collect->cleanup_expire); + } + + if ($this->pt->get_precache_maxfile() > 0 && $collect->cleanup_precache_maxfile > 0) { WP_CLI::line($this->title(__('Cleanup Precache Limit', 'docket-cache'), $pad).$collect->cleanup_precache_maxfile); } + if ($this->pt->cf()->is_dctrue('FLUSH_STALECACHE') && $collect->cleanup_stalecache > 0) { + WP_CLI::line($this->title(__('Cleanup Stale Cache', 'docket-cache'), $pad).$collect->cleanup_stalecache); + } + WP_CLI::line(str_repeat('-', $pad).':'.str_repeat('-', 10)); WP_CLI::line($this->title(__('Total Cache Cleanup', 'docket-cache'), $pad).$collect->cache_cleanup); WP_CLI::line($this->title(__('Total Cache Ignored', 'docket-cache'), $pad).$collect->cache_ignore); diff --git a/includes/src/Constans.php b/includes/src/Constans.php index c80562d..2dc2d56 100644 --- a/includes/src/Constans.php +++ b/includes/src/Constans.php @@ -274,7 +274,7 @@ public function register_default() $this->maybe_define($this->px('PRECACHE'), false); // precache maxfile: < 1, false, null = unlimited - $this->maybe_define($this->px('PRECACHE_MAXFILE'), 0); + $this->maybe_define($this->px('PRECACHE_MAXFILE'), 1000); // precache maxlist $this->maybe_define($this->px('PRECACHE_MAXLIST'), 1000); diff --git a/includes/src/Crawler.php b/includes/src/Crawler.php index dee5b0e..13c6f48 100644 --- a/includes/src/Crawler.php +++ b/includes/src/Crawler.php @@ -14,7 +14,7 @@ final class Crawler { - private static $version = '21.08.10'; + private static $version = '21.08.11'; public static $send_cookie = false; private static function default_args($param = []) diff --git a/includes/src/Event.php b/includes/src/Event.php index 3e2e6ff..74a26ef 100644 --- a/includes/src/Event.php +++ b/includes/src/Event.php @@ -16,11 +16,15 @@ final class Event { private $pt; private $is_optimizedb; + private $max_execution_time = 0; + private $wp_start_timestamp = 0; public function __construct(Plugin $pt) { $this->pt = $pt; $this->is_optimizedb = false; + $this->wp_start_timestamp = \defined('WP_START_TIMESTAMP') ? WP_START_TIMESTAMP : microtime(true); + $this->max_execution_time = $this->pt->get_max_execution_time(); } /** @@ -190,6 +194,8 @@ public function watchproc() */ public function garbage_collector($force = false) { + static $is_done = false; + $maxfileo = (int) $this->pt->get_cache_maxfile(); $maxfile = $maxfileo; @@ -228,33 +234,41 @@ public function garbage_collector($force = false) 'cleanup_maxfile' => 0, 'cleanup_precache_maxfile' => 0, 'cleanup_maxttl' => 0, + 'cleanup_expire' => 0, 'cleanup_maxdisk' => 0, 'cache_file' => 0, 'cache_cleanup' => 0, 'cache_ignore' => 0, 'cleanup_failed' => 0, + 'cleanup_stalecache' => 0, ]; - $max_execution_time = $this->pt->get_max_execution_time(); - if ($this->pt->co()->lockproc('garbage_collector', time() + $max_execution_time + 10)) { + clearstatcache(); + if (!$this->pt->is_docketcachedir($this->pt->cache_path) || @is_file(DOCKET_CACHE_CONTENT_PATH.'/.object-cache-flush.txt')) { return $collect; } - clearstatcache(); - if (!$this->pt->is_docketcachedir($this->pt->cache_path) || @is_file(DOCKET_CACHE_CONTENT_PATH.'/.object-cache-flush.txt')) { + if ($is_done || $this->pt->co()->lockproc('garbage_collector', time() + $this->max_execution_time + 10)) { return $collect; } + $stalecache_list = []; + if ($this->pt->cf()->is_dctrue('FLUSH_STALECACHE')) { + $stalecache_list = wp_cache_get('items', 'docketcache-stalecache'); + wp_cache_delete('items', 'docketcache-stalecache'); + } + $delay = $force ? 650 : 5000; wp_suspend_cache_addition(true); $fsizetotal = 0; - $cnt = 0; + $fcnt = 0; $pcnt = 0; $slowdown = 0; + $slowdown2 = 0; foreach ($this->pt->scanfiles($this->pt->cache_path) as $object) { - if ($max_execution_time > 0 && \defined('WP_START_TIMESTAMP') && (microtime(true) - WP_START_TIMESTAMP) > $max_execution_time) { + if ($this->max_execution_time > 0 && (microtime(true) - $this->wp_start_timestamp) > $this->max_execution_time) { break; } @@ -283,6 +297,10 @@ public function garbage_collector($force = false) continue; } + if ($this->pt->cf()->is_dctrue('DEV') && 'cli' === \PHP_SAPI) { + echo 'run-gc: '.$fx."\n"; + } + if ($fm >= $ft && (0 === $fs || 'dump_' === substr($fn, 0, 5))) { $this->pt->unlink($fx, true); @@ -308,7 +326,10 @@ public function garbage_collector($force = false) } } - if ($cnt >= $maxfile) { + if ($fcnt >= $maxfile) { + // trigger WP_Object_Cache + wp_cache_set('numfile', $fcnt, 'docketcache-gc', 60); + $this->pt->unlink($fx, true); if ($force && @is_file($fx)) { @@ -334,8 +355,9 @@ public function garbage_collector($force = false) $data = $this->pt->cache_get($fx); $is_timeout = false; if (false !== $data) { + unset($data['data']); + $is_timeout = !empty($data['timeout']) && $this->pt->valid_timestamp($data['timeout']) ? true : false; - $docon = false; if ($is_timeout) { if ($fm >= (int) $data['timeout']) { $this->pt->unlink($fx, true); @@ -345,8 +367,8 @@ public function garbage_collector($force = false) } unset($data); - $docon = true; - ++$collect->cleanup_maxttl; + ++$collect->cleanup_expire; + continue; } } else { if (!empty($data['timestamp']) && $this->pt->valid_timestamp($data['timestamp']) && $maxttl > $data['timestamp']) { @@ -357,16 +379,11 @@ public function garbage_collector($force = false) } unset($data); - $docon = true; ++$collect->cleanup_maxttl; + continue; } } - - if ($docon) { - continue; - } } - unset($data); // no timeout data or 0 if (false === $is_timeout && $maxttl > 0 && $maxttl > $ft) { @@ -380,20 +397,119 @@ public function garbage_collector($force = false) continue; } - ++$cnt; + // stalecache + if ((!empty($stalecache_list) && \is_array($stalecache_list)) && !empty($data) && !empty($data['key']) && !empty($data['group']) && 'docketcache-stalecache' !== $data['group']) { + $collect->cleanup_stalecache += $this->flush_stalecache($fx, $data, $stalecache_list); + if ($collect->cleanup_stalecache > 0) { + continue; + } + } + unset($data); + + ++$fcnt; ++$collect->cache_file; - } + } // foreach1 - $collect->cache_cleanup = $collect->cleanup_maxttl + $collect->cleanup_maxfile + $collect->cleanup_maxdisk + $collect->cleanup_precache_maxfile; + $collect->cache_cleanup = $collect->cleanup_maxttl + $collect->cleanup_expire + $collect->cleanup_maxfile + $collect->cleanup_maxdisk + $collect->cleanup_precache_maxfile + $collect->cleanup_stalecache; wp_suspend_cache_addition(false); $this->pt->co()->lockreset('garbage_collector'); $this->pt->cx()->delay_expire(); + $is_done = true; + + // reset + wp_cache_delete('numfile', 'docketcache-gc'); + return $collect; } + /** + * flush_stalecache. + */ + public function flush_stalecache($file, $data, $stalecache_list) + { + $total = 0; + + if (!is_file($file) || empty($data) || empty($data['key']) || empty($data['group']) || empty($stalecache_list) || !\is_array($stalecache_list)) { + return $total; + } + + $slowdown = 0; + foreach ($stalecache_list as $id => $key) { + $do_flush = false; + + if (false !== strpos($data['key'], 'wc_cache_') && 'wc_cache:' === substr($key, 0, 9) && preg_match('@^wc_cache_([0-9\. ]+)_.*@', $data['key'], $mm)) { + list($prefix, $group, $usec) = explode(':', $key); + if ($usec === $mm[1]) { + $do_flush = true; + } else { + $usec1 = nwdcx_microtimetofloat($usec); + $usec2 = nwdcx_microtimetofloat($mm[1]); + if ($usec1 > $usec2) { + $do_flush = true; + } + } + + // group = from cache file, key = list key + } elseif (false !== strpos($data['group'], 'docketcache-post-') && false !== strpos($key, 'docketcache-post-')) { + if ($key === $data['group']) { + $do_flush = true; + } else { + $usec1 = str_replace('docketcache-post-', '', $key); + $usec2 = str_replace('docketcache-post-', '', $data['group']); + if ($usec1 > $usec2) { + $do_flush = true; + } + } + } elseif (false !== strpos($key, 'last_changed:') && @preg_match('@(.*):([a-z0-9]{32}):([0-9\. ]+)$@', $data['key'], $mm)) { + list($prefix, $group, $usec) = explode(':', $key); + if ($group === $data['group']) { + $usec1 = nwdcx_microtimetofloat($usec); + $usec2 = nwdcx_microtimetofloat($mm[3]); + if ($usec1 > $usec2) { + $do_flush = true; + } + } + } elseif (false !== strpos($key, 'after:') && @preg_match('@(.*):([a-z0-9]{32}):([0-9\. ]+)$@', $data['key'], $mm)) { + list($prefix, $group, $usec, $abc) = explode(':', $key); + if ($group === $data['group'] && $abc === $mm[1]) { + $usec1 = nwdcx_microtimetofloat($usec); + $usec2 = nwdcx_microtimetofloat($mm[3]); + if ($usec1 > $usec2) { + $do_flush = true; + } + } + } + + if ($do_flush) { + $nwdcx_suppresserrors = nwdcx_suppresserrors(true); + // use native unlink since it is a junk file. + if (@unlink($file)) { + unset($stalecache_list[$id]); + + if ($this->pt->cf()->is_dctrue('DEV') && 'cli' === \PHP_SAPI) { + echo 'run-gc:stale-cache: '.$file."\n"; + } + + ++$total; + } + nwdcx_suppresserrors($nwdcx_suppresserrors); + break; // found and break foreach + } + + if ($slowdown > 10) { + $slowdown = 0; + usleep(5000); + } + + ++$slowdown; + } + + return $total; + } + /** * optimizedb. */ @@ -416,7 +532,7 @@ public function optimizedb() $dbname = $wpdb->dbname; $tables = $wpdb->get_results('SHOW TABLES FROM '.$dbname, ARRAY_A); if (!empty($tables) && \is_array($tables)) { - $max_execution_time = $this->pt->get_max_execution_time(); + $max_execution_time = $this->max_execution_time; if ($max_execution_time < 300) { $max_execution_time = 300; } @@ -424,7 +540,7 @@ public function optimizedb() $tbl = $table['Tables_in_'.$dbname]; $wpdb->query('OPTIMIZE TABLE `'.$tbl.'`'); - if ($max_execution_time > 0 && \defined('WP_START_TIMESTAMP') && (microtime(true) - WP_START_TIMESTAMP) > $max_execution_time) { + if ($this->max_execution_time > 0 && (microtime(true) - $this->wp_start_timestamp) > $this->max_execution_time) { break; } } @@ -464,6 +580,9 @@ public function delete_expired_transients_db() */ public function clear_unknown_cron() { + // let's wp handles it. + return; + if (!wp_using_ext_object_cache()) { return; } @@ -476,7 +595,7 @@ public function clear_unknown_cron() foreach ($crons as $time => $cron) { foreach ($cron as $hook => $dings) { if (!has_action($hook)) { - //wp_clear_scheduled_hook($hook); + wp_clear_scheduled_hook($hook); } } } diff --git a/includes/src/Filesystem.php b/includes/src/Filesystem.php index ab925e8..fed1339 100644 --- a/includes/src/Filesystem.php +++ b/includes/src/Filesystem.php @@ -58,8 +58,8 @@ public function fastcgi_close() */ public function close_buffer() { - if (!@ob_get_level()) { - return $this->fastcgi_close(); + if (!@ob_get_level() && $this->fastcgi_close()) { + return true; } return false; @@ -392,7 +392,7 @@ public function export_var($data, &$error = '') $data = var_export($data, 1); $data = str_replace('stdClass::__set_state', '(object)', $data); } else { - $this->log('err', 'internalproc-internalfunc', 'export_var: '.$error); + $this->log('err', '000000000000-000000000000', 'export_var: '.$error); return false; } @@ -771,8 +771,10 @@ public function opcache_filecache_flush($file) */ public function opcache_filecache_reset() { + static $is_done = false; + $fcdata = $this->opcache_filecache_only(); - if (!empty($fcdata)) { + if (!$is_done && !empty($fcdata)) { $dir = $fcdata['file_cache']; $cnt = 0; $max_execution_time = $this->get_max_execution_time(); @@ -802,6 +804,8 @@ public function opcache_filecache_reset() } } + $is_done = true; + return $cnt; } @@ -915,7 +919,8 @@ public function opcache_cleanup() add_action( 'shutdown', function () { - $this->close_buffer(); + // anything involve disk, don't go into background + //$this->close_buffer(); $this->opcache_reset(); }, \PHP_INT_MAX @@ -956,6 +961,12 @@ public function define_cache_path($cache_path) */ public function cachedir_flush($dir, $cleanup = false, &$is_timeout = false) { + static $is_done = false; + + if ($is_done) { + return 0; + } + clearstatcache(); $dir = nwdcx_normalizepath(realpath($dir)); @@ -1014,6 +1025,7 @@ public function cachedir_flush($dir, $cleanup = false, &$is_timeout = false) } wp_suspend_cache_addition(false); + $is_done = true; return $cnt; } @@ -1023,12 +1035,14 @@ public function cachedir_flush($dir, $cleanup = false, &$is_timeout = false) */ public function cache_size($dir) { + static $is_done = false; + $bytestotal = 0; $fsizetotal = 0; $filestotal = 0; clearstatcache(); - if ($this->is_docketcachedir($dir) && !@is_file(DOCKET_CACHE_CONTENT_PATH.'/.object-cache-flush.txt')) { + if (!$is_done && $this->is_docketcachedir($dir) && !@is_file(DOCKET_CACHE_CONTENT_PATH.'/.object-cache-flush.txt')) { // hardmax $maxfile = 999000; // 1000000 - 1000; $cnt = 0; @@ -1040,7 +1054,7 @@ public function cache_size($dir) $pattern = '@^([a-z0-9]{12})\-([a-z0-9]{12})\.php$@'; foreach ($this->scanfiles($dir, null, $pattern) as $object) { try { - if ($object->isFile() && 'dump_' !== substr($object->getFileName(), 0, 5)) { + if ($object->isFile()) { $fx = $object->getPathName(); if (!$this->remove_non_chunk_cache($dir, $fx)) { @@ -1083,6 +1097,10 @@ public function cache_size($dir) } } + $is_done = true; + + wp_cache_set('numfile', $filestotal, 'docketcache-gc', 60); + return [ 'timestamp' => time(), 'size' => $bytestotal, @@ -1215,7 +1233,7 @@ public function cache_get($file) $this->suspend_cache_file($file, $errmsg); } - $this->log('err', 'internalproc-internalfunc', 'cache_get: '.$error); + $this->log('err', '000000000000-000000000000', 'cache_get: '.$error); $data = false; } diff --git a/includes/src/PostCache.php b/includes/src/PostCache.php index 0922152..0e8a468 100644 --- a/includes/src/PostCache.php +++ b/includes/src/PostCache.php @@ -27,6 +27,7 @@ final class PostCache public $cache_func_expiry = 0; // let WP_Object_Cache::maybe_expire handles it public $stalecache_list = []; public $allow_posttype = ['post', 'page', 'attachment']; + public $blacklist_posttype = ['scheduled-action']; public $allow_posttype_all = false; public function __construct() @@ -239,7 +240,7 @@ public function invalidate_cache() private function allow_post_type($post_type) { - if ($this->allow_posttype_all) { + if ($this->allow_posttype_all && !\in_array($post_type, $this->blacklist_posttype)) { return true; } @@ -397,7 +398,9 @@ public function found_posts($found_posts, $query) public function stalecache_set() { if (!empty($this->stalecache_list) && \function_exists('wp_cache_add_stalecache')) { - wp_cache_add_stalecache($this->stalecache_list); + $key_last = array_key_last($this->stalecache_list); + $list = [$key_last => $this->stalecache_list[$key_last]]; + wp_cache_add_stalecache($list); } } } diff --git a/includes/src/ReqAction.php b/includes/src/ReqAction.php index edf973a..07cbabe 100644 --- a/includes/src/ReqAction.php +++ b/includes/src/ReqAction.php @@ -753,10 +753,18 @@ private function screen_notice() $gcmsg .= '

  • '.esc_html__('Cleanup Cache File Limit', 'docket-cache').''.$collect->cleanup_maxfile.'
  • '; $gcmsg .= '
  • '.esc_html__('Cleanup Cache Disk Limit', 'docket-cache').''.$collect->cleanup_maxdisk.'
  • '; - if ($this->pt->get_precache_maxfile() > 0) { + if ($collect->cleanup_expire > 0) { + $gcmsg .= '
  • '.esc_html__('Cleanup Cache Expire', 'docket-cache').''.$collect->cleanup_expire.'
  • '; + } + + if ($this->pt->get_precache_maxfile() > 0 && $collect->cleanup_precache_maxfile > 0) { $gcmsg .= '
  • '.esc_html__('Cleanup Precache Limit', 'docket-cache').''.$collect->cleanup_precache_maxfile.'
  • '; } + if ($this->pt->cf()->is_dctrue('FLUSH_STALECACHE') && $collect->cleanup_stalecache > 0) { + $gcmsg .= '
  • '.esc_html__('Cleanup Stale Cache', 'docket-cache').''.$collect->cleanup_stalecache.'
  • '; + } + $gcmsg .= '
  • '.esc_html__('Total Cache Cleanup', 'docket-cache').''.$collect->cache_cleanup.'
  • '; $gcmsg .= '
  • '.esc_html__('Total Cache Ignored', 'docket-cache').''.$collect->cache_ignore.'
  • '; $gcmsg .= '
  • '.esc_html__('Total Cache File', 'docket-cache').''.$collect->cache_file.'
  • '; diff --git a/includes/src/View.php b/includes/src/View.php index 929af02..efab105 100644 --- a/includes/src/View.php +++ b/includes/src/View.php @@ -614,8 +614,8 @@ private function tooltip($id) 'opcshutdown' => esc_html__('Flush OPcache when deactivate / uninstall.', 'docket-cache'), 'maxsize_disk' => esc_html__('Maximum size of the cache storage on disk. The garbage collector will remove the cache file to free up storage space.', 'docket-cache'), 'maxfile' => esc_html__('The maximum cache file can be stored on a disk. The cache file will free up by the garbage collector when triggered by WP Cron.', 'docket-cache'), - 'chunkcachedir' => esc_html__('Enable this option to chunk cache files into a smaller directory to avoid an excessive number of cache files in a single directory.', 'docket-cache'), - 'flush_stalecache' => esc_html__('Enable this option to immediately remove the stale cache abandoned by WordPress, WooCommerce and others after doing cache invalidation.', 'docket-cache'), + 'chunkcachedir' => esc_html__('Enable this option to chunk cache files into a smaller directory to avoid an excessive number of cache files in a single directory. Only enable this option if you have difficulty when manually clearing the cache or experience a slowdown when the cache becomes too large.', 'docket-cache'), + 'flush_stalecache' => esc_html__('Enable this option to immediately remove the stale cache abandoned by WordPress, WooCommerce and others after doing cache invalidation. By default, it will be removed by GC within 4 days. This option may cause exessive usage of I/O and CPU. Only enable this option if you require to keep storage space in check.', 'docket-cache'), 'limithttprequest' => esc_html__('Limit HTTP requests in WP Admin.', 'docket-cache'), 'httpheadersexpect' => esc_html__('By default, cURL sends the "Expect" header all the time which severely impacts performance. Enable this option, only send it if the body is larger than 1 MB.', 'docket-cache'), 'rtpostautosave' => esc_html__('WordPress by default automatically saves a draft every 1 minute when editing or create a new post. Changing this behaviour can reduce the usage of server resource.', 'docket-cache'), diff --git a/languages/docket-cache.pot b/languages/docket-cache.pot index 03689e5..277dcd1 100644 --- a/languages/docket-cache.pot +++ b/languages/docket-cache.pot @@ -2,14 +2,14 @@ # This file is distributed under the MIT. msgid "" msgstr "" -"Project-Id-Version: Docket Cache 21.08.10\n" +"Project-Id-Version: Docket Cache 21.08.11\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/docket-cache\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2022-05-19T18:31:55+00:00\n" +"POT-Creation-Date: 2022-05-30T13:40:11+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.5.0\n" "X-Domain: docket-cache\n" @@ -189,8 +189,8 @@ msgstr "" #: includes/admin/config.php:416 #: includes/admin/config.php:433 #: includes/admin/config.php:453 -#: includes/admin/config.php:504 -#: includes/admin/config.php:533 +#: includes/admin/config.php:492 +#: includes/admin/config.php:521 #: includes/admin/log.php:31 #: includes/src/View.php:427 msgid "Default" @@ -347,7 +347,7 @@ msgid "Every Minute" msgstr "" #: includes/admin/config.php:300 -#: includes/src/Event.php:58 +#: includes/src/Event.php:62 msgid "Every 5 Minutes" msgstr "" @@ -388,7 +388,7 @@ msgstr "" #: includes/admin/config.php:326 #: includes/src/Canopt.php:134 -#: includes/src/ReqAction.php:793 +#: includes/src/ReqAction.php:801 msgid "Trash Bin" msgstr "" @@ -455,23 +455,12 @@ msgid "Storage Options" msgstr "" #: includes/admin/config.php:474 -#: includes/admin/overview.php:177 -#: includes/src/Canopt.php:128 -msgid "Chunk Cache Directory" -msgstr "" - -#: includes/admin/config.php:480 -#: includes/src/Canopt.php:129 -msgid "Auto Remove Stale Cache" -msgstr "" - -#: includes/admin/config.php:486 #: includes/admin/overview.php:162 #: includes/src/Canopt.php:127 msgid "Cache Files Limit" msgstr "" -#: includes/admin/config.php:515 +#: includes/admin/config.php:503 #: includes/admin/overview.php:167 #: includes/src/Canopt.php:126 #: includes/src/Command.php:493 @@ -479,6 +468,17 @@ msgstr "" msgid "Cache Disk Limit" msgstr "" +#: includes/admin/config.php:532 +#: includes/admin/overview.php:177 +#: includes/src/Canopt.php:128 +msgid "Chunk Cache Directory" +msgstr "" + +#: includes/admin/config.php:538 +#: includes/src/Canopt.php:129 +msgid "Auto Remove Stale Cache" +msgstr "" + #: includes/admin/config.php:545 msgid "Admin Interface" msgstr "" @@ -1220,7 +1220,7 @@ msgid "Updating wp-config.php file successful" msgstr "" #: includes/src/Command.php:297 -#: includes/src/ReqAction.php:776 +#: includes/src/ReqAction.php:784 msgid "Failed to update wp-config.php file." msgstr "" @@ -1251,7 +1251,7 @@ msgid "The transient was flushed. Total cache flushed: %d" msgstr "" #: includes/src/Command.php:365 -#: includes/src/ReqAction.php:883 +#: includes/src/ReqAction.php:891 msgid "Advanced Post Cache could not be flushed." msgstr "" @@ -1349,25 +1349,35 @@ msgstr "" #: includes/src/Command.php:500 #: includes/src/ReqAction.php:757 -msgid "Cleanup Precache Limit" +msgid "Cleanup Cache Expire" msgstr "" #: includes/src/Command.php:504 -#: includes/src/ReqAction.php:760 +#: includes/src/ReqAction.php:761 +msgid "Cleanup Precache Limit" +msgstr "" + +#: includes/src/Command.php:508 +#: includes/src/ReqAction.php:765 +msgid "Cleanup Stale Cache" +msgstr "" + +#: includes/src/Command.php:512 +#: includes/src/ReqAction.php:768 msgid "Total Cache Cleanup" msgstr "" -#: includes/src/Command.php:505 -#: includes/src/ReqAction.php:761 +#: includes/src/Command.php:513 +#: includes/src/ReqAction.php:769 msgid "Total Cache Ignored" msgstr "" -#: includes/src/Command.php:506 -#: includes/src/ReqAction.php:762 +#: includes/src/Command.php:514 +#: includes/src/ReqAction.php:770 msgid "Total Cache File" msgstr "" -#: includes/src/Command.php:508 +#: includes/src/Command.php:516 msgid "Executing the garbage collector completed." msgstr "" @@ -1392,19 +1402,19 @@ msgstr "" msgid "Already received. Try again in a few minutes" msgstr "" -#: includes/src/Event.php:39 +#: includes/src/Event.php:43 msgid "Every 30 Minutes" msgstr "" -#: includes/src/Event.php:45 +#: includes/src/Event.php:49 msgid "Once Hourly" msgstr "" -#: includes/src/Event.php:52 +#: includes/src/Event.php:56 msgid "Once Monthly" msgstr "" -#: includes/src/Event.php:63 +#: includes/src/Event.php:67 msgid "Every 15 Days" msgstr "" @@ -1655,11 +1665,11 @@ msgstr "" #: includes/src/ReqAction.php:558 #: includes/src/ReqAction.php:578 -#: includes/src/ReqAction.php:821 -#: includes/src/ReqAction.php:839 -#: includes/src/ReqAction.php:857 -#: includes/src/ReqAction.php:875 -#: includes/src/ReqAction.php:893 +#: includes/src/ReqAction.php:829 +#: includes/src/ReqAction.php:847 +#: includes/src/ReqAction.php:865 +#: includes/src/ReqAction.php:883 +#: includes/src/ReqAction.php:901 msgid "Total cache flushed" msgstr "" @@ -1818,80 +1828,80 @@ msgstr "" msgid "Executing the garbage collector successful" msgstr "" -#: includes/src/ReqAction.php:770 +#: includes/src/ReqAction.php:778 msgid "Failed to run the garbage collector." msgstr "" -#: includes/src/ReqAction.php:773 +#: includes/src/ReqAction.php:781 msgid "Updating wp-config.php file successful." msgstr "" -#: includes/src/ReqAction.php:779 +#: includes/src/ReqAction.php:787 msgid "Reset all configuration successful." msgstr "" -#: includes/src/ReqAction.php:782 +#: includes/src/ReqAction.php:790 msgid "Failed to reset configuration." msgstr "" -#: includes/src/ReqAction.php:785 +#: includes/src/ReqAction.php:793 msgid "Cleanup Post successful" msgstr "" -#: includes/src/ReqAction.php:791 +#: includes/src/ReqAction.php:799 msgid "Revisions" msgstr "" -#: includes/src/ReqAction.php:792 +#: includes/src/ReqAction.php:800 msgid "Auto Drafts" msgstr "" #. translators: %d = sites -#: includes/src/ReqAction.php:798 +#: includes/src/ReqAction.php:806 msgid "For %d sites" msgstr "" -#: includes/src/ReqAction.php:808 +#: includes/src/ReqAction.php:816 msgid "Failed to cleanup Post." msgstr "" -#: includes/src/ReqAction.php:811 +#: includes/src/ReqAction.php:819 msgid "Post already cleanup. Try again in a few seconds." msgstr "" -#: includes/src/ReqAction.php:814 +#: includes/src/ReqAction.php:822 msgid "Menu cache was flushed." msgstr "" -#: includes/src/ReqAction.php:829 +#: includes/src/ReqAction.php:837 msgid "Menu cache could not be flushed." msgstr "" -#: includes/src/ReqAction.php:832 +#: includes/src/ReqAction.php:840 msgid "Translation cache was flushed." msgstr "" -#: includes/src/ReqAction.php:847 +#: includes/src/ReqAction.php:855 msgid "Translation cache could not be flushed." msgstr "" -#: includes/src/ReqAction.php:850 +#: includes/src/ReqAction.php:858 msgid "Object Precache was flushed." msgstr "" -#: includes/src/ReqAction.php:865 +#: includes/src/ReqAction.php:873 msgid "Object Precache could not be flushed." msgstr "" -#: includes/src/ReqAction.php:868 +#: includes/src/ReqAction.php:876 msgid "Advanced Post Cache was flushed." msgstr "" -#: includes/src/ReqAction.php:886 +#: includes/src/ReqAction.php:894 msgid "Transient cache was flushed." msgstr "" -#: includes/src/ReqAction.php:901 +#: includes/src/ReqAction.php:909 msgid "Transient cache could not be flushed." msgstr "" @@ -2109,11 +2119,11 @@ msgid "The maximum cache file can be stored on a disk. The cache file will free msgstr "" #: includes/src/View.php:617 -msgid "Enable this option to chunk cache files into a smaller directory to avoid an excessive number of cache files in a single directory." +msgid "Enable this option to chunk cache files into a smaller directory to avoid an excessive number of cache files in a single directory. Only enable this option if you have difficulty when manually clearing the cache or experience a slowdown when the cache becomes too large." msgstr "" #: includes/src/View.php:618 -msgid "Enable this option to immediately remove the stale cache abandoned by WordPress, WooCommerce and others after doing cache invalidation." +msgid "Enable this option to immediately remove the stale cache abandoned by WordPress, WooCommerce and others after doing cache invalidation. By default, it will be removed by GC within 4 days. This option may cause exessive usage of I/O and CPU. Only enable this option if you require to keep storage space in check." msgstr "" #: includes/src/View.php:619 diff --git a/readme.txt b/readme.txt index 73cb687..4377c9c 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: object cache, OPcache, fastcgi, cache, database, Optimisation, performance Requires at least: 5.4 Tested up to: 6.0 Requires PHP: 7.2.5 -Stable tag: 21.08.10 +Stable tag: 21.08.11 License: MIT License URI: https://github.com/nawawi/docket-cache/blob/master/LICENSE.txt @@ -171,6 +171,12 @@ Yes, you can. It can boost more your WordPress performance since there is no net Please do manually remove wp-content/object-cache.php and wp-content/cache/docket-cache if an error occurs during updates. Thanks. == Changelog == += 21.08.11 = +- Fixed: Avoid calling Filesystem::close_buffer() if a process involved accessing a disk. +- Fixed: Removed handling stale cache on shutdown. +- Added: Garbage Collector Status -> Cleanup Stale Cache. +- Improved: Collected stale cache will be handled by Garbage Collector. + = 21.08.10 = - Changed: Disable "Chunk Cache Directory" by default. Let's users choose it depending on their hosting environment.