summaryrefslogtreecommitdiff
path: root/xmake/modules/private/service/remote_cache/server_session.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-05-21 22:55:22 +0800
committerruki <[email protected]>2022-05-21 22:55:22 +0800
commit593e92dc0691eaaf3e1217fcf47161dc856af05e (patch)
treed8dc2099c3d00b5f2ce718c96e4090e80cfda033 /xmake/modules/private/service/remote_cache/server_session.lua
parentbcde9c9f0f7b2f51e20ccf1a4fccb08dc0b2f9e4 (diff)
add existinfo
Diffstat (limited to 'xmake/modules/private/service/remote_cache/server_session.lua')
-rw-r--r--xmake/modules/private/service/remote_cache/server_session.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/xmake/modules/private/service/remote_cache/server_session.lua b/xmake/modules/private/service/remote_cache/server_session.lua
index 5a68877e6..38d86e55e 100644
--- a/xmake/modules/private/service/remote_cache/server_session.lua
+++ b/xmake/modules/private/service/remote_cache/server_session.lua
@@ -26,6 +26,7 @@ import("core.base.global")
import("core.base.option")
import("core.base.hashset")
import("core.base.scheduler")
+import("core.base.bloom_filter")
import("private.service.server_config", {alias = "config"})
import("private.service.message")
@@ -118,6 +119,34 @@ function server_session:fileinfo(respmsg)
vprint("get cacheinfo(%s)", cachekey)
end
+-- get exist info
+function server_session:existinfo(respmsg)
+ local body = respmsg:body()
+ local stream = self:stream()
+ local cachedir = self:cachedir()
+ local filter = bloom_filter.new()
+ local count = 0
+ vprint("get existinfo(%s) ..", body.name)
+ for _, objectfile in ipairs(os.files(path.join(cachedir, "*", "*"))) do
+ local cachekey = path.basename(objectfile)
+ if cachekey then
+ filter:set(cachekey)
+ count = count + 1
+ end
+ end
+ if count > 0 then
+ if not stream:send_data(filter:data(), {compress = true}) then
+ raise("send data failed!")
+ end
+ else
+ if not stream:send_emptydata() then
+ raise("send empty data failed!")
+ end
+ end
+ body.count = count
+ vprint("get existinfo(%s): %d ok", body.name, count)
+end
+
-- clean files
function server_session:clean()
vprint("%s: clean files in %s ..", self, self:cachedir())