Top.Mail.Ru
error_object | Tarantool
 

error_object

error_object

object error_object

Ошибки можно записывать в списки. Для этого у Lua-таблицы, представляющей объект ошибки, есть поле .prev и метод e:set_prev(err).

error_object.prev

Возврат предыдущей ошибки, если она существует.

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.