expirationd icon indicating copy to clipboard operation
expirationd copied to clipboard

Add sensible default is_expired functions

Open WeCodingNow opened this issue 2 years ago • 1 comments

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/migrations for applying schema
  • crud for data access
  • expirationd (??? need to write own role that goes together with expirer OR write code in init.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

WeCodingNow avatar Mar 10 '23 13:03 WeCodingNow

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

Mons avatar May 30 '23 14:05 Mons