Mercurial > prosody-hg
comparison plugins/mod_http_file_share.lua @ 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 | f076199b4d38 |
| children | 3287dbdde33e |
comparison
equal
deleted
inserted
replaced
| 11348:f076199b4d38 | 11349:a219001b449d |
|---|---|
| 77 return cached.size; | 77 return cached.size; |
| 78 end | 78 end |
| 79 local iter, err = uploads:find(nil, {with = uploader; start = max_age }); | 79 local iter, err = uploads:find(nil, {with = uploader; start = max_age }); |
| 80 if not iter then return iter, err; end | 80 if not iter then return iter, err; end |
| 81 local total_bytes = 0; | 81 local total_bytes = 0; |
| 82 local oldest_upload; | 82 local oldest_upload = now; |
| 83 for _, slot, when in iter do | 83 for _, slot, when in iter do |
| 84 local size = tonumber(slot.attr.size); | 84 local size = tonumber(slot.attr.size); |
| 85 if size then total_bytes = total_bytes + size; end | 85 if size then total_bytes = total_bytes + size; end |
| 86 if not oldest_upload then oldest_upload = when; end | 86 if when < oldest_upload then oldest_upload = when; end |
| 87 end | 87 end |
| 88 quota_cache:set(uploader, { time = oldest_upload or now, size = total_bytes }); | 88 -- If there were no uploads then we end up caching [now, 0], which is fine |
| 89 -- since we increase the size on new uploads | |
| 90 quota_cache:set(uploader, { time = oldest_upload, size = total_bytes }); | |
| 89 return total_bytes; | 91 return total_bytes; |
| 90 end | 92 end |
| 91 | 93 |
| 92 function may_upload(uploader, filename, filesize, filetype) -- > boolean, error | 94 function may_upload(uploader, filename, filesize, filetype) -- > boolean, error |
| 93 local uploader_host = jid.host(uploader); | 95 local uploader_host = jid.host(uploader); |
| 165 if not slot then | 167 if not slot then |
| 166 origin.send(st.error_reply(stanza, storage_err)); | 168 origin.send(st.error_reply(stanza, storage_err)); |
| 167 return true; | 169 return true; |
| 168 end | 170 end |
| 169 | 171 |
| 170 -- Invalidate cache | 172 local cached_quota = quota_cache:get(uploader); |
| 171 quota_cache:set(uploader, nil); | 173 if cached_quota and cached_quota.time > os.time()-86400 then |
| 174 cached_quota.size = cached_quota.size + filesize; | |
| 175 quota_cache:set(uploader, cached_quota); | |
| 176 end | |
| 172 | 177 |
| 173 local authz = get_authz(uploader, filename, filesize, filetype, slot); | 178 local authz = get_authz(uploader, filename, filesize, filetype, slot); |
| 174 local slot_url = get_url(slot, filename); | 179 local slot_url = get_url(slot, filename); |
| 175 local upload_url = slot_url; | 180 local upload_url = slot_url; |
| 176 | 181 |
