error_object
-
object
error_object
Ошибки можно записывать в списки. Для этого у Lua-таблицы, представляющей объект ошибки, есть поле
.prev
и методe:set_prev(err)
.-
error_object:
set_prev
(error object) Установка ошибки в качестве предыдущей. Принимает объект ошибки или
nil
.
Пример:
tarantool> e1 = box.error.new({code = 111, reason = 'some cause'}) --- ... tarantool> e2 = box.error.new({code = 111, reason = 'cause of cause'}) --- ... tarantool> e1:set_prev(e2) --- ... tarantool> e1.prev --- - cause of cause ...
Циклы для списков ошибок недопустимы:
tarantool> e2:set_prev(e1) --- - error: 'builtin/error.lua:147: Cycles are not allowed' ...
Установка предыдущей ошибки подтягивает за ней ее собственные предыдущие ошибки:
-- e1 -> e2 -> e3 -> e4 e1:set_prev(e2) e2:set_prev(e3) e3:set_prev(e4) e2:set_prev(e5) -- Now there are two lists: e1->e2->e5 and e3->e4
Протокол IProto тоже поддерживает диагностику с помощью стека ошибок. Подробнее в разделе Дополнительные типы MessagePack – Тип ERROR.
-