aboutsummaryrefslogtreecommitdiff
path: root/app/Controllers/feedController.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2023-08-03 21:56:35 +0200
committerGravatar GitHub <noreply@github.com> 2023-08-03 21:56:35 +0200
commit4039f6c9a4bc1636d298d0c05c678f4e1215e846 (patch)
tree49e06cebd6192a525bad249084bf64aa2cc74c9a /app/Controllers/feedController.php
parente7689459f25663e00b4f5814a3608872ff36b582 (diff)
Fix cache refresh (#5562)
Improvement of https://github.com/FreshRSS/FreshRSS/pull/4422 The main problem was due to `touch()` not automatically clearing the file status cache, and requiring a call to `clearstatcache()`. Example: ``` php > touch('/tmp/touch.txt'); php > echo date('c', filemtime('/tmp/touch.txt')); 2023-08-03T17:27:43+02:00 php > touch('/tmp/touch.txt'); php > echo date('c', filemtime('/tmp/touch.txt')); 2023-08-03T17:27:43+02:00 php > clearstatcache(true, '/tmp/touch.txt'); php > echo date('c', filemtime('/tmp/touch.txt')); 2023-08-03T17:28:21+02:00 ```
Diffstat (limited to 'app/Controllers/feedController.php')
-rw-r--r--app/Controllers/feedController.php8
1 files changed, 6 insertions, 2 deletions
diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php
index e5685dddf..a17e596c7 100644
--- a/app/Controllers/feedController.php
+++ b/app/Controllers/feedController.php
@@ -385,10 +385,14 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
}
if ($simplePiePush === null && $feed_id === 0 && (time() <= $feed->lastUpdate() + $ttl)) {
//Too early to refresh from source, but check whether the feed was updated by another user
- if ($mtime <= 0 || $feed->lastUpdate() >= $mtime) {
+ $ε = 10; // negligible offset errors in seconds
+ if ($mtime <= 0 ||
+ $feed->lastUpdate() + $ε >= $mtime ||
+ time() + $ε >= $mtime + FreshRSS_Context::$system_conf->limits['cache_duration']) { // is cache still valid?
continue; //Nothing newer from other users
}
- Minz_Log::debug('Feed ' . $feed->url(false) . ' was updated at ' . date('c', $mtime) . ' by another user; will take advantage of the newer cache.');
+ Minz_Log::debug('Feed ' . $feed->url(false) . ' was updated at ' . date('c', $feed->lastUpdate()) .
+ ', and at ' . date('c', $mtime) . ' by another user; take advantage of newer cache.');
}
if (!$feed->lock()) {