enforce unconditional requests every 6 hours even if server claims data is not modified

This commit is contained in:
Andrew Dolgov 2017-11-30 13:12:28 +03:00
parent ecd2e414bd
commit e50c8eaa4e
2 changed files with 18 additions and 13 deletions

View File

@ -312,7 +312,8 @@ class RSSUtils {
feed_url,auth_pass,cache_images, feed_url,auth_pass,cache_images,
mark_unread_on_update, owner_uid, mark_unread_on_update, owner_uid,
auth_pass_encrypted, feed_language, auth_pass_encrypted, feed_language,
last_modified last_modified,
".SUBSTRING_FOR_DATE."(last_unconditional, 1, 19) AS last_unconditional
FROM ttrss_feeds WHERE id = '$feed'"); FROM ttrss_feeds WHERE id = '$feed'");
$owner_uid = db_fetch_result($result, 0, "owner_uid"); $owner_uid = db_fetch_result($result, 0, "owner_uid");
@ -333,6 +334,7 @@ class RSSUtils {
} }
$stored_last_modified = db_fetch_result($result, 0, "last_modified"); $stored_last_modified = db_fetch_result($result, 0, "last_modified");
$last_unconditional = db_fetch_result($result, 0, "last_unconditional");
$cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images")); $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images"));
$fetch_url = db_fetch_result($result, 0, "feed_url"); $fetch_url = db_fetch_result($result, 0, "feed_url");
$feed_language = db_escape_string(mb_strtolower(db_fetch_result($result, 0, "feed_language"))); $feed_language = db_escape_string(mb_strtolower(db_fetch_result($result, 0, "feed_language")));
@ -384,21 +386,21 @@ class RSSUtils {
// fetch feed from source // fetch feed from source
if (!$feed_data) { if (!$feed_data) {
_debug("stored last modified: $stored_last_modified", $debug_enabled); _debug("last unconditional update request: $last_unconditional");
_debug("fetching [$fetch_url]...", $debug_enabled);
if (ini_get("open_basedir") && function_exists("curl_init")) { if (ini_get("open_basedir") && function_exists("curl_init")) {
_debug("not using CURL due to open_basedir restrictions"); _debug("not using CURL due to open_basedir restrictions");
} }
/*$feed_data = fetch_file_contents($fetch_url, false, if (time() - strtotime($last_unconditional) > MAX_CONDITIONAL_INTERVAL) {
$auth_login, $auth_pass, false, _debug("maximum allowed interval for conditional requests exceeded, forcing refetch");
$no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT,
0);*/
// TODO: last_modified should be limited, if the feed has not been updated for a while $force_refetch = true;
// we probably should force one update without the header } else {
// unfortunately last_updated gets bumped on http 304 so that daemon would work properly _debug("stored last modified for conditional request: $stored_last_modified", $debug_enabled);
}
_debug("fetching [$fetch_url] (force_refetch: $force_refetch)...", $debug_enabled);
$feed_data = fetch_file_contents([ $feed_data = fetch_file_contents([
"url" => $fetch_url, "url" => $fetch_url,
@ -553,7 +555,7 @@ class RSSUtils {
_debug("no articles found.", $debug_enabled); _debug("no articles found.", $debug_enabled);
db_query("UPDATE ttrss_feeds db_query("UPDATE ttrss_feeds
SET last_updated = NOW(), last_error = '' WHERE id = '$feed'"); SET last_updated = NOW(), last_unconditional = NOW(), last_error = '' WHERE id = '$feed'");
return; // no articles return; // no articles
} }
@ -1140,7 +1142,7 @@ class RSSUtils {
purge_feed($feed, 0, $debug_enabled); purge_feed($feed, 0, $debug_enabled);
db_query("UPDATE ttrss_feeds db_query("UPDATE ttrss_feeds
SET last_updated = NOW(), last_error = '' WHERE id = '$feed'"); SET last_updated = NOW(), last_unconditional = NOW(), last_error = '' WHERE id = '$feed'");
// db_query("COMMIT"); // db_query("COMMIT");
@ -1158,7 +1160,7 @@ class RSSUtils {
db_query( db_query(
"UPDATE ttrss_feeds SET last_error = '$error_msg', "UPDATE ttrss_feeds SET last_error = '$error_msg',
last_updated = NOW() WHERE id = '$feed'"); last_updated = NOW(), last_unconditional = NOW() WHERE id = '$feed'");
unset($rss); unset($rss);
return; return;

View File

@ -57,6 +57,9 @@
// do not cache files smaller than that (bytes) // do not cache files smaller than that (bytes)
define_default('CACHE_MAX_DAYS', 7); define_default('CACHE_MAX_DAYS', 7);
// max age in days for various automatically cached (temporary) files // max age in days for various automatically cached (temporary) files
define_default('MAX_CONDITIONAL_INTERVAL', 3600*6);
// max interval between forced unconditional updates for servers
// not complying with http if-modified-since (seconds)
/* tunables end here */ /* tunables end here */