Top.Mail.Ru
box.error.new() | Tarantool
 

box.error.new()

box.error.new()

box.error.new(code, errtext[, errtext ...])

Создает объект ошибки, но не выдает ее, как это делает box.error(). Это полезно, когда информацию об ошибке нужно сохранить, чтобы вернуться к ней позже. Чтобы явно записать ошибку как последнюю, используйте box.error.set().

Параметры:
  • code (number) – номер предварительно заданной ошибки
  • errtext(s) (string) – часть сообщения, которое сопровождает ошибку

Пример:

tarantool> e=box.error.new{code=5,reason='A',type='B'}
---
...
tarantool> e:unpack()
---
- code: 5
  base_type: CustomError
  type: B
  custom_type: B
  message: A
  trace:
  - file: '[string "e=box.error.new{code=5,reason=''A'',type=''B''}"]'
    line: 1
...
tarantool> box.error.last()
---
- null

Начиная с версии 2.4.1, стал доступен параметр session_settings, который влияет на структуру объектов ошибок. Если error_marshaling_enabled изменяется на true, то объект ошибки будет иметь тип MP_EXT и подтип MP_ERROR. Используя бинарный протокол в теле пакета, который сервер может отправить в ответ на box.error.new(), можно увидеть: код MP_EXT по спецификации MessagePack (обычно 0xc7), за которым следует код MP_ERROR (0x03), за которым следует код MP_ERROR_STACK (0x81), после которого идут все компоненты MP_ERROR_STACK (MP_ARRAY, который содержит MP_MAP, содержащий ключи MP_ERROR_MESSAGE, MP_ERROR_CODE и т.д.). Эти компоненты описаны и проиллюстрированы в разделе Дополительные типы MessagePack – Тип ERROR. Поле «type» ассоциативного массива для объекта ошибки будет иметь key = MP_ERROR_TYPE, поле «code» будет иметь key = MP_ERROR_CODE, поле «message» будет иметь key = MP_ERROR_MESSAGE.