-
Notifications
You must be signed in to change notification settings - Fork 43
Description
Product: Tarantool
Root document: https://www.tarantool.io/en/doc/latest/book/replication/repl_problem_solving/#replacing-the-same-primary-key
SME: @ alyapunov
Details
Feedback from a user:
<…>ы получить доступ к создаваемому спейсу. В результате код будет |выглядеть следующим образом|:
Добрый день, в документации приведен пример установки треггера для резолва master-master. Если я не ошибаюсь, тригер в таком случае будет выпонятся для загружаемых из WAL записей.
Я отслеживал box.info.status чтобы этого избежать.
local function loading_before_replace(old, new)
if box.info.status == "loading" then
return
end
box.space.my_space_name:before_replace(before_replace, loading_before_replace)
return before_replace(old,new)
end
Возможно будет полезно кому-то.
** Questions to and comments from @ alyapunov **
-
Триггер выполняется для загружаемых из WAL записей?
Это зависит от того, что в "my_trigger", могу предположить.
Когда загружается WAL (речь ведь идет про recovery, когда Тарантул перезапущен), memtx находится в частично рабочем состоянии. Это неизбежно - без полностью загруженных данных нет полной картины состояния БД. В частности все selectы для определенности возвращают пустоту. Судя по всем такой хитрый триггер просто не будет работать как ожидается.
Собственно, это всегда надо иметь ввиду при использовании on_schema_init. -
Почему выполнять триггер для записей из WAL может быть плохо?
Это скорее всего просто бессмысленно - если данные есть в WAL, то триггер по ним уже отработал в тот момент, когда эти данные попадали в WAL. Второй раз не нужно.
ToDo
- Research if the description in the article https://www.tarantool.io/en/doc/latest/book/replication/repl_problem_solving/#replacing-the-same-primary-key is correct (according to @ alyapunov's comments)
- Research if the additional info from a user about tracking
box.info.status
is useful and can be added to the article. If yes, add this info.