215 похожих чатов

@Korablev77 нужная пояснительная бригада... Разве on_schema_init

не должен ВСЕГДА вызываться до окончания поднятия снапшота (тоесть перед началом), или триггер вызывается несколько раз ?

https://github.com/tarantool/tarantool/commit/3bc4a156e937102f23e2157ef88aa6c007759005#diff-bdd09286e91e43faaa5d3069d0ca967e302b2b32af52d9e3083c3386e98b2860R35

16 ответов

30 просмотров

проблема была в том что индексы например еще не построены

да, но как он бы об этом узнал?

а он не прилег, просто у него теперь в спейсе куча дубликатов

R-omk- Автор вопроса

ну а зачем он туда писал их ... я не пойму в чем проблема то , не хочешь дублей - не пиши их туда

еще раз, есть бизнес-триггер. он разгребает то что приезжает по репликации например и что-то довставляет. его навешивали в on_schema_init чтобы когда репликация поедет он уже был. теперь понятно?

R-omk- Автор вопроса

это я хорошо понимаю , дело в том что on_schema_init срабатывает (во всяком случае раньше) ДО того как данные начнут загружаться из снапшота (тоесть это сильно раньше чем в приницпе до репликации дело доходит), так вот в этот момент уже можно менять схему или таплы... тоесть is_recovery_finished() никак не может быть == TRUE поскольку дело еще даже не дошло до поднятия снапшота с диска и xlog ... а то что я вижу на приведенном скриншоте полностью рушит мое представление о мире

R-omk- Автор вопроса

https://www.tarantool.io/en/doc/latest/reference/reference_lua/box_ctl/#lua-function.box.ctl.on_schema_init

R-omk- Автор вопроса

кажется все это вообще не решает то что описано в 5 пункте https://github.com/tarantool/tarantool/issues/5304#issuecomment-694085235 тут либо вообще нужно запрещать изменять любые данные в спейсах отличных от текущего тапла либо индексы в temporary и local должны к этому времени существовать... is_recovery_finished никак не может помочь в этом вопросе.... —- как я понимаю изначально ктото пытался сделать такую штуку чтобы при поднятии из снапшота создавалось некое представление во временном спейсе, это довольно логично для различных оптимизаций (например материализатор счетчиков ), но индексов в спейсе нет и таплы просто вставлялись как есть вместо агрегации (суммирования в случае со счетчиками), @a_lyapunov, обрати внимание, твой тикет

я подозреваю, что это бага, но бага в тесте

R-omk- Автор вопроса

допустим, тест я вообще плохо понял... я описал пример с материализацией счетчиков , когда они при поднятии снапшота считаются, такое вообще возможно после такого коммита?

Емнип там всё просто. если хочешь считать счетчики в temp спейсе - то делать этого было невозможно ранее и невоможно сейчас. Но сейчас есть еще та самая функция, чтобы проверить - можно уже или еще нет. Если хочешь считать счетчики в lua - пожалуйста. это можно было и можно сейчас. ничего проверять не нужно.

R-omk- Автор вопроса

тоесть выходит что из триггеров все равно нельзя писать в другие спейсы (во время бустрапа), тогда твой пример непонятен, или имеется ввиду что после коммита пример просто будет валиться с ошибкой вместо того чтобы дубли создавать в спейсах... ... тогда и в тесте проверку нужно делать внутри on replace а не в on schema init

да, нельзя. да, ты прав, должна быть внутри on_replace. эта проблема только в тесте, я проверил.

R-omk- Автор вопроса

тогда нужен еще какой нибудь триггер который в момент is_recovery_finished происходит, и до запуска репликации

звучит норм

on_recovery_finished видимо

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта