expirationd
expirationd copied to clipboard
Add sensible default is_expired functions
Right now is_tuple_expired (is_expired in cartridge role configuration) is a required argument when configuring an expirationd worker
It must be a name of a function in _G.
Right now the problem is that there is at all a need to code such functions for the developers of an app.
What if you don't wan't to develop an app, but rather want to deploy a default cartridge cluster (just straight up create -> pack -> deploy) that has everything else you need provided via other modules, and configure it? In other words, a full out-of-the-box experience.
A configuration like this:
ddl/migrationsfor applying schemacrudfor data accessexpirationd(??? need to write own role that goes together with expirer OR write code ininit.lua)
How about implementing a bunch of such functions that are provided by defalut? Something like
local M = {}
local fiber = require('fiber')
function M.check_ttl(args, tuple)
local now = fiber.time()
local ttl = tuple[args.ttl_field]
local timestamp = tuple[args.timestamp_field]
if (ttl == nil or timestamp == nil) then
return false
end
return now > timestamp + ttl
end
function M.check_time_to_remove(args, tuple)
-- same thing, but for tuples
-- that only have a "time to expire" timestamp, instead of the "creation time + ttl" combo
end
return M
...
-- somewhere in expirationd
for f_name, f in pairs(require('expirationd.functions') do
rawset(_G, '__'..f_name, f)
end
So the possible expirationd.yml configuration would look like:
# tasks
expire_at:
space: session
is_expired: __check_ttl
options:
args:
ttl_field: max_inactive_interval
timestamp_field: last_accessed_time
is_master_only: true
With no need to code anything in cartridge init.lua or in a custom role
This could be done either by implementing custom space attributes (like tuple timestamp) or by just pure functions in expirationd. Need to take an estimation. For the second need to collect scenarios from delivery