Size: a a a

2021 January 22

MA

Mons Anderson in Tarantool
Евгений
вопрос,  я хочу поставить на прод tnt версию 2.х какая норм работает? 2.4? 2.5? 2.6? 2.7?
@inthrax
Ну, 2.7 пока бета, последний стейбл 2.6.2
А в мейл.ру так то и 1.5 кое где за стейбл :)
источник

Е

Евгений in Tarantool
Mons Anderson
Ну, 2.7 пока бета, последний стейбл 2.6.2
А в мейл.ру так то и 1.5 кое где за стейбл :)
хорошо, задам иначе вопрос. Решите что то делать новое, какой tnt будете использовать? 2.6.2?
источник

MA

Mons Anderson in Tarantool
Я то возьму 2.6.2 или даже 2.7.1 )
источник

AT

Alexander Turenko in Tarantool
Я бы взял 2.6.2, но учитывал ресурсы на пару обновлений в течение года (обычно неболезненные, но тем не менее).
источник

A

Andrey in Tarantool
Mons Anderson
Посмотрел по исходникам, сопоставил с видимой ошибкой

Судя по
https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/applier.cc#L91
и предшествующим логам и отсутствию в них final data received (https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/applier.cc#L915) мы в статусе APPLIER_FINAL_JOIN

читает он, судя по всему, вот этим https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/applier.cc#L531

тут есть replication_disconnect_timeout, который равен 4м replication_timeout (https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/replication.h#L157)

отстрел происходит ровно через 4 секунды после entering the event loop, что очень похоже на replication_timeout=1

Есть гипотеза, что к моменту запуска этого чтения это значение ещё не было установлено в переменную из конфига, т.е. в реальности при final join replication_timeout равен 1 железно.

В причине проблемы нужно разбираться дальше. Как минимум попробовать воспроизвести такое поведение (пока не удалось)

Могу предложить попробовать хак таймаута (но не факт, что это поможет).

Перед вызовом box.cfg добавить такое (для выставления таймаута в 5):

do
   local ffi = require 'ffi'
   ffi.cdef[[ extern double replication_timeout; ]]
   ffi.C.replication_timeout = 5
end
что-то все очень сложно получается ))

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

MA

Mons Anderson in Tarantool
Andrey
что-то все очень сложно получается ))

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

ВМ

Валерий Матросов... in Tarantool
room_space:create_index(room.USER_INDEX, {
   type = 'tree',
   unique = false,
   parts = {room.USER_ID, 'string'},
   if_not_exists = true
})

function model.delete_by_user_id(user_id)
   if validator.not_empty_string(user_id) then
       return model.get_space().index[model.USER_INDEX]:delete({user_id})
   end
end

Error: Get() doesn't support partial keys and non-unique indexes

Подскажите как правильно удалять из спейса по вторичному неуникальному индексу?
источник

ОБ

Олег Бабин in Tarantool
Валерий Матросов
room_space:create_index(room.USER_INDEX, {
   type = 'tree',
   unique = false,
   parts = {room.USER_ID, 'string'},
   if_not_exists = true
})

function model.delete_by_user_id(user_id)
   if validator.not_empty_string(user_id) then
       return model.get_space().index[model.USER_INDEX]:delete({user_id})
   end
end

Error: Get() doesn't support partial keys and non-unique indexes

Подскажите как правильно удалять из спейса по вторичному неуникальному индексу?
Вытаскивать праймак из таплов и звать space:delete(...)
источник

ВМ

Валерий Матросов... in Tarantool
Олег Бабин
Вытаскивать праймак из таплов и звать space:delete(...)
А сам Тарантул так не умеет?
источник

ОБ

Олег Бабин in Tarantool
Нет
источник

DS

Dmitry Sharonov in Tarantool
sql поможет, если неохота однострочник писать
источник

ОБ

Олег Бабин in Tarantool
Только sql если
источник

ВМ

Валерий Матросов... in Tarantool
Спасибо, разобрался
источник
2021 January 23

AT

Alexander Turenko in Tarantool
Vladislav Shpilevoy
раньше работало так:
- нетбокс хранит локально последнюю полученную от сервера версию
- клиент посылает запрос, к которому версия прикрепляется
- если на сервере оказалась другая версия, то возвращается ошибка версии, и нетбокс автоматически переотправляет РОВНО ТАКОЙ ЖЕ запрос снова + запускает рефетч схемы
То есть в старой схеме запрос переотправлялся без изменений, и в этом не было никакого смысла.

теперь:
- небокс тоже хранит локально последнюю полученную от сервера версию
- клиент посылает запрос, но версия к нему не прикрепляется. Такой запрос теперь не сможет сфейлится с ошибкой версии, так как в нем версии нет. Это равносильно тому, что в старой схеме этот запрос переотправлялся без каких-либо изменений. Только теперь не нужны быссмысленные переотправки.
- от сервера ответ приходит с номером версии, и нетбокс сранивает его с локальным. Если они не совпали, то он запускает фоновый рефетч схемы.
Поведение не стало более некорректным после этого изменения — это верно. В остальном, мы таким образом разрешаем выполнить запрос со старым space_id / index_id. Мы также предоставляем пользователю информацию о схеме в space like объектах, и пользователь может воспользоваться ей при формировании запроса (например, для выделения первичного или вторичного ключа из тапла для использования в запросе).

Ошибка E_WRONG_SCHEMA_VERSION нужна, чтобы запрос не был выполнен, если клиент имел неактуальную информацию о схеме. Мы не можем и не должны делать предположений о том, что схема не использовалась при формировании запроса. Более того, мы сами используем потенциально устаревшую схему для разрешения имен спейса и индекса. После рефетчинга схемы мы должны заново отмапить space name и index name в числовые id: в этом случае мы можем дать гарантию о том, что запрос был сделан по схеме, актуальной на момент вызова net.box-метода или более новой. В текущем варианте схема может быть любой: из прошлого, настоящего или будущего.

На мой взгляд, хорошей схемой взаимодействия является описанная тут (и, несколько детальней, тут). Кроме указанных моментов (когда дропать схему, когда слать IPROTO_PING и т. п.) я бы еще отметил парочку:

* Двух случаях необходимо делать запросы без schema_id: когда качаем саму схему (но мы должны убедиться, что все связанные со схемой ответы содержат одинаковый schema_id) и когда аутентифицируемся.
* Перед повторением запроса, получившего E_WRONG_SCHEMA_VERSION, мы должны заново отрезолвить имена спейса / индекса, если они использовались при запросе.
источник

AT

Alexander Turenko in Tarantool
Я зафайлю тикет с нормальным описанием (но попозже).
источник

MO

Maxat Oralbaev in Tarantool
Это ошибка возникает как можно исправить ? Total active bucket count is not equal to total. Possibly a boostrap is not finished yet. Expected 30000, but found 0.
источник

ОБ

Олег Бабин in Tarantool
Maxat Oralbaev
Это ошибка возникает как можно исправить ? Total active bucket count is not equal to total. Possibly a boostrap is not finished yet. Expected 30000, but found 0.
Это в картридже?

Похоже на незабутстрапленный vshard
источник

MO

Maxat Oralbaev in Tarantool
Олег Бабин
Это в картридже?

Похоже на незабутстрапленный vshard
ага.как можно исправить эту ошибку. Подсказка ?
источник

ОБ

Олег Бабин in Tarantool
источник

MO

Maxat Oralbaev in Tarantool
это кнопка только в начале создания инстансов далее уже не поможет в моем версии 2.3.0
источник