Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

box.iproto.override()

override(request_type, handler)

Начиная с версии 2.11.0. Задаёт новый обработчик IPROTO-запросов для указанного типа запроса.

Параметры:

  • request_type (number) — код типа запроса. Возможные значения:

  • код типа из box.iproto.type (кроме box.iproto.type.UNKNOWN) — переопределение существующего обработчика типа запроса.

  • box.iproto.type.UNKNOWN — переопределение обработчика неизвестных типов запросов.

  • handler (function) — обработчик IPROTO-запросов. Сигнатура функции-обработчика: function(sid, header, body), где

    • header (userdata): заголовок запроса, закодированный как msgpack_object
    • body (userdata): тело запроса, закодированное как msgpack_object Возвращает true при успешном выполнении, иначе false. При false происходит откат к обработчику по умолчанию. Также ошибку можно сигнализировать выбросом исключения. В этом случае возвращаемое значение — false, но это не всегда означает неудачу. Чтобы сбросить обработчик запросов, задайте значение nil для параметра handler.

Возвращает

нет

Возможные ошибки:

Если Lua-обработчик выбрасывает исключение, поведение аналогично вызову удаленной процедуры. Клиенту возвращаются следующие ошибки через IPROTO (см. src/lua/utils.h):

  • ER_PROC_LUA — исключение выброшено из Lua-обработчика, диагностика не задана.
  • диагностики из src/box/errcode.h — исключение выброшено, диагностика задана.

Подробнее см. src/box/errcode.h.

Пример:

Определение функции-обработчика для типа запроса box.iproto.type.SELECT:

local function iproto_select_handler_lua(header, body)    if body.space_id == 512 then        box.iproto.send(box.session.id(),                { request_type = box.iproto.type.OK,                  sync = header.SYNC,                  schema_version = box.info.schema_version },                { data = { 1, 2, 3 } })        return true    end    return falseend

Переопределение обработчика box.iproto.type.SELECT:

box.iproto.override(box.iproto.type.SELECT, iproto_select_handler_lua)

Сброс обработчика box.iproto.type.SELECT:

box.iproto.override(box.iproto.type.SELECT, nil)

Переопределение функции-обработчика для неизвестного типа запроса:

box.iproto.override(box.iproto.type.UNKNOWN, iproto_unknown_request_handler_lua)