Changeset

11349:a219001b449d

mod_http_file_share: Update cached value while it is reasonably fresh This should ensure that cache entries until the oldest file that counted to the last 24h becomes older than 24h.
author Kim Alvefur <zash@zash.se>
date Sun, 31 Jan 2021 17:44:19 +0100
parents 11348:f076199b4d38
children 11350:3287dbdde33e
files plugins/mod_http_file_share.lua
diffstat 1 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_http_file_share.lua	Sun Jan 31 17:56:49 2021 +0100
+++ b/plugins/mod_http_file_share.lua	Sun Jan 31 17:44:19 2021 +0100
@@ -79,13 +79,15 @@
 	local iter, err = uploads:find(nil, {with = uploader; start = max_age });
 	if not iter then return iter, err; end
 	local total_bytes = 0;
-	local oldest_upload;
+	local oldest_upload = now;
 	for _, slot, when in iter do
 		local size = tonumber(slot.attr.size);
 		if size then total_bytes = total_bytes + size; end
-		if not oldest_upload then oldest_upload = when; end
+		if when < oldest_upload then oldest_upload = when; end
 	end
-	quota_cache:set(uploader, { time = oldest_upload or now, size = total_bytes });
+	-- If there were no uploads then we end up caching [now, 0], which is fine
+	-- since we increase the size on new uploads
+	quota_cache:set(uploader, { time = oldest_upload, size = total_bytes });
 	return total_bytes;
 end
 
@@ -167,8 +169,11 @@
 		return true;
 	end
 
-	-- Invalidate cache
-	quota_cache:set(uploader, nil);
+	local cached_quota = quota_cache:get(uploader);
+	if cached_quota and cached_quota.time > os.time()-86400 then
+		cached_quota.size = cached_quota.size + filesize;
+		quota_cache:set(uploader, cached_quota);
+	end
 
 	local authz = get_authz(uploader, filename, filesize, filetype, slot);
 	local slot_url = get_url(slot, filename);