mod_http_file_share: Update cached value while it is reasonably fresh
authorKim Alvefur <zash@zash.se>
Sun, 31 Jan 2021 17:44:19 +0100
changeset 11353 a219001b449d
parent 11352 f076199b4d38
child 11354 3287dbdde33e
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.
plugins/mod_http_file_share.lua
--- 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);