rockspec_format = '3.0' package = 'tnt-lock' version = 'scm-1' source = { url = 'git+https://github.com/tnt-skein/tnt-lock.git', branch = 'main', } description = { summary = 'Кластерный замок тяжёлых операций на аренде etcd', detailed = [[ Снимок съедает диск и процессор, уборка мусора — диск, перебалансировка — сеть. Каждая по отдельности переживаема, а все разом на всех узлах превращают штатное обслуживание в аварию. Замок — ключ в хранилище решений (etcd), привязанный к аренде: пока узел продлевает аренду, ключ занят, а узел, упавший с замком в руках, отпускает его без чужого участия — хранилище снимает ключ по истечении срока. Узел считает замок своим срок аренды за вычетом шага продления и узнаёт о потере раньше хранилища. Отказ хранилища не считается свободным замком, а замок, срок которого вышел, узел не отпускает удалением чужого ключа. Замок рекомендательный: он бережёт от одновременного запуска, а не от одновременного выполнения, и проверок на самом узле не заменяет. guarded выполняет тело под замком и отпускает его, чем бы тело ни кончилось; occupy отдаёт способ отпустить — для работ, которые кончаются позже вызова. Клиент хранилища приходит аргументом: подойдёт клиент tnt-etcd-client либо любой объект с тем же договором. Покрытие строк и убитых мутантов — 100 %. ]], homepage = 'https://github.com/tnt-skein/tnt-lock', issues_url = 'https://github.com/tnt-skein/tnt-lock/issues', maintainer = 'tnt-skein', license = 'MIT', labels = { 'tarantool', 'lock', 'etcd', 'lease', 'cluster', 'maintenance' }, } dependencies = { 'lua >= 5.1', -- Бросок исключения тела под замком таким, каким его бросили. 'tnt-must', -- Монотонные часы срока держания и стенные — отметки в записи замка. 'tnt-clock', -- Срок держания: аренда за вычетом шага продления. 'tnt-fencing', -- Записи о пропущенной операции и потерянном замке. 'tnt-log', -- Такт продления удерживаемых замков. 'tnt-loop', -- Часы внешней зависимостью: проверки подменяют их своими. 'tnt-external', } build = { type = 'builtin', modules = { ['tnt.lock'] = 'tnt/lock.lua', }, }