Size: a a a

2020 June 22

GS

Guram Savinov in Tarantool
Dmitry Sharonov
кажется это должно быть в кластерконфиге, не?
это где?
источник

GS

Guram Savinov in Tarantool
локальные переменные спейсов в кластерконфиге - звучит подозрительно не к месту
источник

DS

Dmitry Sharonov in Tarantool
апдейты/апсерты да
источник

GS

Guram Savinov in Tarantool
Yaroslav Dynnikov
Ну в нулевом приближении варианты такие:

1. Инициализировать всех из переменных окружения. Минусы - сложно отследить что они отличаются.
2. Завести секцию в кластерном конфиге. Одинаковость гарантируется картриджем, но редактировать без кворума становится невозможно (пока мы это не починим). И гранулярноти по репликасетам не удобно добиваться.
3. Хранить настройки в спейсе и пусть сами реплицируются. Главное обвешаться тригерами чтобы конфликтов не было.
по п.3: мне надо результаты выполненного кода в init спейса мастера пробросить на реплику, если я в нем начну переменные инсертить в другой спейс, то он на тот момент уже должен проинициализироваться
источник

DS

Dmitry Sharonov in Tarantool
Guram Savinov
локальные переменные спейсов в кластерконфиге - звучит подозрительно не к месту
вообще говоря запихнуть в конфиг весь ддл целиком - не самая плохая идея, мы так делаем
источник

GS

Guram Savinov in Tarantool
Dmitry Sharonov
вообще говоря запихнуть в конфиг весь ддл целиком - не самая плохая идея, мы так делаем
пример где можно глянуть?
источник

YD

Yaroslav Dynnikov in Tarantool
Guram Savinov
маппинг имен колонок на номер, знаю что уже поддерживается, но у меня версия 2.2 где не поддерживается и поменять нет возможности
может его динамически на реплике вычислить?

Вот запустилась реплика. Спейс есть. Открываем формат, смотрим где что лежит, вычисляем field_no, можно апсертить.
Если спейс еще не приехал (привет асинхронная репликация), то есть тригеры.
источник

MM

Max Melentiev in Tarantool
Guram Savinov
маппинг имен колонок на номер, знаю что уже поддерживается, но у меня версия 2.2 где не поддерживается и поменять нет возможности
как вариант, можете повесить хук на изменение формата спэйса и пересчитывать мапинг. такой код будет одинаковым для мастера и реплики
источник

MM

Max Melentiev in Tarantool
Ярослав опередил
источник

GS

Guram Savinov in Tarantool
можно пример с триггером: спейс приехал на реплику, вызываю коллбек?
источник

GS

Guram Savinov in Tarantool
на мастере это вызов init роли сторадж, на репликах init не выполняется
источник

YD

Yaroslav Dynnikov in Tarantool
Guram Savinov
можно пример с триггером: спейс приехал на реплику, вызываю коллбек?
источник

GS

Guram Savinov in Tarantool
для реплики замена инита на мастере это вот так?
box.schema.on_schema_init(function()
   box.space._space:on_replace(function(old_space, new_space)
источник

YD

Yaroslav Dynnikov in Tarantool
box.schema.on_schema_init по-моему вам не нужен, на инит роли бокс.цфг уже сделан
источник

GS

Guram Savinov in Tarantool
опечатка видимо
The best timing to use it is when _space is just created, which is the box.ctl.on_schema_init() trigger.
box.schema.on_schema_init
https://www.tarantool.io/en/doc/2.3/book/replication/repl_problem_solving/
источник

YD

Yaroslav Dynnikov in Tarantool
Да, ctl, не schema
источник

DS

Dmitry Sharonov in Tarantool
источник

MM

Max Melentiev in Tarantool
Guram Savinov
на мастере это вызов init роли сторадж, на репликах init не выполняется
инит роли и на репликах тоже выполняется. у вас там наверное условие if options.is_master
источник

GS

Guram Savinov in Tarantool
Max Melentiev
инит роли и на репликах тоже выполняется. у вас там наверное условие if options.is_master
да, в этом и проблема что идет инициализация спейсов уже, а не роли в целом
источник

MM

Max Melentiev in Tarantool
я не понимаю проблему. сделайте в ней инициализацию спэйсов, а потом без условия общий код для реплики и лидера

кстати спэйсы лучше инициализировать в apply_config. при роллинг-апдейте код в ините внутри if options.is_master then никогда не выполнится
источник