rockspec_format = '3.0' package = 'tnt-disk' version = 'scm-1' source = { url = 'git+https://github.com/tnt-skein/tnt-disk.git', branch = 'main', } description = { summary = 'Файлы узла: каталоги, перечисление, вес, чтение журнала и уборка', detailed = [[ Один слой доступа к диску на все пакеты, которым нужны файлы узла. Восстановление после аварии переименовывает испорченный журнал, обслуживание перечисляет файлы, считает их вес и удаляет лишние — задачи разные, диск один, и два слоя разошлись бы ровно в тех случаях, ради которых слой и заводят. Сами файлы читает и пишет tnt-fs: сброс на диск до закрытия, снос дерева, поиск по образцу без блокировки узла. Здесь остаётся узловое, чего у файлового фасада нет: каталоги самого узла, курсор журнала и снимка, свободное место на разделе. Права слой не выдаёт: удалять или переименовывать решает тот, кто зовёт. Каталоги берутся у самого узла через box.cfg, а не из конфигурации: конфигурация говорит, что узлу велено, а box.cfg — где он на самом деле пишет. Свободное место спрашивается у системной утилиты: ни в fio, ни в tnt-fs его нет — оба умеют рассказать о файле, но не о разделе. Разбор её ответа отделён от запуска, потому что чужой формат проверяется точным сравнением, а запуск команды — только приблизительно. Команда идёт встроенным popen со сроком: io.popen ждёт, не уступая управления, и df на подмороженной NFS остановил бы узел целиком. Не успевшая команда убивается, вызов отказывает. Зависит от tnt-fs (файлы), tnt-clock (часы срока), tnt-must (проверка настроек) и tnt-external (подмена диска в проверках). Покрытие строк и убитых мутантов — 100 %. ]], homepage = 'https://github.com/tnt-skein/tnt-disk', issues_url = 'https://github.com/tnt-skein/tnt-disk/issues', maintainer = 'tnt-skein', license = 'MIT', labels = { 'tarantool', 'disk', 'wal', 'xlog', 'files', 'df' }, } dependencies = { 'lua >= 5.1', 'tnt-must', 'tnt-clock', 'tnt-fs', 'tnt-external', } build = { type = 'builtin', modules = { ['tnt.disk'] = 'tnt/disk.lua', }, }