From 593e92dc0691eaaf3e1217fcf47161dc856af05e Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 21 May 2022 22:55:22 +0800 Subject: add existinfo --- .../service/remote_cache/server_session.lua | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'xmake/modules/private/service/remote_cache/server_session.lua') 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()) -- cgit v1.3.1