diff --git a/daemon/lua/kres.lua b/daemon/lua/kres.lua index 412f62cd012983b531937f6f1fd69a3b3865aa3b..a39e3fe459c369cd0472a3cd78bc9d00021de9d1 100644 --- a/daemon/lua/kres.lua +++ b/daemon/lua/kres.lua @@ -727,6 +727,22 @@ ffi.metatype( kr_query_t, { local kr_request_t = ffi.typeof('struct kr_request') ffi.metatype( kr_request_t, { __index = { + -- makes sense only when request is finished + all_from_cache = function(req) + assert(ffi.istype(kr_request_t, req)) + local rplan = ffi.C.kr_resolve_plan(req) + if tonumber(rplan.pending.len) > 0 then + -- an unresolved query, + -- i.e. something is missing from the cache + return false + end + for idx=0, tonumber(rplan.resolved.len) - 1 do + if not rplan.resolved.at[idx].flags.CACHED then + return false + end + end + return true + end, current = function(req) assert(ffi.istype(kr_request_t, req)) if req.current_query == nil then return nil end diff --git a/modules/policy/policy.lua b/modules/policy/policy.lua index 90770514c6d99f7016d38d461cb8cb6b96334a47..19bbe6b637b67e131e0ae3fe970bdb72540ea59b 100644 --- a/modules/policy/policy.lua +++ b/modules/policy/policy.lua @@ -579,23 +579,9 @@ function policy.DEBUG_IF(test) end end -local function is_request_answered_from_cache(req) - local rplan = ffi.C.kr_resolve_plan(req) - if tonumber(rplan.pending.len) > 0 then - -- an unresolved query, i.e. something is missing from the cache - return false - end - for idx=0, tonumber(rplan.resolved.len) - 1 do - if not rplan.resolved.at[idx].flags.CACHED then - return false - end - end - return true -end - policy.DEBUG_CACHE_MISS = policy.DEBUG_IF( function(req) - return not is_request_answered_from_cache(req) + return not req:all_from_cache() end )