end
-- Used to generate new ANN key for specific profile
-local function new_ann_key(rule, set)
- local ann_key = string.format('%s_%s_%s_%s_nn', settings.prefix,
- rule.prefix, set.name, set.digest:sub(1, 8))
+local function new_ann_key(rule, set, version)
+ local ann_key = string.format('%s_%s_%s_%s_%s', settings.prefix,
+ rule.prefix, set.name, set.digest:sub(1, 8), tostring(version))
return ann_key
end
-- Creates and stores ANN profile in Redis
local function new_ann_profile(task, rule, set, version)
- local ann_key = new_ann_key(rule, set)
+ local ann_key = new_ann_key(rule, set, version)
local profile = {
symbols = set.symbols,
end
-- Deserialise ANN from the child process
ann_trained = rspamd_kann.load(data)
- set.ann.version = (set.ann.version or 0) + 1
+ local version = (set.ann.version or 0) + 1
+ set.ann.version = version
set.ann.ann = ann_trained
+ set.ann.symbols = set.symbols
+ set.ann.redis_key = new_ann_key(rule, set, version)
local profile = {
symbols = set.symbols,
- distance = 0,
digest = set.digest,
- redis_key = ann_key,
- version = set.ann.version
+ redis_key = set.ann.redis_key,
+ version = version
}
local ucl = require "ucl"
lua_redis.exec_redis_script(redis_save_unlock_id,
{ev_base = ev_base, is_write = true},
redis_save_cb,
- {ann_key,
+ {profile.redis_key,
redis_ann_prefix(rule, set.name),
ann_data,
profile_serialized,