проблема была в том что индексы например еще не построены
да, но как он бы об этом узнал?
а он не прилег, просто у него теперь в спейсе куча дубликатов
ну а зачем он туда писал их ... я не пойму в чем проблема то , не хочешь дублей - не пиши их туда
еще раз, есть бизнес-триггер. он разгребает то что приезжает по репликации например и что-то довставляет. его навешивали в on_schema_init чтобы когда репликация поедет он уже был. теперь понятно?
это я хорошо понимаю , дело в том что on_schema_init срабатывает (во всяком случае раньше) ДО того как данные начнут загружаться из снапшота (тоесть это сильно раньше чем в приницпе до репликации дело доходит), так вот в этот момент уже можно менять схему или таплы... тоесть is_recovery_finished() никак не может быть == TRUE поскольку дело еще даже не дошло до поднятия снапшота с диска и xlog ... а то что я вижу на приведенном скриншоте полностью рушит мое представление о мире
кажется все это вообще не решает то что описано в 5 пункте https://github.com/tarantool/tarantool/issues/5304#issuecomment-694085235 тут либо вообще нужно запрещать изменять любые данные в спейсах отличных от текущего тапла либо индексы в temporary и local должны к этому времени существовать... is_recovery_finished никак не может помочь в этом вопросе.... —- как я понимаю изначально ктото пытался сделать такую штуку чтобы при поднятии из снапшота создавалось некое представление во временном спейсе, это довольно логично для различных оптимизаций (например материализатор счетчиков ), но индексов в спейсе нет и таплы просто вставлялись как есть вместо агрегации (суммирования в случае со счетчиками), @a_lyapunov, обрати внимание, твой тикет
я подозреваю, что это бага, но бага в тесте
допустим, тест я вообще плохо понял... я описал пример с материализацией счетчиков , когда они при поднятии снапшота считаются, такое вообще возможно после такого коммита?
Емнип там всё просто. если хочешь считать счетчики в temp спейсе - то делать этого было невозможно ранее и невоможно сейчас. Но сейчас есть еще та самая функция, чтобы проверить - можно уже или еще нет. Если хочешь считать счетчики в lua - пожалуйста. это можно было и можно сейчас. ничего проверять не нужно.
тоесть выходит что из триггеров все равно нельзя писать в другие спейсы (во время бустрапа), тогда твой пример непонятен, или имеется ввиду что после коммита пример просто будет валиться с ошибкой вместо того чтобы дубли создавать в спейсах... ... тогда и в тесте проверку нужно делать внутри on replace а не в on schema init
да, нельзя. да, ты прав, должна быть внутри on_replace. эта проблема только в тесте, я проверил.
тогда нужен еще какой нибудь триггер который в момент is_recovery_finished происходит, и до запуска репликации
звучит норм
on_recovery_finished видимо
Обсуждают сегодня