Size: a a a

2020 December 04

VG

Vladislav Grubov in Tarantool
Ivan
можно и так, если это будет быстрее
по сути он делает то, что я описал выше, только там константы хорошо подобраны
источник

I

Ivan in Tarantool
Всем спасибо за подсказки!
источник

AS

Arthur Salimkhanov in Tarantool
Добрый день, при обработке ошибок в трн столкнулся с такой особенностью: допустим в сторадже при сохранении возникает ошибка с кодом 3 но vshard.router.call уже возвращает ошибку с кодом 32, подскажите плиз как можно правильно прокинуть ошибку так чтобы коды которые вернул box доходили до роутера?
источник

AK

Alexey Kuzin in Tarantool
Arthur Salimkhanov
Добрый день, при обработке ошибок в трн столкнулся с такой особенностью: допустим в сторадже при сохранении возникает ошибка с кодом 3 но vshard.router.call уже возвращает ошибку с кодом 32, подскажите плиз как можно правильно прокинуть ошибку так чтобы коды которые вернул box доходили до роутера?
Что это за коды ошибок? Возвращаете ли вы ошибку вторым параметром из функции на сторадже?
источник

MA

Mons Anderson in Tarantool
Arthur Salimkhanov
Добрый день, при обработке ошибок в трн столкнулся с такой особенностью: допустим в сторадже при сохранении возникает ошибка с кодом 3 но vshard.router.call уже возвращает ошибку с кодом 32, подскажите плиз как можно правильно прокинуть ошибку так чтобы коды которые вернул box доходили до роутера?
box.error() на сторадже вызывайте
источник

AS

Arthur Salimkhanov in Tarantool
вообще пробовал разные варианты сначала без обработки допустим идет запись box.space…insert() там возникает ошибка и в роутере я жду ее вторым параметром, но если в бокс происходит ошибка /*  3 */_(ER_TUPLE_FOUND,  "Duplicate key exists in unique index '%s' in space '%s'") \ то в роутер она приходит уже под кодом /* 32 */_(ER_PROC_LUA,   "%s") \
источник

AS

Arthur Salimkhanov in Tarantool
второй вариант пробовал обрабатывать на сторадже
источник

AS

Arthur Salimkhanov in Tarantool
и возвращать вторым параметром
источник

AS

Arthur Salimkhanov in Tarantool
например на сторадже так
источник

AS

Arthur Salimkhanov in Tarantool
жду на роутере вот так
источник

AS

Arthur Salimkhanov in Tarantool
если делать так то res == false но err_save == nil
источник

AS

Arthur Salimkhanov in Tarantool
Mons Anderson
box.error() на сторадже вызывайте
пробовал и так делать, например просто делаю вызов box.error{ code = 9999, reason = 'Error test message'} в этом случае в роутере будет code 32 но message будет тот стринг который положил в reason)
источник

MA

Mons Anderson in Tarantool
Arthur Salimkhanov
пробовал и так делать, например просто делаю вызов box.error{ code = 9999, reason = 'Error test message'} в этом случае в роутере будет code 32 но message будет тот стринг который положил в reason)
хм, странно. по идее box.error существует как раз для того, чтоб возвращать код ошибки.
источник

AS

Arthur Salimkhanov in Tarantool
почему то в этом случае он замещает ошибкой 32 когда ее ждешь на роутере причем неважно что с каким кодом произошло на сторадже
источник

MA

Mons Anderson in Tarantool
Arthur Salimkhanov
почему то в этом случае он замещает ошибкой 32 когда ее ждешь на роутере причем неважно что с каким кодом произошло на сторадже
Возможно это из-за того, что вызов идёт через call
Надо будет посмотреть, сходу не отвечу.
Насколько я знаю, написание кода для тарантула с ориентированием на коды ошибок не распространено
источник

AS

Arthur Salimkhanov in Tarantool
Mons Anderson
Возможно это из-за того, что вызов идёт через call
Надо будет посмотреть, сходу не отвечу.
Насколько я знаю, написание кода для тарантула с ориентированием на коды ошибок не распространено
не подскажите как тогда распространено в тарантуле распознавание ошибки? по message с регуляркой?
источник

LV

Leonid V in Tarantool
Может упустил, а не подсветите версию тарантула?
источник

AS

Arthur Salimkhanov in Tarantool
2.3
источник

AS

Arthur Salimkhanov in Tarantool
если быть более точным
источник

R

R-omk in Tarantool
Arthur Salimkhanov
например на сторадже так
источник