новые изменения? Как чекать при перезапуске, что все записи удовлетворяют заданному предикату?
Хочется три шага
1) Чекнуть что все ок, удалив ненужные
2) Поставить before_replace
3) Включить репликацию с других нод
Так ведь можно?
Не очень понимаю где на это смотреть с точки зрения once и применения настроек
Это будет выглядеть как-то так: local function my_trigger() -- do what you must end local my_space = 'space_name' box.ctl.on_schema_init(function() box.space._space:on_replace(function(prev, sp) if sp.name == my_space then box.on_commit(function() rawset(_G, 'my_space_before_replace', box.space[my_space]:before_replace( my_trigger, rawget(_G, 'my_space_before_replace') ) ) end) end end) end)
лущ проверить что спейс инсертиться, чтобы случайно на альтерах не понаставлять лишних триггеров
А как это полечит уже существующие записи в БД? Если вдруг они перестали удовлетворять предикату
во время рекавери (поднятия снапа и xlog'ов), вызывается триггер before_replace, в принципе, вы можете в нем поменять данные (например скипнуть какое-то количество транзакций, сделать свою валидацию). Важно только помнить, что изменения, сделанные в этом тригере во время рекавери не будут писаться в журнал. Но после поднятия можно будет сделать box.snapshot
Обсуждают сегодня